2010-05-31 2 views
24

Я использую следующий Vim макрос много (он помещает текущую строку внутри тегов XML):Как сохранить макрос Vim, содержащий клавиши «Escape»?

I<e>^[A</e> 

Так я сохранил его в мой .vimrc

let @e='I<e>^[A</e>' 

Но это не работает.
^[ часть означает «Escape», но он не понял, как, например, в .vimrc

Как сохранить этот макрос или любой макрос, который содержит «Escape»?

ответ

31

Попробуйте ввести выход с <Ctrl-v><Esc> в режиме вставки. См. :help i_CTRL-V в vim.

+2

Нет, этого не должно быть. С ^[представляет собой один символ (экранированный код для ESC), а не символы «^» и «[». Просто протестируйте его снова в vim и gvim 7.2, он корректно завершает строку в тегах. – catchmeifyoutry

+2

простой тест, когда вы перемещаете курсор вдоль^[части, вы не сможете разместить его между символами^и [, поскольку он представляет собой один ключевой код. – catchmeifyoutry

+0

Трюк действительно был единственным персонажем кода, я сначала не видел разницы. Большое спасибо! –

17

<ESC> Ваш друг здесь. Буквально типа <ESC>, таким образом:

let @e=I<e><ESC>A</e> 

:help key-notation См в Vim для получения дополнительной информации.

Update:

Ах ... <ESC> работы в ключевых отображений (такие как :map <Leader>e <ESC>I<e><ESC>A</e> [испытания]), но не в макросы, которые расширяются в буквальном смысле. Я только что испытанный это:

:let @e='^[I<e>^[A</e>' 

Где ^[ только один символ, образованный ударяя CTRL +VESC. Обратите внимание на побег в начале макроса.

+0

не работает.Кроме того, я думаю, что котировки нужны. –

+1

Теперь я думаю, что понимаю, что вы подразумеваете под «не работает». Ответ обновлен. – Johnsyweb

+1

Это работает, спасибо большое :-D Хитрость заключалась в том, чтобы использовать этот единственный символ вместо^[Теперь я понимаю, что у catchmeifyoutry есть решение! –

4

Если вы используете Windows, поведение для Vim, где Ctrl + V является команда Paste, эквивалентную последовательность Ctrl +Q

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