如何指定搜索中的字符串有多个选项?
例如,我想找到以jspPar
,btn
或jspAtt
开头且以字母K
结尾的任何组合。
另外 - 我需要用字符串替换它,具体取决于原始前缀。
例如,如果前缀为jspPar
,我需要将其替换为字母P
。 (并且,假设B
和A
代表btn
和jspAtt
。
答案 0 :(得分:5)
时
\(jsPar\|btn\|jspAtt\)[^ \t]*K
你在找什么?
\(jsPar\|btn\|jspAtt\)
说“此时,匹配任何这些替代方案”,然后[^ \t]*
说“此时,匹配任何数量(包括零)的空格或制表符”,以及K
当然意味着“此时匹配K”。
对于您添加的问题可以执行以下操作:
%s/\(jsPar\|btn\|jspAtt\)[^ \t]*\zsK/\=submatch(1) == 'jsPar' ? 'P' : submatch(1) == 'btn' ? 'B' : 'A' /g
(\zs
表示“认为此时匹配已开始”,因此只会替换“K”。)
但是如果我 在一次传递中进行替换,我只会这样做。否则我只会运行三个s///
s:
%s/jspAtt[^ \t]*\zsK/A/g
%s/jsPar[^ \t]*\zsK/P/g
%s/btn[^ \t]*\zsK/B/g
鉴于命令历史记录,输入的次数要少得多,并且也不太可能需要调试,而在指定任何计算时,这总是一种潜力。