无法在Vim中重新映射<F5>

zub*_*uba 1 vim vundle

我使用Vundle和Vim的其他一些插件

当我执行时,:map <F5>我看到了<F5> :!ruby %<CR>

但是我已经在我~/.vimrc所有的Bundle指示结束后定义了这些映射:

imap <F5> <Esc><Esc>:w<CR>:!ruby %<CR>
nmap <F5> <Esc><Esc>:w<CR>:!ruby %<CR>
omap <F5> <Esc><Esc>:w<CR>:!ruby %<CR>
cmap <F5> <Esc><Esc>:w<CR>:!ruby %<CR>
vmap <F5> <Esc><Esc>:w<CR>:!ruby %<CR>
smap <F5> <Esc><Esc>:w<CR>:!ruby %<CR>
xmap <F5> <Esc><Esc>:w<CR>:!ruby %<CR>
map <F5> <Esc><Esc>:w<CR>:!ruby %<CR> 
Run Code Online (Sandbox Code Playgroud)

此外,如果我在Vim中执行,:map <F5> <Esc><Esc>:w<CR>:!ruby %<CR>它的工作方式应该是这样的.好像我在.vimrc中的映射被忽略了.

这是为什么?如何重新映射<F5>

更新:

:verbose map <F5>
   <F5>          :!ruby %<CR>
        Last set from ~/Dropbox/home/.vim/bundle/ruby-menu.vim/plugin/ruby-menu.vim
Run Code Online (Sandbox Code Playgroud)

实际上我不需要ruby-menu插件,会丢弃它.顺便问一下,为什么它重新映射我的映射?

Ing*_*kat 5

您可以通过以下方式查看定义的位置

:verbose map <F5>
Run Code Online (Sandbox Code Playgroud)

它似乎来自ruby-menu插件中的这一行.该插件应该提供 - <Plug>映射目标,允许您更改映射的键,或完全禁用映射.您可以针对它提交缺陷.

该插件会覆盖您的映射,因为在插件加载时,您的.vimrc已经完成处理.

为了解决方法,您需要定义映射的插件加载,用这些方法之一:

  1. 使用after目录并将重写映射定义放入~/.vim/bundle/ruby-menu.vim/after/plugin/ruby-menu.vim
  2. 使用~/.vim/after/plugin/mappings-override.vim插件之后的其他位置(例如)(检查:scriptnames)
  3. 从你的~/.vimrcvia 尝试覆盖autocmd VimEnter * map <F5> ...,从而延迟实际的定义,直到插件初始化为止

  • @zuba,一点也不例外,Ingo的答案总是*像这一样. (3认同)