Как заставить Cmd-left/right работать с iTerm2 и Vim (не требуя изменений .vimrc)?

Я хочу иметь возможность использовать Option-left и Option-right, чтобы пропускать слова (и Cmd-left/right, чтобы перейти к началу и концу строк) внутри Vim, как это происходит в моей командной строке. У моих настроек Iterm2 есть сопоставления для этого (например, Option-left to Esc-H и один для option-right до Esc-F, чтобы пропустить слова), и это работает в оболочке локально или когда ssh'd на удаленный сервер.

Когда я использую Vim локально или удаленно, Option-left работает, но option-right не работает. Я подозреваю, что это потому, что Вим естественно слушает Esc-H, но не Esc-F. Я могу обойти это, изменив файл .vimrc на Esc-b на b и Esc-F на f, но я не хочу делать это на каждом сервере, к которому я подключаюсь.

Аналогично, у меня есть та же самая желаемая настройка для Cmd-left/right для перехода к началу и концу строки. Я могу заставить это работать в оболочке с помощью сопоставлений Iterm2 (например, Cmd-left до Esc-[h), но Vim вообще не отвечает на это, если я не буду снова перенаправлять ключи (например, Esc-[h to ^).

Обновление: Я только что понял, как работать с параметрами - влево/вправо. Я изменил отображение в iTerm2, чтобы они были escape-[1;5D и escape-[1;5C соответственно. Я все еще хочу решить проблему Cmd-left/right, хотя (я изменил название вопроса, чтобы это отразить). Любые идеи?

Ответ 1

Чтобы воспроизвести поведение OS X при отправке Cmd-left/right в начало/конец строки, я добавлю следующие отображения в iTerm2:

  • Cmd-left для escape-последовательности [1~
  • Cmd-right для escape-последовательности [4~

Чтобы воспроизвести поведение OS X отправки Option-left/right в предыдущее/следующее слово, я добавляю следующие отображения в iTerm2:

  • Option-left для escape-последовательности [1;5D
  • Option-right для escape-последовательности [1;5C

Особая благодарность этого сообщения в блоге для отслеживания того, что мне не хватало с помощью Cmd-left/right сопоставлений

Ответ 2

FWIW, ответ долан не работал у меня на iTerm 2 1.0.0.20120203 на Mac OS X 10.7.3. Его решение только вставило ~ и 5D/5C в мой терминал, когда я нажал клавиши быстрого доступа.

Вместо этого я использовал следующие решения:

YMMV, не уверенный, почему один набор решений будет работать, а не другой

Ответ 3

У меня нет MacOS, поэтому я не могу точно знать вашу ситуацию, но я распознаю проблему из других ОС.

В принципе, это означало бы, что терминал отправляет коды ключей, которые не поняты vim. Я исправил это в прошлом, выполнив

 TERM=something
 export TERM

перед вызовом vim

например. для того чтобы получить подсветку синтаксиса клавиш и, работающую над AIX 5.3 через Putty/screen, мне нужно было использовать

 TERM=iris-ansi vim

Существует список встроенных типов терминалов, если вы передаете плохой TERM