Недавно я начал встречаться с действительно раздражающим поведением в VIM:
Неважно, если я нахожусь во вставке или нормальном режиме, если я нажимаю одну из клавиш F, энергия не делает то, что это обычно предназначается, чтобы сделать:
F1 - inserts a "P"
F2 - inserts a "Q"
F3 - inserts a "R"
F4 - inserts a "S"
F5-10 - inverts case
При использовании GVim все работает как ожидалось. Какие-либо предложения? Я использую версию 7.3 на Индивидуалисте Ubuntu 10.10. Используя разделитель, но изменяющийся на терминал по умолчанию не помогает.
Это вызвано тем, что терминал переводит X событий в escape-последовательности как они:
<F1> -> ^[OP
<F2> -> ^[OQ
<F3> -> ^[OR
<F4> -> ^[OS
<F5> -> ^[[15~
<F6> -> ^[[17~
и так далее (^[
символ ESC). В некоторых терминалах энергия может получить эти последовательности от terminfo базы данных, но иногда terminfo база данных не соответствует символам, на самом деле отправляют, или не делает содержит key_f*
записи. В этом нажатии случая <F1>
приведет к получению Escape (выходит из текущего режима, если это не нормальный режим), O
(в нормальном режиме: создайте новую строку перед строкой курсора и введите режим вставки), и некоторый символ, который вставляется на новой строке (и для <F5>-...
ключи ~
та команда, которая инвертирует случай). Можно зафиксировать его путем помещения в vimrc чего-то как этот
" Condition should identify terminal in question so "
" that it won't change anything for terminals without this problem "
if !has("gui_running") && $TERM is "xterm"
for [key, code] in [["<F1>", "\eOP"],
\["<F2>", "\eOQ"],
\["<F5>", "\e[15~"],
\]
execute "set" key."=".code
endfor
endif
Если Ваши коды отличаются от этого, которые я использовал в качестве примера, использовать <C-v><F1>
(во вставке или режимах командной строки) для получения то, что отправляет терминал (больше информации в :h i_CTRL-V
).