例如,查找包含单词“ This”但不包含单词“ red”的行
,这样对于包含这些行的文件
This is a blue coat
This is a red coat
This is a purple coat
That is a coat
搜索将仅找到第一行和第三行。
感谢任何建议!
#1 楼
还有另一种使用:global
命令的方法,如下所示:显示不包含:g
的行,最后将This
(:v
的缩写)应用于具有匹配项的那些行。这是vim的魅力。
评论
感谢@TroyDaniel,您能解释一下\ C做什么吗?
– Leo Simon
20/05/17在16:07
在vim中,正则表达式中的\ C表示区分大小写,而\ c(带有较低的c)表示不区分大小写。有关更多详细信息,您可以:h \ C。
–特洛伊·丹尼尔(Troy Daniel)
20 May 17 '17:35
感谢@TroyDaniel,数十年来,我一直想知道如何进行不区分大小写的搜索!但是您的建议包括红色,而不是排除红色,因此仅返回第二行。您能否修改答案以排除红色?我尝试使用上面的@语法,但无法在您的设置中正常工作
– Leo Simon
20-05-17在18:04
只要您知道:g命令,您就应该知道:g!或:v命令。如果没有,请执行:hv。
–特洛伊·丹尼尔(Troy Daniel)
20-05-18在13:47
注意:这至少需要Vim 8.0.630。在旧版本中不允许递归使用:g
–克里斯蒂安·布拉班德(Christian Brabandt)
20-05-19在8:14
#2 楼
您可以使用此命令来打印包含This
而不是red
的行:满足两个条件(分支)的行,\&
是第一个分支,它可以简单地是AND
,但是这样更通用,\(.*This\)
是第二个分支分支This
的意思是“如果前面的原子不匹配,则零宽度匹配”,就像逻辑\(.*red\)\@!
一样。换句话说:
:g/\(.*This\)\&\(.*red\)\@!
评论
非常感谢,这非常像通过格式化文本进行查询。我能够使用它来查找缺少文档字符串的函数。
–约书亚·德特维尔(Joshua Detwiler)
18年7月23日在17:14
#3 楼
看看这篇文章。用@romainl答案将其组合起来,您可以做任何您想做的事情。
const
到没有它们的函数。 handleChange = value => {
VIM脚本:
%s/\([ ]*\)\(\w* = .*$\)\&^\(\&\(.*const.*\)\@!.\)*$/const /gc
输出:
const handleChange = value => {
解释:
\([ ]*\)\(\w* = .*$\)
-让我将所有具有
word =
的行\&
-合并规则
^\(\&\(.*const.*\)\@!.\)*$
-该行不应包含
const
。
评论
您可以使用与较新的Vims一起分发的LogiPat插件