MacVim (iterm2 / tmux) bind alt / meta - PullRequest
       6

MacVim (iterm2 / tmux) bind alt / meta

1 голос
/ 01 марта 2012

У меня есть этот замечательный набор отображений vim

" Drag Current Line/s Vertically
nnoremap <M-j> :m+<CR>
nnoremap <M-k> :m-2<CR>
inoremap <M-j> <Esc>:m+<CR>
inoremap <M-k> <Esc>:m-2<CR>
vnoremap <M-j> :m'>+<CR>gv

, который я не могу заставить работать с комбо Mac / iTerm2 / Tmux / vim.Думаю, проблема в том, что клавиша Alt не отображается.

PS "Левая опция действует как" установлена ​​на +Esc в настройках ключей сеанса iTerm

Ответы [ 2 ]

1 голос
/ 06 февраля 2019

Я подбрасываю это здесь после того, как прочесываю тонны ТАКИХ вопросов и ответов. Это решение работало для меня с iTerm2 + Mojave.

  1. В iTerm2 перейдите в «Настройки» -> «Профиль» -> «Ключи». В правом нижнем углу измените свою левую (или правую) функциональную клавишу, чтобы включить последовательность Esc + вместо Meta / Normal.
  2. Вставьте следующий код в ваш .vimrc:
execute "set <A-j>=\ej"
execute "set <A-k>=\ek"

nnoremap <A-j> :m .+1<
nnoremap <A-k> :m .-2<
inoremap <A-j> <Esc>:m .+1<CR>==
inoremap <A-k> <Esc>:m .-2<CR>==
vnoremap <A-j> :m '>+1<CR>gv=
vnoremap <A-k> :m '<-2<CR>gv=gv

Что это делает?

Правда, мое понимание не велико. Когда вы отправляете команду ALT+j на Терминал, iTerm получит ее как ^[j, что является последовательностью Escape. При сопоставлении его с Vim, ^[ заканчивается как \e. Если вы хотите дважды проверить, как работает ваш ALT+j (или ALT+k), введите sed -n l в окне терминала и нажмите ALT+j - вы должны увидеть этот вывод: ^[j

Команды execute set переопределяют сопоставления <A-j> и <A-k>, чтобы Vim отключил ^[j / ^[k соответственно, чтобы соответствовать тому, что запускается iTerm.

Это исправило это для меня, и теперь я могу перемещать линейные блоки как профессионал. Надеюсь, это поможет некоторым людям (извините за мое неаккуратное объяснение - все еще изучаю экосистему Vim).

1 голос
/ 02 марта 2012

Я уже сделал несколько реальных тестов на эту проблему . Мой временный и не заслуживающий доверия вывод заключался в том, что сопоставления, использующие <M->, не работают в iTerm2, и что вместо них следует использовать альтернативные решения.

Я использую <leader>.

...