当前位置:  开发笔记 > 开发工具 > 正文

是否有一个像样的Vim regexp OR命令?找不到匹配的最佳方法是什么?

如何解决《是否有一个像样的VimregexpOR命令?找不到匹配的最佳方法是什么?》经验,为你挑选了3个好方法。

我在脚本中有一些不匹配的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

endif     

ENDFOR

endfunction这样

strager.. 70

:g/[ ^\t]if\|[ ^\t]fi/print

BIGFATOROPERATOR\|.它被称为交替运算符.在PCRE中,很简单|.它在Vim/ex中|被转义,因为在别处用于一般命令(或者某些东西--FIXME).



1> strager..:
:g/[ ^\t]if\|[ ^\t]fi/print

BIGFATOROPERATOR\|.它被称为交替运算符.在PCRE中,很简单|.它在Vim/ex中|被转义,因为在别处用于一般命令(或者某些东西--FIXME).


在我的辩护中,有很多噪音在寻找这些东西......而且我在这个过程中学到了很多东西.

2> FlemishBeeCy..:

如果你想删除除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中将默认魔术级别设置为"非常"(如帮助文件说明).



3> Luc Hermitte..:
:h /\|

如果你错过了\ |,你可能错过了许多其他模式 "令牌".

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有