2

假设我有几行,例如:

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

... 等等。

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

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

2 回答 2

7

选择块后,使用此替代项:

s/=.*$/= NULL;

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

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

  • =是从字面上理解的。
  • .表示任何字符
  • 所以.*意味着:0 个或多个任意字符
  • 这由$for end of line终止,但这实际上在这里不是必需的:也可以不带$.

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

当您选择了一个块并点击:输入命令时,命令行将自动以如下所示的视觉选择范围为前缀:

:'<,'>

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

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

这会将替换应用到选定的视觉块。

如果您需要在一行中有多个替换,则需要添加g标志:

:'<,'>s/=.*$/= NULL;/g
于 2012-10-11T17:37:41.630 回答
0

一些替代方案:

视觉块(快速)

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

微距(更快)

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

:norm(最快)

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

或者,如果您在视觉上选择了这些行,则将 3 留在开头。

于 2012-10-11T23:24:34.657 回答