Vim中如何编写正则表达式识别仅包含单行内容的独立段落
Vim匹配单独成段的
row 1正则方案 原命令错误原因
你之前使用的v/(\n\n)+/d不符合需求,核心问题有两个:
- 逻辑反向:
:v/{pattern}/d的作用是保留匹配到pattern的行,删除未匹配的行,你的pattern匹配的是连续换行符,目标行row 1本身不包含连续换行,会被直接删除 - 正则语法不符合Vim默认规则:Vim默认magic模式下,括号分组需要转义为
\(\),未转义的()只会被识别为普通字符
正确实现方案
方案1:直接筛选保留目标行
执行以下命令可以直接删除所有非目标内容,仅保留单独成段的row 1:
:g/\v(^|\n\n)row 1(\n\n|$)/!d
正则各部分说明:
\v:开启Vim的very magic模式,所有元字符无需额外转义,降低书写复杂度(^|\n\n):匹配文件起始位置,或者连续两个换行(代表前侧是独立空行)row 1:匹配目标内容(\n\n|$):匹配连续两个换行(代表后侧是独立空行),或者文件结束位置!d:删除所有未匹配到上述模式的行
方案2:仅高亮匹配目标内容
如果你只需要高亮定位目标行,不需要修改文本,使用以下正则即可:
/\v(^|\n\n)\zsrow 1\ze(\n\n|$)
其中\zs和\ze分别标记匹配结果的起始和结束位置,确保高亮内容仅包含row 1本身,不会带上前后的空行。
内容的提问来源于stack exchange,提问作者vbd
相关产品推荐
相关产品推荐

