Невозможно переназначить ‹F5› в Vim

Я использую 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, я его выброшу. Кстати, почему он переназначает мои сопоставления?


person zuba    schedule 17.11.2014    source источник
comment
Вы можете проверить с :verbose map <F5>.   -  person Ingo Karkat    schedule 17.11.2014


Ответы (1)


Вы можете проверить, где это было определено через

:verbose map <F5>

Кажется, это из этой строки в подключаемом модуле 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. попробуйте переопределить с вашего ~/.vimrc через autocmd VimEnter * map <F5> ..., тем самым задержав фактическое определение до тех пор, пока плагины не будут инициализированы
person Ingo Karkat    schedule 17.11.2014
comment
Спасибо за исключительное объяснение! - person zuba; 17.11.2014
comment
@zuba, совсем не исключение, ответы Инго всегда такие, как этот. - person romainl; 17.11.2014