Обычная последовательность, отправляемая терминалом для стрелки вверх, — это <Esc>OA
или ^[OA
(последовательность ^[
представляет клавишу <Esc>
, также эквивалентную Ctrl+[
).
Если ваш Vim не распознает эту последовательность как стрелку вверх, он в конечном итоге выполнит следующую последовательность: <Esc>
, которая выйдет из режима вставки и перейдет в обычный режим, затем O
, чтобы вставить новую строку над текущей и перейти в режим вставки, затем вставьте литерал A
, так как вы снова будете в режиме вставки.
Вы можете подтвердить, что это действительно последовательность, которую ваш терминал отправляет Vim, набрав Ctrl+V
, а затем стрелку вверх в режиме вставки. (Ctrl+V
в режиме вставки следующий символ вставляется буквально.) Я ожидал вы увидите вставленную последовательность ^[OA
.
Затем вы можете проверить, что ваш Vim думает о последовательности для стрелки вверх, с помощью команды :set <Up>
. Я ожидаю, что вы увидите что-то вроде:
t_ku <Up> ^[OA
(t_ku
— это внутреннее имя параметра, соответствующего этой клавише со стрелкой вверх. Вы также можете использовать :set termcap
для просмотра всех параметров Vim, связанных с терминалом, включая специальные коды клавиш.)
Если какой-либо из них не соответствует ожиданиям, это объясняет, почему ваш Vim не распознает клавишу со стрелкой вверх. (Альтернативное объяснение состоит в том, что 'ttimeoutlen'
задано слишком короткое значение, но я д сказать, что это маловероятно.)
Этими параметрами обычно управляет параметр 'term'
. По умолчанию он устанавливается на основе того, что у вас есть для $TERM
в вашей оболочке вне Vim.
Вы можете начать с того, что Vim считает 'term'
и откуда он установлен:
:verbose set term?
term=screen-256color
Last set from ~/.vimrc line 100
Часть :verbose
просит Vim сообщить вам, откуда она установлена, чтобы вы могли увидеть, перезаписывает ли ее ваш vimrc или один из ваших плагинов. Если Vim не показывает ничего из этого, это означает, что это происходит из переменной $TERM
в вашей оболочке.
Итак, посмотрите, что $TERM
установлено вне Vim, и посмотрите, кажется ли это правильным или нет. Вы устанавливаете это явно где-то? Будь то один из файлов инициализации оболочки или, возможно, из самого эмулятора вашего терминала?
Также, возможно, имеет значение, используете ли вы tmux или screen, и в этом случае вам следует еще раз проверить, правильно ли установлено $TERM
как внутри tmux или screen, так и снаружи.
Надеюсь, все эти подсказки приведут вас в правильном направлении. Если вы не можете понять, опубликуйте свои выводы в комментариях к этому ответу, и я обновлю его более конкретными исправлениями, которые вы можете попробовать.
person
filbranden
schedule
28.04.2020