来自Vim FAQ(也可通过这个不错的插件获得):
这段话是关于从Vim FAQ获取信息的,可以通过一个插件来实现。
20.4. I am not able to create a mapping for the <xxx> key. What is wrong?
1) First make sure, the key is passed correctly to Vim. To determine if
this is the case, put Vim in Insert mode and then hit Ctrl-V (or
Ctrl-Q if your Ctrl-V is remapped to the paste operation (e.g. on
Windows if you are using the mswin.vim script file) followed by your
key.
If nothing appears in the buffer (and assuming that you have
'showcmd' on, ^V remains displayed near the bottom right of the Vim
screen), then Vim doesn't get your key correctly and there is nothing
to be done, other than selecting a different key for your mapping or
using GVim, which should recognise the key correctly.
这样您就可以检查您按下的home
键是否与Vim理解为<Home>
的相同。
另一种可能是其他映射正在干扰此映射。您可以尝试以下操作:
noremap <Home> 0w
inoremap <Home> <ESC>0wi
编辑:
问题似乎在于您的终端发送了一个 home
键码,但 Vim 没有将其识别为 <Home>
。
我认为最好的解决方案是让 Vim 正确地识别该键,这样您就可以在其他终端/系统上移动您的 .vimrc
而无需更改。
参考文献::h xterm-end-home-keys
:
On some systems (at least on FreeBSD with XFree86 3.1.2) the codes that the
<End> and <Home> keys send contain a <Nul> character. To make these keys send
the proper key code, add these lines to your ~/.Xdefaults file:
*VT100.Translations: #override \n\
<Key>Home: string("0x1b") string("[7~") \n\
<Key>End: string("0x1b") string("[8~")
如果那不起作用,您可以尝试
:set t_kh=^V^[[1~
。如果它有效,您可以将其包含在终端类型检查中。
更多信息可以在
:h 终端选项
中找到。
20.4. I am not able to create a mapping for the <xxx> key. What is wrong?
:
:
3) If the key is seen, but not as itself and not as some recognizable
key, then there is probably an error in the terminal library for the
current terminal (termcap or terminfo database). In that case >
:set term?
will tell you which termcap or terminfo Vim is using. You can try to
tell vim, what termcode to use in that terminal, by adding the
following to your vimrc: >
if &term == <termname>
set <C-Right>=<keycode>
endif
where <termname> above should be replaced by the value of 'term'
(with quotes around it) and <keycode> by what you get when hitting
Ctrl-V followed by Ctrl-Right in Insert mode (with nothing around
it). <C-Right> should be left as-is (9 characters). Don't forget that
in a :set command, white space is not allowed between the equal sign
and the value, and any space, double quote, vertical bar or backslash
present as part of the value must be backslash-escaped.
Now you should be able to see the keycode corresponding to the key
and you can create a mapping for the key using the following command: >
:map <C-Right> <your_command_to_be_mapped>
For more information, read
:h map-keys-fails
:h map-special-keys
:h key-codes
0w
可以改为^
。 - Kent:h ^
命令,^
的功能和0w
相同。 - Kent