无法在Vim中重新映射<f5> </f5>

时间:2014-11-17 11:14:47

标签: 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> 

此外,如果我在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插件,会丢弃它。顺便问一下,为什么它会重新映射我的映射?

1 个答案:

答案 0 :(得分:5)

您可以通过

查看定义的位置
:verbose map <F5>

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

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

要解决此问题,您需要使用以下方法之一定义插件加载后的映射

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