将所有内容从=替换为VIM中的行尾

时间:2012-10-11 17:35:22

标签: vim replace substitution

假设我有几行:

$repeat_on =  $_REQUEST['repeat_on'];    
$opt_days = $_REQUEST['opt_day'];  
$opt_days = explode(",", $opt_days);

......等等。

假设我使用可视模式选择所有行:如何将=中的所有内容替换为行的末尾,如下所示:

$repeat_on = NULL;    
$opt_days =  NULL;
$opt_days =  NULL;

2 个答案:

答案 0 :(得分:7)

选择块后,请使用此替换:

s/=.*$/= NULL;

替换正则表达式通过将=和行尾(包括=)与= NULL;替换为=.*$之间的任何内容来更改每一行。

命令的第一部分是正则表达式匹配要替换的内容:=

  • .字面意思。
  • .*表示任何字符
  • 因此$表示: 0或更多任何字符
  • $ 行尾终止了这一点,但实际上这里没有必要:在没有=的情况下尝试。

因此,正则表达式将匹配每行中第一个= NULL;之后的区域,并将该区域替换为替换,即=。我们需要在替换中包含:以将其添加回来,因为它是要替换的匹配项的一部分。

如果选择了一个块,然后按:'<,'> 输入命令,命令行将自动为视觉选择范围添加前缀,如下所示:

:'<,'>s/=.*$/= NULL;

继续输入上面的命令,命令行将是:

g

将替换应用于所选视觉块。

如果您需要在一行中进行多次替换,则需要添加:'<,'>s/=.*$/= NULL;/g 标记:

{{1}}

答案 1 :(得分:0)

一些替代方案:

视觉阻止(快速)

在第一行/字符上执行... Wl<C-v>jjCNULL;<Esc>bi<Space><Esc>

宏(更快)

在第一行/字符上执行... qqWllCNULL;<esc>+q2@q

:规范(最快)

在第一行做... 3:no<S-tab> WllCNULL;<Enter>

或者,如果您在视觉上选择了线条,则将3号线从头开始。