我在 MacVim 中使用了一些终端 Vim 无法识别的键。例如,Ctrl-Enter、Shift-Enter、Ctrl-Space、Shift-Space、Ctrl-Backspace。
我正在使用 iTerm2,它允许您映射键盘快捷键以发送转义序列。似乎我可以使用它来使我想要的键映射在终端中工作。就像是,
iTerm2
Ctrl-Space: Send ^[[123;456ABC
Run Code Online (Sandbox Code Playgroud)
维姆
set <F13>=^[[123;456ABC
map <F13> <S-Space>
noremap <S-Space> mzO<Esc>j`z
Run Code Online (Sandbox Code Playgroud)
我不确定这会起作用,但我也想知道在我开始创建自定义转义序列之前应该注意什么。似乎它可能会导致问题......
在这两页(如下)之间,我弄清楚了:
通过使用未使用的功能键的按键代码,您可以保持“安全”。在 iTerm2 中,我创建了“键盘快捷键”,将所需的组合键映射到功能键 F13 到 F16 的转义序列。然后,在我的 vimrc 中,我适当地设置 Vim 的键码,将所需的组合键映射到正确的功能键,然后将相同的组合键映射到我想要的任何键。我不确定我是否完全理解事情的发展方向,但一切都是相互联系起来并发挥作用的。这是我的 vimrc 的相关部分:
" use some unused function key codes to
" make special key combos work in terminal
set <F13>=O2P
map <F13> <C-CR>
map! <F13> <C-CR>
set <F14>=O2Q
map <F14> <S-CR>
map! <F14> <S-CR>
set <F15>=O2R
map <F15> <C-Space>
map! <F15> <C-Space>
set <F16>=O2S
map <F16> <S-Space>
map! <F16> <S-Space>
" open above / below current line
inoremap <S-CR> <C-O>O
inoremap <C-CR> <C-O>o
" insert above / below current line
noremap <S-Space> mzO<Esc>j`z
noremap <C-Space> mzo<Esc>k`z
Run Code Online (Sandbox Code Playgroud)