为什么我的自定义功能会添加额外的" /!" (VIM)?

时间:2015-01-10 08:02:23

标签: 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/!/!

我做错了什么?

1 个答案:

答案 0 :(得分:4)

由于您编写了一个函数,因此您不需要链接这样的命令。 (像这样的链接命令也没有达到预期的效果。)

全局命令不能用bar分隔。相反,它正在使用d | :%s/$/\/!/g在每一行上运行[A-Z]。这显然是错误的。要解决此问题,您只需在全局命令(这是您的意图)之后运行substitute命令。由于有两行大写字母,因此替换完成两次。所以你得到/!/!添加每一行的结尾。

所以以下应该是固定功能。

function PrepareDic()
  g/[A-Z]/d
  %s/$/\/!/g
endfunction

如果您真的想使用bar分隔命令,则需要将全局传递给exec。然而,这并非必要。

exec 'g/[A-Z]/d' | %s/$/\/!/g