Команда Vim Pre-Exit (Esc)? - PullRequest
       10

Команда Vim Pre-Exit (Esc)?

5 голосов
/ 27 сентября 2011

Прямо сейчас в Vim, когда я перехожу на новую строку (или нажимаю 'p' или 'o' в обычном режиме), я получаю прекрасный автоматический отступ, который также исчезает, если я выхожу из режима вставки, не добавляя в него ничего.

Есть ли способ привязать что-либо перед выходом из режима вставки, например, вставить фантомный символ, а затем удалить его?

Ответы [ 3 ]

2 голосов
/ 27 сентября 2011

Argh, я только что прочитал об этом точно, как два дня назад, но я не могу вспомнить, где.

В любом случае, хитрость заключается в том, чтобы ввести символ сразу после <CR> и немедленно удалить его. Есть несколько способов сделать это:

<CR>a<Esc>x
<CR>a<C-w>
<CR>a<BS>

--EDIT--

Вим, будучи Вимом, возможно, есть много других способов.

Чтобы автоматизировать это, вам нужно добавить отображение в ваш .vimrc:

inoremap <CR> <CR>a<BS> " insert mode mapping for <CR>
nnoremap o oa<BS>       " normal mode mapping for o

Но я не уверен, что вам следует перезаписывать значения по умолчанию таким образом.

--EDIT--

Однако, что раздражает поведение Vim по умолчанию, так это то, что вам может потребоваться сделать <Tab><Tab><Tab><Tab> перед тем, как вводить текст в строку без отступов, или сделать ==, когда вы закончите, или полагаться на правила автоматического отступа для ваш язык на следующем <CR>.

Все, что можно пропустить, используя <S-S>, который переводит вас в режим INSERT прямо на правильный уровень отступа.

2 голосов
/ 28 сентября 2011

Попробуйте либо cc, либо S в обычном режиме, чтобы изменить строку относительно отступа.Нет необходимости в фантомных персонажах.

:h cc
:h S
1 голос
/ 27 сентября 2011

Сопоставление, подобное следующему, должно помочь:

imap <esc> <esc>:s/\s\+$//<CR>

Это удаляет завершающие символы при нажатии esc в режиме вставки.

...