при запуске экрана в OSX команда + r портит клавиши со стрелками в vim на всех экранах

15

Как вы это раскручиваете? потому что вы постоянно нажимаете команду r, чтобы перезагрузить браузер, и часто вы находитесь в терминале.

Поскольку я не понял, как снова включить клавиши со стрелками, в настоящее время я убиваю все свои экраны и перезагружаю экран, что является болью.

Der Hochstapler
источник

Ответы:

28

Как хороший сторонник 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

Jander
источник
Другая проблема может заключаться в том, что тип терминала сбивает с толку vim, см. Перепутанные ключи в vim при запуске внутри tmux
kynan
спасибо за это решение! это мешало мне как веб-разработчику. в браузере вы часто нажимаете cmd-r, чтобы обновить экран, и иногда я случайно запускаю cmd-r в vim. я не мог понять, почему мои клавиши со стрелками стирались до сих пор. и для вас hjkl-пуристы, главная причина, по которой я не использую hjkl, заключается в том, что они не доступны для перемещения курсора в режиме вставки. решить эту проблему для меня, и я пересмотрю.
Rev
6

Вы можете исправить это быстро и легко с :!reset

GlyphGryph
источник
1

Если вы используете iTerm, вы можете вернуть сеанс vim, нажав command+dиcommand+w

Почему?

command+d разделит панель терминала, волшебным образом восстановив ту, с которой вы пришли.

command+w теперь закроет разделенную панель, которую вы только что открыли.

Адам Грант
источник
1

Я сопоставляю Command-r «Игнорировать» в отображениях клавиш iTerm.

Снимок экрана: диалог настроек iTerm2

Кристиан Лонг
источник