line('word_123') 替换它,保留“word_123”。我怎么能那样做? 通过使用这个: %s/asd\[\'.*\'-6ren">
gpt4 book ai didi

regex - 在 vi/vim 中保留某些 "words"的同时替换

转载 作者:行者123 更新时间:2023-12-04 09:19:28 38 4
gpt4 key购买 nike

例如,如果我有 $asd['word_123']我想用 $this->line('word_123') 替换它,保留“word_123”。我怎么能那样做?

通过使用这个:

%s/asd\[\'.*\'\]/this->line('.*')/g

我将无法在两者之间保留措辞。请赐教。

最佳答案

使用正则表达式,您可以执行 :%s/\$asd\['\([^']*\)'\]/$this->line('\1')/g 之类的操作

一步步:
%s - 替换整个文件
\$asd\[' - 匹配“$asd['”。注意 $[需要转义,因为这些在正则表达式中具有特殊含义。
\([^']*\) - \( \)可用于选择所谓的“原子”,以便您可以在替换中使用它。 [^']表示 的任何内容不是 一个 ' , 和 *表示匹配 0 个或多个。
'\] - 完成我们的比赛。
$this->line('\1') - 替换为我们想要的,\1替换为我们之前匹配的原子。
g - 对每行上的多个匹配项执行此操作。

替代品(宏观)

除了正则表达式,您还可以使用宏。例如,

qq/\$asd<Enter>ct'$this->line(<Esc>f]r)q

然后 @q你需要多少次。您也可以 @@在您使用 @q 之后一次,或者你可以 80@q如果你想使用它 80 次。

替代(:规范)

在某些情况下,使用 :norm可能是最好的选择。例如,如果您有一小段代码并且您正在匹配一个独特的字符或位置。如果您知道“$”只出现在特定代码块的“$asd”中,您可以直观地选择它并
:norm $T$ct'this->line(<C-v><Esc>f]r)<Enter>

有关更有效地使用 :norm 的论述,请阅读 :help :normthis reddit post .

关于regex - 在 vi/vim 中保留某些 "words"的同时替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11624166/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com