我有一套很好的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
答案 0 :(得分:1)
我已经完成了some real life tests regarding this exact issue。我的临时和非权威结论是,使用<M->
的映射在iTerm2中不起作用,而且应该使用替代解决方案。
我使用<leader>
。
答案 1 :(得分:1)
在仔细阅读大量SO问题和答案后,我将其扔在这里。此解决方案适用于iTerm2 + Mojave。
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生态系统)。