如何查看和编辑录音(即录制的宏)?


38

我使用复杂的重复记录我的操作(qq记录,一些操作q停止),但我犯了一个错误。

可以查看我所记录的内容并更正错误,而不必再次执行此操作?

通过@q工作调用记录的字符,但是在映射(:map q- No mapping found)中看不到它。

通过键入以下命令,帮助中没有太多信息:help recording

Answers:


41

注意:我假设您在a整个答案中都使用寄存器,但是您可以使用任何寄存器

注2:<1b>Esc;您可以使用Ctrl+v然后插入Esc。它也可能显示为^[(取决于display设置)。


这不是映射;因此这是:map行不通的。它记录在一个寄存器中,您可以像查看任何寄存器一样查看和编辑它。

所有q要做的就是“清除该寄存器,并向其添加任何击键”,而所有@要做的就是“将寄存器评估为命令”

宏没有什么“不同”,您可以将任何寄存器作为宏调用。


查看,只需使用:

:echo @a

就像任何寄存器一样。

您也可以:registers用来查看所有寄存器。


要进行编辑,您可以执行以下几项操作:

分配给的最简单方法是@a

:let @a='iasd<1b>'

这将启动插入模式(i),insert asd和Escape返回普通模式。

这对于大量编辑不是很有用;您可以使用函数(例如substitute()),也可以附加一些东西(:let @a=@a . 'more'),但是在中间进行更改并不是那么容易。

我发现最好的方法是用:split或启动一个新缓冲区,:tabnew并通过将寄存器插入那里,对其进行编辑然后再将其复制回来来编辑该寄存器。

您可以使用"ap它将文本插入缓冲区(a寄存器在哪里):

iThis is A<1b>

现在,我可以将行更改为:

iThis is an edited macro<1b>

然后,我^v$"ay将这一行拉出(复制)到a寄存器中:

  • ^ 开始行
  • v 用于视觉模式
  • $ 行尾
  • "ay 拉动选择注册 a

如果需要,可以在不使用可视模式的情况下执行此操作^"ay$

现在@a,您可以使用,就像这是您最初录制的内容一样。

您也可以先使用yy,然后再使用,@"这要快一些。但是,这也会复制尾随的换行符,并且可能会产生副作用。另一种使速度更快的方法是使用宏:-)


2
我要注意的是,沿行向运动到寄存器中会产生副作用,包括换行符,就好像您Enter在录制末尾按下时一样。在许多情况下,这可能是无害的,但是在您精心制作了记录结尾处的光标位置的情况下,它会影响可重复性。
tommcdo

@tommcdo对;您可以使用v并选择整行(不包含换行符)。
马丁·图尔诺伊

@Carpetsmoker v^$"ay将该行a拖移(复制)到寄存器中。” 难道不是^在之前v$您是否仍要复制换行符?我认为应该是:(0v$h"ay是痛苦的长时间!)
joeytwiddle

2
@joeytwiddle不,$移动行尾,但不包括换行符。0y$和之间的区别yy。紧跟h$那只会意味着您会错过最后一个字符。
evilsoup

要使编辑:let @ a =类型的命令更容易编辑,您可以做的一件事是键入:<Ctrl-f>,选择并编辑相关行(如果要编辑,则默认为最后一行)。像往常一样使用vim输入最后一行)。完成执行后,按回车键,或按<Ctrl-c>退出。

9

为了与他人合作...

qajjjq

将开始记录一个宏到a寄存器中。

您可以使用该:reg命令查看当前的许多寄存器(用于宏,删除,删除等),或者可以通过提供其名称来指定要显示的寄存器。例如,显示register a

:reg a

产量

--- Registers ---
"a   jjj

您可以使用相应的大写字母追加到现有的命名寄存器中。这不仅适用于录制宏,而且适用于拉动。例如:

qAkkkq
:reg a

产量

--- Registers ---
"a   jjjkkk

如果要使用let语法来编辑现有的宏,则可以执行以下操作:

let @a='<C-r>a'

它将扩展到

let @a='jjjkkk'

然后您可以更改各个按键。

请注意,您可以使用<C-r>(即control + r)从任何寄存器粘贴到命令行模式(或在插入模式下)。

此外,在命令行模式下,如果键入<C-f>此命令,则会弹出命令行窗口,您可以在其中查看/编辑过去发出的命令,还可以在调用前编辑当前命令。在要提交的命令上按Enter。

这样做的好处是您可以在此缓冲区内使用常规的移动/替换命令来编辑宏。例如:

let @a='<C-r>a'<C-f>

将显示:

:118 reg
:119 reg a
:120 let @a='jjjkkk'

如果使用命令120,则可以执行以下操作:

s/kkk/}
<return>
:reg a

产量

--- Registers ---
"a   jjj}

当然,您可以将寄存器的内容粘贴到缓冲区中,然后在其中进行更改。但是您可以做所有需要做的事情而不会污染您的工作缓冲区。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.