0

样本:

function foobar($arg1 = null, $arg2 = null) {
    $_a = $arg1;
    $_b = $arg2;
}

我想在 vim 中编写一个搜索和替换正则表达式来执行此操作:

function foobar($arg1 = null, $arg2 = null) {
   $_a = (!$arg1) ? $arg1 : 1;
   $_b = (!$arg2) ? $arg2 : 1;
 }

这是我迄今为止尝试过的:

  1. 使用.命令重复我在 vim 中的最后一个操作,但它只附加: 1;到行
  2. 我已经编写了这个正则表达式的几十个变体,但无法按预期工作: %s/\$_a\t=\t*/(!\$arg1)\t\?\t\2\t\:\t1/g
  3. 手动替换这些行,但不用说我必须对大量文件执行此操作。

基本上我想做的是编写一个匹配的正则表达式, $arg1然后用三元运算符将匹配项括起来,但我无法在vim中访问正则表达式匹配项。

任何帮助将不胜感激!

(不必在 vim 中完成,我愿意接受使用 perl 之类的建议)

谢谢!!

4

1 回答 1

1

尝试以下命令:

:%s/\(\$arg[0-9]\);/(!\1) ? \1 : 1;

上面的命令替换$arg1;(!$arg1) ? $arg1 : 1;

于 2013-09-25T13:56:30.470 回答