#vim
#vim
Вопрос:
При использовании режима терминала vim (доступ по :term
), если я заключу в две двойные кавычки, а затем нажму левую кнопку (например, если вы должны ввести, git commit -m ""
а затем вернуться на один символ, чтобы начать сообщение), произойдет следующее:
- Терминал закрыт.
- Новая строка добавляется над курсором в буфере.
- Вводится режим вставки.
- Символ
D
вставлен.
Точная введенная последовательность :term<cr>git commit -m ""<left>
Почему происходит эта серия событий и как я могу предотвратить это в будущем?
Комментарии:
1. Непонятно почему, но управляющая последовательность, отправляемая клавишей со стрелкой влево (
^[OD
), не передается в оболочку терминала, а скорее обрабатывается самой Vim.2. Я не могу воспроизвести проблему (используя Vim 8.0 с исправлениями 1-1453) в подсистеме Windows для Linux в Windows 10. Когда я пытаюсь, он работает так, как ожидалось.
3. Вероятно, что-то не так с настройкой клавиш со стрелками в вашем терминале… Не уверен, что именно это такое. Но попробуйте использовать
<C-b>
в качестве обходного пути, он должен быть эквивалентен стрелке влево::term<cr>git commit -m ""<C-b>
Ответ №1:
Оказывается, что в некоторых терминалах клавиши со стрелками представлены последовательностями клавиш escape, такими как стрелка влево, представленная Esc O D
символом . В моем vimrc у меня было сопоставление tnoremap <esc> <c-w>:q!<cr>
, которое должно было закрыть терминал, когда я нажал клавишу escape. Но из-за того, как vim интерпретировал мои последовательности клавиш со стрелками, он закрывал терминал, когда я нажимал любую из стрелок. Я решил это, изменив сопоставление на tnoremap <esc><esc> <c-w>:q!<cr>
.
Более подробную информацию об этой ошибке можно найти здесь: https://github.com/vim/vim/issues/2216#issuecomment-337566816