Режим вставки Vim: однозначная привязка клавиш, которая всегда работает как положено? - PullRequest
4 голосов
/ 01 февраля 2012

Справочная информация:

Иногда при редактировании в vim можно добавить в файл дополнительные символы, которые пользователь не ожидал увидеть, потому что он находился в «режиме вставки», когдав спешке и торопясь, чтобы что-то закончить.

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

Вопрос:

Есть ли привязка клавиш, которая работает так же в режиме вставки?Нажатие «i» может перевести вас в режим вставки, но если вы нажмете его несколько раз, вы начнете вставлять букву «i» в файл.

Цель:

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

Ответы [ 3 ]

4 голосов
/ 01 февраля 2012

Вы должны сделать отображение, которое ведет себя по-разному в разных режимах:

:inoremap <F1> <NOP>
:nnoremap <F1> i
:vnoremap <F1> <esc>i
:cnoremap <F1> <C-C>i
:onoremap <F1> <esc>i

Нажатие F1 перейдет в режим вставки.

Вы также можете переключить настройку 'insertmode' (:set insertmode): в этом режиме режим вставки является режимом по умолчанию (на который вы переключаетесь с помощью Escape, и вы переходите в обычный режим с помощью CTRL-L.

4 голосов
/ 01 февраля 2012

<C-o>i должен сделать свое дело. <C-o> временно переводит вас в обычный режим, но только для одной команды, если эта команда "перейти в режим вставки", тогда вы просто вернетесь туда.


Редактировать: я мог бы сейчас воспроизвести ваше сообщение об ошибке, и кажется, что проще всего сделать это:

:nmap <C-i> i
:imap <C-i> <C-o>i

Если не отобразить <C-i> в режиме вставки, но только в обычном режиме, то многократное нажатие <C-i> будет идемпотентным.

Спасибо Бенуа за упоминание о том, что <C-i> вставляет вкладку в режиме вставки.

2 голосов
/ 01 февраля 2012

Ответ, данный bitmask, работает, но, по-видимому, имеет побочный эффект создания сообщения об ошибке:

E37: нет записи с момента последнего изменения (добавить! Для переопределения)

Если вы не настроили vimrc для отключения этого сообщения.

Но другая альтернатива, которая работает без сообщений об ошибках:

CTRL-C i

Который, кажется, работает на стандартном vim.

...