我想映射Home按钮,以便vim转到vim中的第一个非空白字符.但映射主页按钮没有任何作用?如果我映射另一个键,那么它可以正常工作.
请参阅下面的我的vimrc文件:
map <Home> 0w
imap <Home> <ESC>0wi
Run Code Online (Sandbox Code Playgroud)
以上不起作用.虽然以下工作(例如Ctrl-F)
map <C-f> 0w
imap <C-f> <ESC>0wi
Run Code Online (Sandbox Code Playgroud)
有没有办法将Home键映射到此?我真的需要它,因为我在使用Notepad ++,Sublime text 2,Visual Studio,...时习惯了这一点.
我也试过以下,没有结果.当使用另一把钥匙时,它再次起作用...... http://vim.wikia.com/wiki/Smart_home
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.
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以检查home您按下的键是否与Vim理解的相同<Home>.
另一种可能性是其他一些映射正在干扰这一点.您可以尝试以下方法:
noremap <Home> 0w
inoremap <Home> <ESC>0wi
Run Code Online (Sandbox Code Playgroud)
编辑:
似乎问题是您的终端正在发送homeVim无法识别的密钥代码<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~")
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,你可以试试:set t_kh=^V^[[1~.如果它有效,您可以将其附在终端类型的检查上.其他信息可在以下网址找到:h terminal options
编辑2:
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
Run Code Online (Sandbox Code Playgroud)