如何在Vim中替换指定文件模式且保留括号内原有字符串?
Vim 批量替换
defined($xxx) 为 $xxx 的正确方法 你之前的命令失效原因:替换部分的
$.*会被当成字面量输出,且正则里的$是特殊字符(匹配行尾)需要转义,同时.*属于贪婪匹配,可能会超出目标括号范围匹配内容。正确的全局替换命令:
:%s/defined(\$\(.*\))/\1/g命令拆解:
defined(\$\(.*\)):正则匹配规则\$:转义美元符号,匹配真实的$字符\(.*\):用捕获组包裹括号内的变量内容,后续通过\1引用该内容
\1:替换时调用第一个捕获组的内容,也就是原括号里的变量名g:全局替换所有匹配项
更严谨的非贪婪匹配版本(适用于一行多匹配或嵌套括号场景):
:%s/defined(\$\(.\{-}\))/\1/g其中
.\{-}是Vim的非贪婪匹配语法,只会匹配到第一个闭合括号为止,避免过度匹配。
内容的提问来源于stack exchange,提问作者li_jessen
相关产品推荐
相关产品推荐

