不要在vim中替换内部的php字符串


Do not replace inside php-strings in vim

在我的公司,我们有写$foo的代码惯例。$bar(带空格)。因为我不能熟悉它(我不想讨论:P),我写了下面的vim-replace-function:

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

. .符合我目前需要的一切但现在我也有了不想替换的String

那么我怎么能忽略像"foo。Bar"或"foo"。Bar ',但不是$foo。美元酒吧?

Update:我也很高兴有一个完全脚本化的函数。我只是想知道是否没有其他的办法,而不是暂时删除所有的php字符串。重新计算实际的替换位置会很混乱,不是吗?

您可以在这里使用语法高亮显示:

:%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