【问题标题】:Do not replace inside php-strings in vim不要在 vim 中替换内部的 php-strings
【发布时间】:2011-06-09 02:50:34
【问题描述】:

在我的公司,我们有编写 $foo 的代码约定。 $bar(带空格)。因为我不熟悉(我不想讨论 :P ),所以我编写了以下 vim-replace-function:

:%s/\(\w\|\]\|'\|\"\)\s\?\.\s\?\('\|\$\|\"\|(\)/\1 \. \2/eg

..它符合我目前所需的一切。但现在我也有我不想替换的字符串。

那么我怎样才能忽略像“foo.bar”或“foo.bar”这样的字符串,而不是$foo.$bar?

更新:我也会对完全脚本化的函数感到满意。我只是想知道是否除了暂时删除所有 php-strings 之外没有其他方法。重新计算实际的替换位置会很麻烦,不是吗?

【问题讨论】:

  • 您将无法仅使用正则表达式来稳健地执行此操作。

标签: php regex vim


【解决方案1】:

你可以在这里使用语法高亮:

:%s/\(\w\|\]\|'\|\"\)\s\?\.\s\?\('\|\$\|\"\|(\)/\=synIDattr(synID(line('.'),col('.'), 0),'name')!~?'phpString\(Single\|Double\)'?submatch(1) . ' . ' . submatch(2):submatch(1).'.'.submatch(2)/eg

基本上这意味着,如果光标下方的字符串不是语法类型 phpStringSingle 而不是 phpStringDouble,则添加一个 ' 来替换。 ' 在每个捕获组之间,否则保持原样。

阅读更多关于它的信息:

:h sub-replace-expression
:h expr1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    相关资源
    最近更新 更多