开发者

How to save a Vim macro that contains "Escape" key presses?

开发者 https://www.devze.com 2023-01-02 05:51 出处:网络
I use the following Vim macro a lot (it puts the current line inside XML tags): I<e>^[A</e>

I use the following Vim macro a lot (it puts the current line inside XML tags):

I<e>^[A</e>

So I saved it into my .vimrc

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

But it does not work.

The ^[ part means "Escape" but it is not understood as such in .vimrc

How can I save this macro, or 开发者_StackOverflow社区any macro that contains "Escape" ?


Try entering the escape with <Ctrl-v><Esc> in insert mode. See :help i_CTRL-V in vim.


For a macro:

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

Where ^[ is just one char formed by hitting CTRL+VESC (CTRL+QESC on Windows). Note the escape right at the beginning of the macro.

See :help c_CTRL-V in Vim for more information.


For those who've landed on this post looking for how to add ESC to a mapping, the answer is different.

Literally type <ESC>, thus:

:nnoremap <Leader>E I<e><ESC>A</e><ESC>

See :help key-notation in Vim for more info.


For readability purpose, it's possible to use the proper key-notation tags such as <Esc> or <CR> instead of ^[ or ^M

You would need to escape the tag <Esc> with a single \ and use double quotes instead of single quotes which would result in "\<Esc>". The following examples are equivalent

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

A list of all key notations can be found by typing :help key-notation or here.


If you're using Windows behavior for vim where Ctrl+V is the Paste command, the equivalent sequence is Ctrl+Q


Today I discovered a vim plug-in called MARVIM (http://www.vim.org/scripts/script.php?script_id=2154).

It is capable of storing macros and executing them later using shortcuts.


Saving macros in plain file without plugins.

Having for example macro m . In insert mode, at e.g beginning of new line, then type 3 keys

ctrl-r ctrl-r m

the macro with escapes will be put in that line. (editable as needed) In another line name/comment it. Add other macros if you wish - then save this file as e.g. :w my_vim_macros

When you want to reuse such saved macro(s): place cursor on the beginning of macro string, then 4keys

"xy$

and your macro (this line) will be yanked to register x.


I'm answering what I do to add Escape in macro.

Using in vim editor

:let @a='iabcjj'

here I map <ESC> to jj by

.vimrc file

imap jj <esc> 
0

精彩评论

暂无评论...
验证码 换一张
取 消