例如,如果我有$asd['word_123']
我想把它替换为$this->line('word_123')
,保留“word_123”。我怎么能这么做呢?
通过使用这个:
%s/asd\[\'.*\'\]/this->line('.*')/g
我无法保留中间的措辞。请赐教。
使用正则表达式,你可以做类似的事情:%s/\$asd\['\([^']*\)'\]/$this->line('\1')/g
一步步:
%s
- 替换整个文件
\$asd\['
- 匹配“$asd['”。注意$
and [
需要转义,因为它们在正则表达式中具有特殊含义。
\([^']*\)
- the \( \)
可用于选择所谓的“原子”,以便您可以在替换中使用它。这[^']
意味着任何东西not a '
, and *
表示匹配 0 个或多个。
'\]
- 结束我们的比赛。
$this->line('\1')
- 替换为我们想要的,并且\1
替换为之前匹配的原子。
g
- 对每行的多个匹配项执行此操作。
替代方案(宏观)
除了正则表达式,您还可以使用宏。例如,
qq/\$asd<Enter>ct'$this->line(<Esc>f]r)q
then @q
根据需要多次。你也可以@@
当你使用过之后@q
一次,或者你可以80@q
如果你想使用它80次。
替代方案(:标准)
在某些情况下,使用:norm
可能是最好的选择。例如,如果您有一小段代码并且要匹配唯一的字符或位置。如果您知道“$”仅出现在特定代码块的“$asd”中,您可以直观地选择它并
:norm $T$ct'this->line(<C-v><Esc>f]r)<Enter>
有关更有效地使用 :norm 的讨论,请阅读:help :norm
and 这篇 Reddit 帖子.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)