问题描述
我正在尝试编写第一个宏,这给我带来了麻烦
我基本上想把这个转过来:
cityName1
cityName2
等等...
对此:
'cityName1',
'cityName2',
等等...
我将宏记录为:i'<Esc>A'<Esc>j0
,如果我以@a
执行,则可以正常工作,但是当我尝试类似:10@a
的操作时,它给了我'E488尾随字符错误'
感谢您的任何帮助
解决方法
宏是一系列击键,Vim会在字面上重复这些操作。
在普通模式下执行@a
时,Vim为您执行i
,然后'
,然后<Esc>
等,所有这些都按预期工作,因为在正常模式下,您的宏将从正常模式命令开始。
在命令行模式下执行@a
时,Vim会执行与上述相同的操作({i
,然后是'
等),但是您处于命令行模式,并且在这种情况下,这些击键是没有意义的。您基本上是在输入垃圾,Vim尽最大努力弄清了垃圾,但是它失败了。
请注意,10
中的10@a
表示“重放@a
10次”,10
中的:10@a
表示“重放@a
第10行”。从您的问题中不能立即看出您是否想要一个。
在正常模式下,如果您的意思是“重播@a
10次”,请执行以下操作:
10@a
或者,如果您的意思是“在第10行重播@a
”:
1OG@a
如果您更喜欢命令行模式,则表示“重播@a
10次”:
:normal 10@a
或者,如果您的意思是“在第10行重播@a
”:
:1Onormal @a
请参见:help G
,:help :normal
,:help :range
,更常见的是:help repeat
。