为什么我的自定义函数添加了一个额外的“/!” (Vim)?
Why is my custom function adding an additional "/!" (Vim)?
我想转这个:
A
a
a
B
b
b
进入这个:
a/!
a/!
b/!
b/!
所以我写了一个自定义函数:
function PrepareDic()
:g/[A-Z]/d | :%s/$/\/!/g
endfunction
但是当我这样做时 :PrepareDic()
我最终得到的是这样的东西:
a/!/!
a/!/!
b/!/!
b/!/!
我做错了什么?
既然你写了一个函数,你就不需要像那样链接命令。 (这样的链接命令也不符合您的预期。)
全局命令不能用横线分隔。相反,它正在做的是 运行ning d | :%s/$/\/!/g
在每一行 [A-Z]
。这显然是错误的。要解决此问题,您只需要 运行 全局命令后的替代命令(这正是您想要的)。由于有两行大写字母,因此替换完成了两次。所以你得到 /!/!
添加每一行的结尾。
所以下面应该是固定函数
function PrepareDic()
g/[A-Z]/d
%s/$/\/!/g
endfunction
如果你真的想使用 bar 来分隔命令,你需要将全局传递给 exec
。然而,这并不是真正必要的。
exec 'g/[A-Z]/d' | %s/$/\/!/g
我想转这个:
A
a
a
B
b
b
进入这个:
a/!
a/!
b/!
b/!
所以我写了一个自定义函数:
function PrepareDic()
:g/[A-Z]/d | :%s/$/\/!/g
endfunction
但是当我这样做时 :PrepareDic()
我最终得到的是这样的东西:
a/!/!
a/!/!
b/!/!
b/!/!
我做错了什么?
既然你写了一个函数,你就不需要像那样链接命令。 (这样的链接命令也不符合您的预期。)
全局命令不能用横线分隔。相反,它正在做的是 运行ning d | :%s/$/\/!/g
在每一行 [A-Z]
。这显然是错误的。要解决此问题,您只需要 运行 全局命令后的替代命令(这正是您想要的)。由于有两行大写字母,因此替换完成了两次。所以你得到 /!/!
添加每一行的结尾。
所以下面应该是固定函数
function PrepareDic()
g/[A-Z]/d
%s/$/\/!/g
endfunction
如果你真的想使用 bar 来分隔命令,你需要将全局传递给 exec
。然而,这并不是真正必要的。
exec 'g/[A-Z]/d' | %s/$/\/!/g