Как хороший сторонник Vim, я чувствую себя обязанным сказать вам, чтобы вы научились использовать hjkl в качестве клавиш управления курсором. На полпути к изучению проблемы я думал, что она загадочным образом исправилась, пока не понял, что тестирую с использованием hjkl вместо реальных клавиш со стрелками.
Во всяком случае, теперь для реального ответа.
Вместо того, чтобы выключать все свои экраны и перезапускать, вы можете воспользоваться возможностью экрана перемещаться между терминалами. Нажмите, CTRL+A
CTRL+D
чтобы отсоединить экран от терминала, а затем screen -D -R
снова подключите. Это должно заставить ваши клавиши со стрелками работать снова.
Если вы находитесь не на экране, а только в Vim, то вы можете CTRL+Z
и ввести fg
тот же эффект.
Вы также можете обойти проблему с клавишами курсора в Vim, но сброс мог изменить другие параметры терминала, поэтому безопаснее делать это, как описано выше, чтобы не увидеть других случайных проблем с дисплеем / клавиатурой. Если вы хотите переназначения в любом случае, вот они:
map <Esc>[A <Up>
map <Esc>[B <Down>
map <Esc>[C <Right>
map <Esc>[D <Left>
Грязные детали:
И Vim, и screen используют библиотеку ncurses для управления терминалом. Одна из вещей, которые ncurses делает, когда получает контроль над VT100-совместимым терминалом, - это переключение клавиш со стрелками в «режим приложения», который изменяет коды, которые они излучают. Например, клавиша со стрелкой вверх изменяется с Esc
[
A
на Esc
O
A
. Код управления VT100, который он выдает для этого, есть Esc
[
?
1
h
. Команда сброса терминала, отправленная Command + R, сбрасывает клавиши курсора по умолчанию.
Отключение и повторное подключение экрана приводит к тому, что ncurses возвращает контроль над терминалом, который повторно применяет все настройки, которые ему нравятся, так что это, вероятно, самый портативный и надежный способ восстановить все в нормальном состоянии.
Контрольные коды VT100: http://www.handshake.de/infobase/dfue/prgrmmer/t322.htm
Вы можете исправить это быстро и легко с
:!reset
источник
Если вы используете iTerm, вы можете вернуть сеанс vim, нажав
command+d
иcommand+w
Почему?
command+d
разделит панель терминала, волшебным образом восстановив ту, с которой вы пришли.command+w
теперь закроет разделенную панель, которую вы только что открыли.источник
Я сопоставляю Command-r «Игнорировать» в отображениях клавиш iTerm.
источник