有人可以向我解释一下 global ( :h :g
) 和 norm ( :h norm
) 命令在 VIM 中是如何工作的吗?我有文件:
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
G
H
我已经发布了
:g/[0-9]/norm 4gg dd
希望它能以下列方式工作:[0-9]
= 只匹配带有数字的行 4gg
= 跳转到第 4 行 dd
= 删除当前(第 4)行 所以我期待这个:
1
2
3
5
6
7
8
9
A
B
C
D
E
F
G
H
但我得到的不是它:
1
2
3
4
A
B
C
D
E
F
G
H
此外,如果我使用
norm
或 norm!
也没关系,有什么区别,请您解释一下这是如何工作的或给我一些好的引用资料,我已经阅读了 :h :g
和 :h :norm
但它没有帮助。谢谢PS:我可以使用
:4d
但我对 :g
和 :norm
的解释感兴趣,这个问题只是作为一个简单的例子提到的。 最佳答案
:g/pattern/do something
将在 上执行
do something
与 pattern
匹配的每个 行。所以你得到了那个输出。尝试:
:g/\d/echo getline('.')
:g/\d/echo line('.')
第一行打印匹配的行
2nd 打印匹配的行号。
所以你会看到每个匹配的行,vim 会做一些事情(在这种情况下是回声)
出于这个原因, 为什么
4
直到那里, 因为您在 4gg
和 dd
之间有一个空格。您的数字行只有一个字符,因此空格会将光标移动到下一行。这就是
4
不会被删除的原因。删除空间 !
关于VIM - 解释 'normal' 和 'global' 命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20685363/