Почему cmd-r портит Vim на Mac? Что он на самом деле пытается сделать?

19

Постоянно сталкивайтесь с этим, так как я веб-разработчик, у 'cmd-r' есть побочный эффект, заключающийся в том, что клавиши со стрелками не работают в любом режиме, но я не могу себе представить, что это цель, и я не смог найти любая документация относительно того, что он на самом деле должен делать.

Редактировать: По-видимому, это на самом деле команда терминала Mac, «Отправить сброс», поэтому я думаю, что теперь вопрос «Какой цели служит команда отправки сброса?» Объясняет, почему я не смог найти его в документах VIM, хотя.

GlyphGryph
источник

Ответы:

16

Чтобы избежать этого раздражения, я переназначаю Command-R на «Игнорировать» в отображении клавиш iTerm.

введите описание изображения здесь

Кристиан Лонг
источник
Спасибо. Это становилось ужасно раздражающим.
ThinkingInBits
10

Это происходит со мной, даже когда я не использую screen, и я обнаружил, что могу вернуться к нормальному состоянию, очистив терминал, на котором запущен vim (я также протестировал это с tmux, но не с screen:

:!clear
mtjburton
источник
6

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

Скопированный ответ:

Как хороший сторонник Vim, я чувствую себя обязанным сказать вам, чтобы вы научились использовать hjkl в качестве клавиш управления курсором. На полпути к изучению проблемы я думал, что она загадочным образом исправилась, пока не понял, что тестирую с использованием hjkl вместо реальных клавиш со стрелками.

Во всяком случае, теперь для реального ответа.

Вместо того, чтобы выключать все свои экраны и перезапускать, вы можете воспользоваться возможностью экрана перемещаться между терминалами. Нажмите CTRL + A CTRL + D, чтобы отсоединить экран от терминала, затем запустите экран -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 ч. Команда сброса терминала, отправленная Command + R, сбрасывает клавиши курсора по умолчанию.

Отключение и повторное подключение экрана приводит к тому, что ncurses возвращает контроль над терминалом, который повторно применяет все настройки, которые ему нравятся, так что это, вероятно, самый портативный и надежный способ восстановить все в нормальном состоянии.

Контрольные коды VT100: http://www.handshake.de/infobase/dfue/prgrmmer/t322.htm

Munen
источник
Да, я обнаружил, что после того, как я отправил сообщение, увидел «Команда сброса терминала, отправленная Command + R, сбрасывает клавиши курсора на значения по умолчанию». Было бы здорово узнать, почему это происходит. Честно говоря, мне, в основном, интересно узнать, для чего предназначено использование этой команды, но это не отвечает.
GlyphGryph