在vim中映射功能键

woo*_*tok 19 vim keymapping

我想F2用以下条目映射我的nerdtree:

map <F2> :NERDTreeToggle<CR>
Run Code Online (Sandbox Code Playgroud)

但即使在此之前,并且在保存vimrc之后,每当我按下时F2,它只会切换光标所在字母的大小写.后来发现任何功能键都能做到.F5切换5个字符的大小写等.这是因为其他一些插件吗?我目前使用c.vim,snippetsEmu,surround,nerdtree和minibufexpl

我的vimrc中的任何功能键都没有键映射.

ZyX*_*ZyX 21

你的问题是vim不知道按下时终端发出了什么<F2>.在某些终端上它发出类似的东西<Esc>[12~,所以vim退出当前模式(或者如果它不能发出蜂鸣声)(<ESC>),什么都不做([1:之后必须有一些键[,但不是1,所以它什么都不做)并改变大小写两个字母(2~).所以,你应该打开.vimrc并写下以下内容:

set <F2>=<C-v><F2>

在哪里<C-v><F2>意味着你必须按<C-v>,然后<F2>.该行应该告诉Vim按下时终端发出的代码的确切顺序<F2>.在那之后,使用noremap <F2> whatever它应该工作.如果它不是您正在使用的唯一终端,那么您可能想要放在此行之前和之后.if $TERM==#"<C-r>=$TERM<CR>"endif

  • @Mlkhail喜欢`map`,但是阻止使用其他用户映射.例如,如果你有`imap ab`和`imap bc`,那么按'a`将导致`c`.如果你有`inoremap ab`那么按'a`将导致'b`,无论是否重写'b`.我建议永远不要使用`?map`,除非你知道你需要重新映射(例如,使用`<Plug>`映射). (2认同)

mic*_*ebe 6

:map <F2> :NERDTreeToggle<CR>
Run Code Online (Sandbox Code Playgroud)

启动Vim后你可以看看

:map <F2>
Run Code Online (Sandbox Code Playgroud)

F2映射到什么.插件可能会更改映射(在.vimrc中不可见)