Обычная последовательность, отправляемая терминалом для стрелки вверх, равна <Esc>OA
или ^[OA
(последовательность ^[
представляет клавишу <Esc>
, также эквивалентную Ctrl+[
.)
Если ваш Vim не может распознать эту последовательность как стрелку вверх, в итоге он выполнит следующую последовательность: <Esc>
, которая выйдет из режима вставки и go в обычный режим, затем O
, чтобы вставить новую строку над текущей и go для режима вставки, затем вставьте литерал 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 сообщить вам, откуда она установлена, и вы увидите, перезаписывает ли ее vimr c или один из ваших плагинов. Если Vim не показывает ничего из этого, это означает, что это происходит из переменной $TERM
в вашей оболочке.
Итак, посмотрите, что $TERM
установлено вне Vim, и посмотрите, кажется ли это правильным или нет , Вы устанавливаете это явно где-то? Будь то один из файлов инициализации оболочки или, возможно, из самого вашего эмулятора терминала?
Также может иметь значение, используете ли вы tmux или screen, и в этом случае вам следует дважды проверить, что $TERM
также установлен правильно внутри Tmux или экран, но также снаружи it.
Надеемся, что все эти подсказки должны привести вас в правильном направлении, исправляя это. Если вы не можете это выяснить, опубликуйте свои выводы как комментарии к этому ответу, и я обновлю его, добавив более подробные c исправления, которые вы можете попробовать.