取消选择vim中的文本,如grep -v

时间:2014-03-07 07:42:14

标签: visual-studio vim vi

我想在vim中模仿以下搜索模式:

grep "\<[0-9]\>" *  |  grep -v "666"

我可以使用

突出显示所有数字
/\<[0-9]\>"

但是我怎么能告诉vim从突出显示的文本中删除与表达式匹配的文本

/666

至少可以在Visual Studio中完成吗?

2 个答案:

答案 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+>