2

我为 Vim 使用 vundle 和其他一些插件

当我执行时,: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> 

此外,如果我在 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

实际上我不需要 ruby​​-menu 插件,会把它扔掉。顺便说一句,为什么它重新映射我的映射?

4

1 回答 1

7

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

:verbose map <F5>

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

该插件会覆盖您的映射,因为在插件加载时,您的 .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> ...,从而将实际定义延迟到插件初始化之后
于 2014-11-17T11:56:22.457 回答