使用 vim 正则表达式在匹配的字符串之前/之后添加/附加字符或字符串

Spirit_bird

假设你有一个这样的列表:

file_exts = [tex~, log~, synctex.gz, aux, synctex, tuc, fls, log, fdb_latexmk, bcf, bbl, blg]

我想用单引号将每个元素括起来。有没有办法像这样在 Vim 中有效地做到这一点?:

file_exts = ['tex~', 'log~', 'synctex.gz', 'aux', 'synctex', 'tuc', 'fls', 'log', 'fdb_latexmk', 'bcf', 'bbl', 'blg']

第二种情况如下。如果我想在匹配的字符串的某些行的末尾附加一个字符串但不替换字符串本身,我该怎么做?这是一个例子

His name is Evan
His phonenumber is 333-444

我想将 say an 附加...到匹配的字符串的末尾/his

His name is Evan...
His phonenumber is 333-444...

我知道我可以通过行号来做到这一点,但在我的用例中这是不可能的。

司法部

对于第一个问题。您可以选择其中的内容[ ... ](例如通过键入vi[),然后执行以下命令:

:'<,'>s/\%V\([a-z~.]\+\)/'\1'/g

现在我将解释命令的每个部分

  1. '<,'>是一个范围,这意味着我们只想将以下命令应用于选定的行,而不是整个文件。通常会vim在您在可视模式下启动命令时自动插入。
  2. 类似的\%V意思是“限制视觉区域内的匹配”。从范围1.限制匹配仅选定的,而不是选定的字符我们需要\%V防止将命令应用于file_exts单词。
  3. s/pattern/replacement/只是一个替换命令:它用pattern指定的replacement.
  4. [a-z~.]\+只是一个正则表达式,这意味着“匹配列表中的一个或多个字符的序列:a- z~.”。
  5. 我们不想替换,而是修改现有项目。所以在模式部分,我们将它与\( ... )构造一起保存到一个(有点)寄存器中,然后\1在替换部分中使用它所以更换部分只是'\1'.
  6. 默认情况下vim,每行仅应用一次替换。我们想多次应用它,所以我们g在命令的末尾添加了标志。

这不是最简单的方法,但对于类似任务相当简单且易于定制。

如果您想了解每个主题的更多详细信息,可以查看 vim 帮助:

:help '<
:help '>
:help \%V
:help pattern
:help :s
:help s/\1
:help s_flags

对于第二个问题:除了g/评论中提到解决方案,您也可以使用:s

:'<,'>s/\(Evan\|444\)$/\1...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Vim中使用正则表达式搜索遵循多行模式的字符串?

使用正则表达式匹配字符串?

使用正则表达式在a之前和之后的文件中搜索字符串模式

在python中使用正则表达式在字符串中的子字符串之前添加空格

R使用正则表达式去除特殊字符(管道和<>)之前/之后的字符串

Vim正则表达式匹配带前缀和后缀的字符串

使用正则表达式匹配包含数字和特殊字符的字符串

如何使用正则表达式提前查找并匹配先前的字符串/字符类

如何使用正则表达式匹配不带双字符的字符串

使用PHP正则表达式匹配字符串中的任何Unicode空格字符

使用正则表达式匹配字符串中的连续字符

使用正则表达式匹配字符串,而忽略某些字符

使用正则表达式在字符串中的标签之前和之后获取的Javascript条

在句号之前,下划线或空格之后使用R中的正则表达式提取字符串

使用正则表达式在Java中的某些特定子字符串之后分割字符串

使用正则表达式在特定的起始子字符串之后替换字符串的特定部分

字符串提取使用正则表达式

使用正则表达式拆分字符串

使用正则表达式过滤字符串

使用正则表达式过滤字符串

使用正则表达式验证字符串

使用正则表达式的子字符串

使用正则表达式标记字符串

使用正则表达式重构字符串

使用正则表达式测试字符串

使用正则表达式验证字符串

使用正则表达式分割字符串

使用正则表达式替换字符串

使用正则表达式过滤字符串