在 iTerm 中将键映射到自定义转义序列是否安全?

iva*_*van 5 terminal vim

我在 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)

我不确定这会起作用,但我也想知道在我开始创建自定义转义序列之前应该注意什么。似乎它可能会导致问题......

iva*_*van 4

在这两页(如下)之间,我弄清楚了:

通过使用未使用的功能键的按键代码,您可以保持“安全”。在 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)