首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有像样的Vim regexp或命令吗?如果其他人的错配,最好的方法是什么?

有像样的Vim regexp或命令吗?如果其他人的错配,最好的方法是什么?
EN

Stack Overflow用户
提问于 2009-03-25 02:30:31
回答 3查看 25.5K关注 0票数 46

我在脚本中有一些不匹配的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 =”什么都不做“ 端函数

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-03-25 02:34:49

代码语言:javascript
复制
:g/[ ^\t]if\|[ ^\t]fi/print

BIGFATOROPERATOR\|。这叫交替算子。在PCRE中,它是普通的|。它在Vim/ex中被转义,因为|在其他地方用于通用命令(或其他什么-- FIXME)。

票数 84
EN

Stack Overflow用户

发布于 2009-03-25 02:48:48

如果您想删除除if,否则或fi以外的所有其他行,则可以使用以下内容

代码语言:javascript
复制
%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”(如帮助文件注释所示)。

票数 18
EN

Stack Overflow用户

发布于 2009-03-25 07:56:36

代码语言:javascript
复制
:h /\|

如果您错过了@,那么您可能已经错过了许多其他的模式“令牌”。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/680022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档