假设你有一个这样的列表:
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
现在我将解释命令的每个部分
'<,'>
是一个范围,这意味着我们只想将以下命令应用于选定的行,而不是整个文件。通常会vim
在您在可视模式下启动命令时自动插入。\%V
意思是“限制视觉区域内的匹配”。从范围1.
限制匹配仅选定的行,而不是选定的字符。我们需要\%V
防止将命令应用于file_exts
单词。s/pattern/replacement/
只是一个替换命令:它用pattern
指定的replacement
.[a-z~.]\+
只是一个正则表达式,这意味着“匹配列表中的一个或多个字符的序列:a
- z
,~
或.
”。\( ... )
构造一起保存到一个(有点)寄存器中,然后\1
在替换部分中使用它。所以更换部分只是'\1'
.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] 删除。
我来说两句