我在脚本中有一些不匹配的if和fi语句。我想去掉所有的东西,除了if和fi。这样我就能看到结构了。为什么和这么强大的编辑一起工作这么努力?我需要一个BIGFATOR操作符来恢复或一些我无法理解的顿悟.我不关心正则表达式的验证,而只是VIM7.2中实用的东西。
:g/ ^\tif [/print ]
会打印出如果
G/^tfi/印刷品
会打印出fi
我想做的是
:g/ ^tfi BIGFATOROPERATOR ^tfi/print
我已经成功地做了以下工作..。但我觉得我工作太辛苦了!
::调用TripMatch(‘^\t*if [’‘,'else','fi \t$') 功能!TripMatch(str1、str2、str3) 设var1 = a:str1 设var2 = a:str2 设var3 = a:str3 让max =行(“$”) N=1 N在范围内(1,最大值) 设currentline = getline(n) 如果当前线=~?var1回显n "1:“当前行,如果当前行=~?var2回显n "2:“当前行,如果当前行=~?var3回显n "3:“当前行让foo =”什么都不做“ 端函数
发布于 2009-03-25 02:34:49
:g/[ ^\t]if\|[ ^\t]fi/printBIGFATOROPERATOR是\|。这叫交替算子。在PCRE中,它是普通的|。它在Vim/ex中被转义,因为|在其他地方用于通用命令(或其他什么-- FIXME)。
发布于 2009-03-25 02:48:48
如果您想删除除if,否则或fi以外的所有其他行,则可以使用以下内容
%v/\(if\|else\|fi\)/d 'v‘是'g’的对立面,将删除与regexp不匹配的任何行。
为了补充strager所说的,管道字符‘\’在Vim中被转义了,我想是因为Vim假设您将比需要大量的RegExps更频繁地查找文字字符。
您可以让Vim使用更少的转义RegExps,方法是在ex模式中将“魔术”级别设置为“mode”:
“v”的使用意味着除了'0'-'9‘、'a'-'z’、'A'-'Z‘和'_’以外的所有ASCII字符都有一个特殊的含义。“非常神奇”
有关更多信息,请参见:he /magic
但是,不建议您在vimrc中将默认的魔术级别设置为“file”(如帮助文件注释所示)。
发布于 2009-03-25 07:56:36
:h /\|如果您错过了@,那么您可能已经错过了许多其他的模式“令牌”。
https://stackoverflow.com/questions/680022
复制相似问题