假设我有几行像
$adv_id;
$am_name;
$campaign_ids;
$repeat_on;
$opt_days;
$opt_time;
$am_or_pm;
假设我使用可视模式选择所有行...如何在每行的开头和结尾添加字符,使其看起来像
$_REQUEST($adv_id);
$_REQUEST($am_name;
$_REQUEST($campaign_ids);
$_REQUEST($repeat_on;
$_REQUEST($opt_days);
$_REQUEST($opt_time);
$_REQUEST($am_or_pm);
答案 0 :(得分:4)
与你的other question非常相似,所以那里的解释应该有助于你理解这个替代品。选择行作为可视块,使用此替换命令:
:'<,'>s/\$\(.*\);/$_REQUEST(\1);
如前所述,如果您有视觉选择,'<,'>
将在命令行中为您自动填充。
这里的不同之处在于我们正在使用\(\)
创建一个捕获组,它将捕获部分正则表达式,并在替换中再次使用它,使用{{1 },指的是第一个捕获组。
此外,由于此正则表达式使用\1
字面意义来定位替换,因此需要对其进行转义:$
,因为它在正则表达式中具有特殊含义:行尾
如果您需要在一行上进行多个替换,则需要添加\$
标记,并且可能需要删除分号:
g
反向正则表达式,例如将:'<,'>s/\$\(.*\);/$_REQUEST(\1)/g
替换为$_REQUEST($adv_id);
,非常相似:
$adv_id;
在这里,我们捕获捕获组中:'<,'>s/\$_REQUEST(\(.*\))/\1
中的parens之间的所有内容,并且捕获组是整个替换。
答案 1 :(得分:1)
在可视模式下,点击:
并在命令行中使用它:
:'<,'>s/^\(.*\);$/$_REQUEST(\1);/g
\(
和\)
捕获该行的匹配表达式,\1
调用替换中捕获的组。
使用:'<,'>
告诉Vim通过以下命令过滤当前选择(在这种情况下为s
)。