如何保存包含"Escape"键的Vim宏?

Nic*_*oul 27 vim macros

我经常使用以下Vim宏(它将当前行放在XML标记内):

I<e>^[A</e>
Run Code Online (Sandbox Code Playgroud)

所以我将它保存到我的.vimrc中

let @e='I<e>^[A</e>'
Run Code Online (Sandbox Code Playgroud)

但它不起作用.
^[部分的意思是"逃避",但它不是这样理解的.vimrc

如何保存此宏或任何包含"Escape"的宏?

cat*_*try 35

尝试<Ctrl-v><Esc>以插入模式进入转义.见:help i_CTRL-Vvim.

  • 不,不应该.使用<ctrl-V> <esc>,^ [是单个字符(ESC的转义代码),而不是'^'和'['字符.刚刚在vim和gvim 7.2中对它进行了测试,它正确地在标签中包含了一行. (2认同)
  • 简单的测试,当你沿着^ [部分移动光标时,你不应该把它放在^和[之间,因为它代表一个单独的键码. (2认同)

Joh*_*web 18

^[是你的朋友.字面输入<ESC>,因此:

:let @e='^[I<e>^[A</e>'
Run Code Online (Sandbox Code Playgroud)

有关:help c_CTRL-V详细信息,请参阅Vim.

更新:

啊... :help key-notation在键映射(例如^[[测试])中工作但不在宏中,它们是字面扩展的.我刚试过并测试了这个:

:nnoremap <Leader>E I<e><ESC>A</e><ESC>
Run Code Online (Sandbox Code Playgroud)

其中:help c_CTRL-V仅仅是一个通过敲击形成焦炭CTRL+ VESC.请注意宏开头处的转义.

  • 它有效,非常感谢:-D 诀窍是使用这个单个字符而不是 ^[ 现在我意识到 catchmeifyoutry 有解决方案! (2认同)

小智 7

出于可读性目的,可以使用正确的键符号标签,例如<Esc>or<CR>代替^[or^M

您需要使用<Esc>单引号转义标签\并使用双引号而不是单引号,这会导致"\<Esc>". 以下示例是等效的

:let @e='^[I<e>^[A</e>'
:let @e="\<Esc><e>\<Esc>A</e>"
Run Code Online (Sandbox Code Playgroud)

可以通过在此处:help key-notation键入或找到所有关键符号的列表。