我在脚本中有一些不匹配的if和fi语句。除了if's else's和fi's之外,我想删除所有内容。就这样我可以看到结构。为什么这么强大的编辑器如此努力?我需要一个 BIGFATOR 运算符来进行正则表达式或一些我已经躲过的顿悟...我不关心正则表达式上的pontification只是在VIM7.2中实际工作的东西。
:g / [^ \ t] if [/ print
将打印出ifs
:g / [^ \ t] fi / print
将打印出fi
我想做的是或条件
:g / [^ \ t] fi BIGFATOROPERATOR [^ \ t] fi / print
我做了以下成功...但我觉得我工作太难了!
:调用TripMatch('[^ \ t] * if [','else','fi [\ t $]')
功能! TripMatch(str1,str2,str3)
让var1 = a:str1
让var2 = a:str2
让var3 = a:str3
让max = line(“$”)
让n = 1
表示范围内的n(1,最大值)
让currentline = getline(n)
if currentline =~? var1 echo n "1:" currentline else if currentline =~? var2 echo n "2:" currentline else if currentline =~? var3 echo n "3:" currentline else let foo = "do nothing" endif endif endif
ENDFOR
endfunction可写
答案 0 :(得分:69)
:g/[ ^\t]if\|[ ^\t]fi/print
BIGFATOROPERATOR 是\|
。它被称为alternation operator。在PCRE中,它是普通的|
。它在Vim / ex中被转义,因为|
在其他地方用于一般命令(或者某些东西--FIXME)。
答案 1 :(得分:14)
如果你想删除除if,else或fi之外的所有其他行,你可以使用这个
%v/\(if\|else\|fi\)/d
'v'与'g'相反,将删除任何与正则表达式不匹配的行。
添加到strager所说的管道字符'|'在Vim中被转义,我想是因为Vim假设你会更频繁地寻找文字字符,而不是需要大量的RegExps。
在ex模式下,通过将'magic'级别设置为'very',可以让Vim使用较少的转义RegExps:
“\ v”的使用意味着在模式中 在它之后的所有ASCII字符除外 '0' - '9','a' - 'z','A' - 'Z'和'_'有 一个特殊的意义。 “非常神奇”
请参阅:他/ magic了解更多信息
不建议您在vimrc中将默认魔术等级设置为“非常”(如帮助文件中所述)。
答案 2 :(得分:7)
:h /\|
如果你错过了\ |,你可能错过了许多其他pattern“令牌”。