Vim в Mac OS X Terminal: Перемещайте курсор слово за словом - PullRequest
9 голосов
/ 18 марта 2011

Я следовал инструкциям в Есть ли способ в терминале OS X перемещать курсор слово за словом? и теперь в терминале я могу перемещать курсор слово за словом.

Тем не менее, в Vim я могу двигаться только назад слово за словом.Я не могу двигаться вперед слово за словом, независимо от того, что я установил \ 033f на option+cursor-right или shift+cursor-right.Единственный обходной путь, который я нашел, - это перейти в обычный режим и нажать <w>, чтобы перейти к следующему слову.Есть идеи о том, как это исправить?Спасибо.

Ответы [ 3 ]

11 голосов
/ 18 марта 2011

w - это не обходной путь. Это основной способ перемещения по слову (см. Также: W, b, B, e, E). То, что вы хотите, это обходной путь, который не поможет вам изучить Vim вообще.

1 голос
/ 05 марта 2014

Позвольте мне прояснить несколько вещей для вас. Bash (программа оболочки, запущенная внутри терминала) имеет привычное поведение. (Использование Alt + f для перемещения вперед по слову и Alt + b для перемещения назад по слову.) Первоначально это было сделано, чтобы быть похожим на Emacs. Вы можете использовать команду

set -o vi

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

Так что не удивляйтесь, что Вим не пытается вести себя как Emacs. Вся сила позади vim лежит в основе этих простых движений.

1 голос
/ 05 марта 2014

Некоторые могут утверждать, что перемещение с помощью собственных сочетаний клавиш VIM не является обходным решением, но для меня это, безусловно, очень неудобно и очень неэффективно. Особенно в той части, где вам нужно переключаться между режимами insert и normal, чтобы перейти к следующему слову.

Вот почему я придумал решение, основанное на этом ответе на SuperUser. Идея состоит в том, чтобы отобразить входные данные, предоставленные Terminal.app непосредственно в VIM. Ответ на SU показывает, что поместить в файл vimrc, чтобы ключи Home / End работали, как ожидалось.

Моя подправленная версия включает в себя Option+arrow (или Alt+arrow) навигацию по словам. Я пытался имитировать поведение Терминала, движущегося как можно ближе. Таким образом, нажатие Option+Right (Alt+Right) переместит курсор на следующий символ после слова (в отличие от последнего символа слова, который является VIMs w нативное поведение).

let tp=$TERM_PROGRAM
if tp == 'Apple_Terminal'
  :" map Mac OS X Terminal.app

  " map Home/End:
  :map <ESC>[H <Home>
  :map <ESC>[F <End>
  " small 'o' letter in <C-o> means no exit from the insert mode
  :imap <ESC>[H <C-o><Home>
  :imap <ESC>[F <C-o><End>
  :cmap <ESC>[H <Home>
  :cmap <ESC>[F <End>

  " map Option+Left/Option+Right:
  " for this to work you must have the bindings in Settings > Keyboard set
  " as follows:
  " 'option cursor left' to '\033b'
  " 'option cursor right' to '\033f'
  :map <ESC>f el
  :imap <ESC>b <C-o>b
  :imap <ESC>f <C-o>el
  :cmap <ESC>f el
endif

В качестве небольшого, но существенного бонуса вы получаете навигацию Home / End, не выходя из режима insert. Проверено на 10.8.5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...