MacVim(iterm2 / tmux)绑定alt / meta

时间:2012-03-01 17:08:27

标签: macos vim macvim

我有一套很好的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键中没有映射。

P.S。 “左选项键充当”在iTerm会话密钥首选项中设置为+Esc

2 个答案:

答案 0 :(得分:1)

我已经完成了some real life tests regarding this exact issue。我的临时和非权威结论是,使用<M->的映射在iTerm2中不起作用,而且应该使用替代解决方案。

我使用<leader>

答案 1 :(得分:1)

在仔细阅读大量SO问题和答案后,我将其扔在这里。此解决方案适用于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的形式接收它,这是一个转义序列。将其映射到Vim时,^[最终以\e的形式出现。如果要仔细检查ALT+j(或ALT+k)的触发方式,请在终端窗口中输入sed -n l,然后按ALT+j –您应该看到以下输出: ^[j

execute set命令正在重新映射<A-j><A-k>映射,以使Vim分别触发^[j / ^[k以匹配iTerm触发的内容。 / p>

这已为我修复,现在我可以像专业人士一样移动线块。希望它可以对某些人有所帮助(对不起,我的解释很乏味–仍在学习Vim生态系统)。