Некоторые могут утверждать, что перемещение с помощью собственных сочетаний клавиш 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
.