如何在 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'
.
我有一个现有的 .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'
.