regex - Vim 搜索模式 'foo' 但跳过包含 'bar' 的行而不删除任何行
问题描述
我想使用模式匹配在 vim 中使用搜索和突出显示。我的第一个搜索条件是foo
在一行中查找一个字符串。我的第二个搜索条件是跳过所有foo
如果同一行包含bar
在其中。我不想删除所有包含bar
. 我的第一个搜索条件符合以下条件:
/foo
我的第二个标准不符合:
/foo.*\(bar\)\@<!
示例文本:
1 foo
2 foo bar xx
3 fooobar
4 bar
5 xxx
(这里我只想突出显示第 1 行)
我在这里缺少什么?
解决方案
您可以使用
/\(bar.*\)\@<!foo\(.*bar\)\@!
非常神奇的模式:
/\v(bar.*)@<!foo(.*bar)@!
细节
(bar.*)@<!
- 否定的后视:bar
在当前位置右侧没有任何 0 个或更多字符foo
- 一个字foo
(.*bar)@!
- 负前瞻:bar
不允许在当前位置右侧的任何 0 个或多个字符之后。
推荐阅读
- c++ - 如何在 QTreeWidget 孩子上正确显示 QIcon?
- firebase - Firebase注销功能未重定向到expo react本机应用程序上的登录屏幕
- javascript - 在 React Navigation with Redux 中,有没有办法将 Stack Navigator 标题组件更新为堆栈中的屏幕?
- java - 在 Hibernate JPA 中使用父 ID 填充子 ID 时出现问题
- windows - ld:部分太多(90295)
- python - 用大于以下值的值填充 NaN 的三次样条插值
- python - EC2上的python烧瓶应用程序中的404
- python - 为什么不能直接使用 print(something.sort())?
- sql - 无法在 PSQL 中删除数据库
- javascript - 通过 Amazon Presigned URL 在前端 Javascript 中下载 Excel (.xlsx) 文件