宏似乎没有考虑到击键。在这种特殊情况下,我想编写一个注释掉一行的宏(在latex注释中以%
开头)。以下是我正在使用的按键:
q + a + 0 + w + i + % + j + j + j + q
将宏分配给a,转到行的开头,进入插入模式,放置百分号,退出插入模式,向下移动一行,然后结束宏。然后我像这样使用宏
@ + 一
如果我有4行像这样
1 In This life I have learned one thing █
2 It is pity incarnate of which I sing.
3 You have been told about the back of the crowd
4 And I repeat it, plenty loud.
使用宏三次导致此
1 %%%In This life I have learned one thing █
2 It is pity incarnate of which I sing.
3 You have been told about the back of the crowd
4 And I repeat it, plenty loud.
当我想要的是这个
1 %In This life I have learned one thing █
2 %It is pity incarnate of which I sing.
3 %You have been told about the back of the crowd
4 And I repeat it, plenty loud.
更具体地说,我希望能够做30 + @ + a 来评论30行。我该怎么做?
答案 0 :(得分:5)
我会选择:
:.,+30 s/^\s*/&%
说明:
.,+30
是从当前行到当前行+ 30(因此跨越31行)的范围(:help range
)s
是替换命令(:help :s
)/
是模式分隔符^\s*
是一种模式(:help pattern
),对应于一行开头的任意数量的空格&
是插入匹配模式的替换特殊字符其他方式:
ab©d (cursor on the c)
efgh
ijkl
键入 CTRL-V ,2j
,I
,你好, Esc ,你得到:
abhellocd
efhellogh
ijhellokl
答案 1 :(得分:3)
Benoit的答案很好。
我认为你的宏应该是
I%<Esc>j
之后它只是
30@a
如果您将宏缩短为
I%<Esc>
您可以直观地选择所有行并执行
:'<,'>norm @a
或在Benoit的回答中处理范围。
您也可以跳过宏部分并使用VISUAL-BLOCK模式:
<C-v> " enter visual block mode
30G " go to line 30
I% " insert % at the beginning of selection
<Esc> " exit visual block mode
答案 2 :(得分:2)
您可以使用:normal命令。它的作用是将它的参数作为普通模式命令执行。它也可以给出一个范围,因此要在接下来的30行前面插入%,您可以输入:.,+30 norm I%
。 I
将vim置于插入模式,光标位于当前行的开头。由于您现在处于插入模式,%
只会插入一个%
字符。