无法在Vim中映射<S-CR>

10

我在周末购买了我的第一台Mac,正在努力适应。这个在我的Windows上有效的vimrc中的命令,在通过iTerm运行Vim时不起作用。

inoremap <S-CR> <Esc>

我希望在插入模式下,Shift-Enter可以作为Escape键。我尝试使用Enter和Return键,但这需要我在Macbook上使用Fn键,这与使用Escape键一样麻烦。
感谢您的帮助!

1
可能是重复的问题[VIM - 如何映射Shift-Enter]的链接(https://dev59.com/fGQo5IYBdhLWcg3wDbwJ) - rafi
3个回答

19
问题在于终端仿真。大多数终端无法区分非打印键[1]和那些与修改键组合的键。
然而,如果您的终端应用程序具有重新映射键组合的功能(例如iTerm2),则仍然可以使所需的组合键起作用。将终端应用程序的组合键映射到您永远不会使用的某个Unicode字符,然后在Vim中将该键映射到所需的效果,就可以解决这个限制。
对于此示例,在iTerm2中,打开“键”首选项面板,添加一个全局快捷键,输入shift和return,将其动作设为“设置文本”,然后将✠(马耳他十字架,但您可以使用任何随机不太可能使用的Unicode字符)作为其值。在您的.vimrc中添加以下行:
" Map ✠ (U+2720) to <Esc> as <S-CR> is mapped to ✠ in iTerm2.
inoremap ✠ <Esc>

或者:

inoremap <S-CR> <Esc>
" Map ✠ (U+2720) to <S-CR>, so we have <S-CR> mapped to ✠ in iTerm2 and
" ✠ mapped back to <S-CR> in Vim. 
imap ✠ <S-CR>

在iTerm2中键入<S-CR>会导致在Vim中最终得到所需的<Esc>

[1]:例如空格、制表符、回车、删除、控制、alt、esc。


被采纳的答案只是解释了问题。而这个答案提供了一个解决方案。感谢 Tadhg,我学到了新东西 :) - justin

8
那是因为对于iTerm而言,<S-CR>与<CR>相同。要键入Ctrl+V Return,然后键入Ctrl+V Shift+Return,你会发现在两种情况下都插入了相同的字符。所以,当你键入<S-CR>时,Vim会接收到<CR>,而你的映射不会被触发。

2

MacVim是GVim的等效GUI版本,用于Vim。你不需要通过iTerm运行MacVim。你可以运行GUI版本(MacVim.app)或CLI版本($ vim)。

你可以从CLI启动GUI,但iTerm的设置不会影响MacVim的设置。

在MacVim中,你的映射功能完美运行。

据我所知,所有或大多数“终端”都将视为。也许你应该尝试另一个序列,如jj


你说得对,我是指通过终端使用Vim。我已经编辑了我的原始帖子以反映这一点。感谢澄清! - JoeQuery

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接