如何在 vim 中获取终端键码

How can I get the terminal key code in vim

我有一个现有的 .vimrc,它是在 macintosh 计算机上创建的,包含如下映射:

"------------------------------------------------------------
" keyboard shortcuts
"------------------------------------------------------------

nmap <S-Tab> :wincmd W<CR>
nmap <S-q> :bp\|bd #<CR>
nmap « :bp\|bd #<CR>
nmap ¢ :sp<CR>
nmap ¶ :vsp\|wincmd w<CR>
nmap :Q :qa<CR>
nmap :W :wqa<CR>
nmap ≠ :q<CR>
nmap ESC[1;9B 15j
nmap ESC[1;9A 15k
nmap ^? :w<CR>
nmap ø :edit
nmap ESC[1;5B 15j
nmap ESC[1;5A 15k
vmap ESC[1;5B 15j
vmap ESC[1;5A 15k
nmap ^\ :edit
nmap ^] :wincmd w<CR>
nmap <F9> :w<CR>:Make<CR><CR>
imap <F9> <ESC>:w<CR>:Make<CR>
nmap <C-n> :cnext<CR>
nmap <C-p> :cprev<CR>
nmap <F5> :Grep
nmap @ g~w w
nmap <F10> :ConqueGdb
nmap ^A :sav %:h/filename
nmap ESC[1;2D :NERDTreeToggle<CR>
nmap ESC[1;2B :sp\|wincmd w<CR>
nmap ESC[1;2C :vsp\|wincmd w<CR>
nmap ESC[1;5D :q<CR>
nmap ESC[1;5F :BuffergatorToggle<CR>

nmap ESC[1;6D w
nmap ESC[1;6B b

现在我已将此 .vimrc 转移到新的 linux 计算机(基于 debian),但一半的快捷方式不再有效。我想那是因为 mac 与 linux 计算机相比对某些击键的解释不同(两台计算机都具有 vim v8.1)。

在创建快捷方式的时候,我记得vim里面有一个函数,当你按下按键的时候会打印出按键代码,不过那是大约10年前的事了,我不记得了,我无法通过 google.
找到 准确的说是"press XYZ in vim, then press e.g. CTRL+S, then vim would print the corresponding key code to be used in the mappings".

我现在该怎么做,才能使这些快捷方式也适用于 linux?

您正在寻找 :help i_CTRL-V:

For special keys, the terminal code is inserted.

例如,在我的 Gnome 终端中按 <C-V><Right> 得到 ^[OC<C-V><F12> 得到 ^[[24~.

一般来说,您应该尽可能选择 Vim 的 key-notation。如果您确实需要插入特定的转义码 并且 需要使用单个 ~/.vimrc 支持多个平台,您可以将映射定义包装在 if has('mac')if $TERM ==# 'screen256-color'.