2012-02-01 1 views
4

фона:Vim insert mode: однозначная привязка клавиш, которая всегда работает так, как ожидалось?

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

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

Вопрос:

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

Цель:

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

+0

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

+1

вы посмотрели на [это] (http://vim.wikia.com/wiki/Avoid_the_escape_key #Toggling_insert_mode) –

+0

Tom Ingram: Спасибо за ссылку. К сожалению, это предложение показывает, как * переключать * режим вставки (включать и выключать) ... Цель этого конкретного вопроса - найти способ включить его и знайте, что он включен, без вставки каких-либо символов в буфер, даже если вы нажмете привязка клавиш несколько раз подряд. – dreftymac

ответ

4

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


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

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

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

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

+0

CTRL-O имеет различный смысл и в обычном режиме. Я бы не советовал это, и, следовательно, -1. – Benoit

+0

@Benoit: Да, вы правы. См. Мое редактирование, которое должно сделать трюк. – bitmask

+0

в режиме вставки, CTRL-I вставляет символ табуляции. – Benoit

2

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

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

Если вы не настроили ваш vimrc, чтобы отключить это сообщение.

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

CTRL-C i 

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

4

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

: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

+0

Спасибо за ответ. Это помогает в ситуациях, когда пользователь имеет возможность изменять vimrc ... plain-vanilla vim-решения тоже хороши, хотя (у пользователя может не быть способности или желания изменить vimrc). – dreftymac

Смежные вопросы