我想在vim中模仿以下搜索模式:
grep "\<[0-9]\>" * | grep -v "666"
我可以使用
突出显示所有数字/\<[0-9]\>"
但是我怎么能告诉vim从突出显示的文本中删除与表达式匹配的文本
/666
至少可以在Visual Studio中完成吗?
答案 0 :(得分:1)
当然,/666
与该表达式不匹配。
但是,假设您有例如\d\+
并希望排除666
,您可以使用否定前瞻:
\v((666)@!\d)+
这使用
\v
非常神奇(减少\
转义次数)\@!
表示“负零宽度前瞻断言”答案 1 :(得分:1)
您不能像在shell中那样顺序过滤匹配项,因此您需要使用高级正则表达式功能将两者合并为一个。
基本上,您需要在匹配位置声明666
的不匹配。这是通过\@!
原子实现的(在其他正则表达式方言中,通常写为(?!...)
):
/\%(\d*666\d*\)\@!\<\d\+\>
注意:如果您想仅排除666
,而不是6666
等,则需要在第一部分中指定\<666\>
。
我使用\d
代替[0-9]
;您可以使用\
“非常神奇的”修饰符进一步删除\v
使用:
/\v(\d*666\d*)@!<\d+>