无法在Vim中映射<s-cr> </s-cr>

时间:2011-03-22 08:32:50

标签: macos vim macvim

周末有我的第一台Mac,我正在努力调整。我的vimrc中的这行在我的窗口上运行,不能通过iTerm与vim一起使用

inoremap <S-CR> <Esc>

我想让Shift-Enter在插入模式下充当Escape。我尝试过使用Enter和Return,但这需要我在Macbook上使用Fn键,这和转义键一样烦人。

我感谢您的帮助!

3 个答案:

答案 0 :(得分:15)

这里的问题是终端仿真。大多数终端无法区分非打印键[1]和那些与修饰键组合的键。

但是,如果您的终端应用程序能够重新映射组合键(例如iTerm2),您仍然可以使所需的组合工作。将终端应用程序的组合映射到您永远不会使用的某个Unicode字符,然后将Vim中的该键映射到所需的效果,并且您可以绕过此限制。

对于这个例子,在iTerm2中,打开Keys Preferences面板,添加Global Shortcut键,输入shift和return,给它一个Set Text的动作,然后把✠(一个马耳他十字,但你可以使用任何随机不太可能使用的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中在Vim中输入<S-CR>现在最终将根据需要在Vim中生成<Esc>

[1]:例如空格,制表符,输入,删除,控制,alt,转义。

答案 1 :(得分:6)

这是因为对于iTerm&lt; S-CR&gt;与&lt; CR&gt;相同,输入 Ctrl + V 返回然后 Ctrl + V < / kbd> Shift + 返回,您会看到在这两种情况下都插入了相同的字符。

因此,当您键入&lt; S-CR&gt; Vim获得&lt; CR&gt;并且不会触发您的映射。

答案 2 :(得分:2)

MacVim相当于GVim:Vim的GUI。你没有通过iTerm运行MacVim。您可以运行GUI版本(MacVim.app)或CLI版本($ vim)。

您可以从CLI启动GUI,但iTerm的设置不会以任何方式干扰MacVim的设置。

在MacVim中,您的映射效果非常好。

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