我在脚本中有一些不匹配的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)
let var1 = a:str1
let 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 endifENDFOR
endfunction这样
strager.. 70
:g/[ ^\t]if\|[ ^\t]fi/print
BIGFATOROPERATOR是\|
.它被称为交替运算符.在PCRE中,很简单|
.它在Vim/ex中|
被转义,因为在别处用于一般命令(或者某些东西--FIXME).
:g/[ ^\t]if\|[ ^\t]fi/print
BIGFATOROPERATOR是\|
.它被称为交替运算符.在PCRE中,很简单|
.它在Vim/ex中|
被转义,因为在别处用于一般命令(或者某些东西--FIXME).
如果你想删除除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'和'_'具有特殊含义."非常神奇"
请参阅:he/magic了解更多信息
不建议您在vimrc中将默认魔术级别设置为"非常"(如帮助文件说明).
:h /\|
如果你错过了\ |,你可能错过了许多其他模式 "令牌".