8

对于许多文件中的每一个,这是我想做的:

  • 搜索所有出现的<a href然后开始块选择
  • 选择直到第一次出现>
  • 将整个匹配转换为小写
4

1 回答 1

15

看看这个:

s/<a href\(\_[^>]*\)>/<a href\L\1>/

这表示: match <a href,后跟除 之外的零个或多个字符>,包括换行符(由 表示\_),最后是 a >。将其替换为<a href,捕获的文本转换为小写(由 表示\L),以及尾随的>.

显然,如果>您的标签内有某个地方,那么您就是一个人,但这就是生活。

(如果不清楚,您可以将其用作:%s/.../...:<range>s/.../.../用于一些较小的范围。)

要在多个文件上使用它,您将使用windobufdotabdo(取决于文件是作为选项卡、窗口还是仅作为缓冲区打开)。那里有很多文档:

一般来说,它可能看起来像这样:

:tabdo <range>s/.../.../
:windo <range>s/.../.../
:bufdo <range>s/.../.../ | w

我在 bufdo 版本中添加了一个写入命令,因为它不能在不保存当前缓冲区的情况下移动到下一个缓冲区。如果你想立即写作,你也可以为其他人这样做,但他们会在没有的情况下工作。由您决定是否打开所有文件 - 最简单的方法是vim <lots of files>将它们作为缓冲区,或vim -o <lots of files>将它们作为窗口(用于-O垂直分割而不是水平分割)。

于 2010-05-18T15:14:11.240 回答