BIGFATOR 运算符,或者一些我一直没有意识到的顿悟......我不关心正则表达式的武断,只是在 VIM7.2 中实际工作。
:g/[ ^ ]if [/print将打印出 ifs
:g/[ ^ ]fi/打印将打印出 fi
我想做的是或者条件
:g/[ ^ ]fi
大操作员 [ ^ ]fi/print
我已经成功地做到了以下几点...但我觉得我工作太努力了!
:调用 TripMatch('[ ^ ]*if [', 'else', 'fi[ $]')功能! TripMatch(str1, str2, str3)
让 var1 = a:str1
让 var2 = a:str2
让 var3 = a:str3
让 max = line("$")
令 n = 1
对于 (1, max) 范围内的 n
让当前行= 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
结束结束功能
:g/[ ^\t]if\|[ ^\t]fi/print
BIGFATOROPERATOR 是\|
。它被称为交替运算符。在 PCRE 中,它很简单
|
。它在 Vim/ex 中被转义,因为
|
在其他地方用于通用命令(或某些东西 - FIXME)。
%v/\(if\|else\|fi\)/d
“v”与“g”相反,将删除任何与正则表达式不匹配的行。
添加 strager 所说的管道字符“|”在 Vim 中被转义,我想是因为 Vim 假设你寻找文字字符的频率比你需要大量正则表达式的频率要高。
在 ex 模式下,您可以通过将 'magic' 级别设置为 'very' 来使 Vim 使用更少的转义正则表达式:
使用“”表示在模式中 之后的所有 ASCII 字符除外 '0'-'9'、'a'-'z'、'A'-'Z' 和 '_' 有 有特殊的意义。 “非常神奇”
请参阅:he /magic 了解更多信息
不建议您在 vimrc 中将默认魔法级别设置为“very”(如帮助文件所述)。