通过@q调用记录的字符有效,但是我在映射(:map q-
No mapping found
)中看不到它。通过键入以下命令,帮助中没有太多信息::help recording
。#1 楼
注意:我假设您在整个答案中都使用a
寄存器,但是可以使用任何寄存器。注2:
<1b>
是Esc;您可以先按Ctrl + v,再按Esc。它也可能显示为^[
(取决于display
设置)。它不是映射;它不是映射。所以说
:map
不起作用是有道理的。它记录在一个寄存器中,您可以像查看任何寄存器一样查看和编辑它。q所做的只是“清除该寄存器,并在其上附加任何击键”,而@所做的只是“将寄存器评估为命令”。
宏没有什么“不同”,您可以将任何寄存器作为宏调用。
仅使用查看:
:echo @a
就像任何寄存器。
还可以使用
:registers
查看所有寄存器。要编辑,您可以做一些事情:
分配给
@a
的最简单方法是,像这样::let @a='iasd<1b>'
这将启动插入模式(
i
),插入asd
,然后转回普通模式。对于大量编辑不是很有用;您可以使用函数(例如
substitute()
),也可以附加一些东西(:let @a=@a . 'more'
),但是在中间进行更改并不是那么容易。使用:split
或:tabnew
启动新缓冲区,并通过在其中插入寄存器,对其进行编辑然后将其复制回来来编辑寄存器。 a
是您的寄存器):iThis is A<1b>
现在我可以将行更改为:
iThis is an edited macro<1b>
然后我执行^ v $“ ay,以将该行复制(复制)到
a
寄存器:^用于行的开始用于可视模式
$用于行尾
“ ay取消选择以注册
a
如果愿意,可以不使用带有^“ ay $的可视模式来执行此操作。您也可以只使用yy,然后使用@“,这会更快一些。但是,这也会复制尾随的换行符,并且可能会产生副作用。另一种使速度更快的方法是使用宏:-)
#2 楼
要使用某些功能...qajjjq
将开始在
a
寄存器中记录一个宏。您会看到很多使用
:reg
命令使用当前寄存器(用于宏,删除,删除等),或者可以通过提供其名称来指定要显示的寄存器。例如,要显示寄存器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}
当然,您可以粘贴寄存器的内容放入缓冲区,然后在此处进行更改。但是您可以做所有需要做的事情而不会污染您的工作缓冲区。
评论
:reg +1,因为:echo @a会在人的宏中使用特殊字符(例如^ M)时显示不完整的输出(因为它打印宏而不是显示宏),但是:reg a会显示整个注册正确。
– Niayesh Isky
20 Mar 8 '20在22:54
评论
我要注意的是,沿行向运动到寄存器中会产生副作用,包括换行符,就像在录制结束时按Enter一样。在许多情况下,这可能是无害的,但是在您精心制作了记录结尾处的光标位置的情况下,它会影响可重复性。
–tommcdo
15年2月13日在13:53
@tommcdo正确;您可以使用v并选择整行(不包含换行符)。
–马丁·图尔诺伊(Martin Tournoij)
15年2月13日在14:16
@Carpetsmoker“ v ^ $”可以将该行拖移(复制)到寄存器中。” ^难道不是在v之前出现的吗,并且不与$一起复制换行符?我认为应该是:0v $ h“ ay(是痛苦的长时间!)
– joeytwiddle
2015年2月24日在22:39
@joeytwiddle不,$移动到行尾,但不包括换行符。这是0y $和yy之间的差。在$后面加上h只是意味着您会错过最后一个字符。
– evilsoup
15年2月28日在11:10
要使编辑:let @ a =类型命令更容易编辑,您可以做的一件事是键入:
–user859
15-10-22在11:57