сопоставление функциональных клавиш в vim

Я хочу сопоставить свой F2 для nerdtree со следующей записью:

map <F2> :NERDTreeToggle<CR>

Но даже до этого и после сохранения vimrc всякий раз, когда я нажимаю F2, он просто переключает регистр букв, на которых присутствует курсор. Позже выяснил, что это делает любая функциональная клавиша. F5 переключает регистр 5 символов и так далее. Это из-за какого-то другого плагина? В настоящее время я использую c.vim, snippetsEmu, Surround, nerdtree и minibufexpl.

В моем vimrc нет сопоставлений клавиш с какой-либо функциональной клавишей.


person woodstok    schedule 19.08.2010    source источник


Ответы (2)


Ваша проблема в том, что 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 после.

person ZyX    schedule 19.08.2010
comment
ой. В прошлый раз я пропустил верхнюю часть. Теперь она работает. Спасибо. Кроме того, что делает noremap? - person woodstok; 19.08.2010
comment
@Mlkail Как и map, но запрещает использование других сопоставлений пользователей. Например, если у вас есть imap a b и imap b c, то нажатие a приведет к c. Если у вас есть inoremap a b, то нажатие a приведет к b независимо от того, переназначено ли b или нет. Я рекомендую никогда не использовать ?map, если вы не знаете, что вам нужно переназначение (например, с сопоставлениями <Plug>). - person ZyX; 19.08.2010
comment
@Zyx, большое спасибо :) f2 запущен и работает. - person woodstok; 19.08.2010
comment
еще кое-что. Теперь я установил ‹F2›=(Нажмите) (C-V)‹F2›. Могу ли я обобщить команду для всех функциональных клавиш в одной команде (используя какой-либо параметр) или мне нужно дать их отдельно? - person woodstok; 19.08.2010
comment
@Mlkail Только отдельно. Вы можете автоматизировать это, используя :while и :execute, но вы должны быть уверены, что это правильно. В большинстве моих эмуляторов терминала результат нажатия <F1>-<F4> немного отличается от результата нажатия <F5>-.... - person ZyX; 19.08.2010

:map <F2> :NERDTreeToggle<CR>

После запуска Vim вы можете посмотреть с помощью

:map <F2>

чему соответствует F2. Возможно, плагины меняют отображение (не видно в .vimrc)

person michael.kebe    schedule 19.08.2010
comment
Я пробовал это .. он говорит, что сопоставление не найдено.btb, для указания F2 вам нужно нажать F и 2, верно? или мы должны использовать ctrl + v? Я пробовал оба.. все еще не работает. Также я использую SSH Secure Shell Client для входа на сервер FreeBSD. - person woodstok; 19.08.2010
comment
Вы можете попробовать загрузить vim без какой-либо настройки gvim -u NONE -U NONE -N, затем в режиме вставки посмотреть, что происходит, когда вы нажимаете функциональные клавиши, следует вставить ‹f2›. Затем попробуйте сопоставить что-то более простое с f2, например: map ‹f2› +yy (скопировать текущую строку, чтобы вставить буфер). Также вы можете сопоставить любую функциональную клавишу? (да, вы вводите f и 2) - person zzapper; 19.08.2010
comment
Также введите, чтобы узнать, что и где, по мнению f2, установлено: verbose map ‹f2› - person zzapper; 19.08.2010
comment
f2 подробно показал не отображения. и я попытался запустить vim без каких-либо настроек. f2 по-прежнему ведет себя странно. Сопоставление чего-то подобного тоже не работает. Я чувствую, что это какая-то проблема с моей машиной с Linux, поскольку на моем домашнем ноутбуке сопоставления функциональных клавиш работали нормально. Я просто не знаю, как понять, что не так. :( - person woodstok; 19.08.2010
comment
@Mlkail Вы видели мое объяснение этого поведения? - person ZyX; 19.08.2010