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

Joe*_*ery 5 macos vim macvim

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

inoremap <S-CR> <Esc>
Run Code Online (Sandbox Code Playgroud)

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

我感谢你的帮助!

Tad*_*dhg 16

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

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

对于这个例子,在iTerm2中,打开Keys Preferences窗口,添加Global Shortcut键,输入shift和return,给它一个Set Text的动作,然后把✠(一个马耳他十字,但你可以使用任何随机的不可能 - -be-used Unicode character)作为其值.在.vimrc中,添加以下行:

" Map ? (U+2720) to <Esc> as <S-CR> is mapped to ? in iTerm2.
inoremap ? <Esc>
Run Code Online (Sandbox Code Playgroud)

要么:

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>
Run Code Online (Sandbox Code Playgroud)

<S-CR>在iTerm2中输入Vim现在最终将<Esc>根据需要在Vim中生成.

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


Rai*_*ndi 6

这是因为对于iTerm <S-CR>与<CR>相同,键入Ctrl+ V Return然后 Ctrl+ V Shift+ Return,您将看到在两种情况下都插入了相同的字符.

因此,当您键入<S-CR>时,Vim获取<CR>并且不会触发您的映射.