regex - 如何在 Vim 中用正则表达式匹配行尾而不是段落?

标签 regex vim

我正在尝试连接一个段落中的所有行,但不是将一个段落与下一个段落连接。

在我的文本文件中,段落不是由它们之间的空行定义的,而是在行尾有一个句点。句点后可能有空格,但它仍然定义了段落的结尾。

所以,我想做一个跳转到下一行末尾的宏,而不是停在那些末尾有句点的行上。

我使用了这个正则表达式:

[^\.\s][\s]*$

含义:查找既不是句点也不是空格的任何字符,可选地后跟空格到行尾。

然后我会应用 J 命令将匹配的行与下一行连接起来,然后重复。

它在 RegexPal 上运行良好, 但在 Vim 中它停在有一个句点和两个空格的行。

我做错了什么?

最佳答案

与其在宏中将正则表达式与 J 命令结合使用,不如使用正则表达式替换来删除换行符怎么样?这似乎对我有用:

:%s/[^\.]\s*\zs$\n\(^\s*$\n\)*/ /

解释:

  • [^\.]\s*\zs$\n -- 不以句点结尾的行;在换行符之前开始替换。
  • \(^\s*$\n\)* -- 包含仅包含空格的任何其他行

然后这个正则表达式被一个空格替换。

关于regex - 如何在 Vim 中用正则表达式匹配行尾而不是段落?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11191238/

相关文章:

c# - 正则表达式捕获组

regex - 如何使用正则表达式从 html 文档中提取特定的元信息

linux - vim 如何区分 ESC 键和转义序列头?

vim - vimrc 函数中的错误字符

regex - 在 Notepad++ 中查找LF(换行)

ios - 在 RegEx 标识的 NSString 中的某个点添加一个字符,是否有比所有反向引用更有效的方法?

regex - 使用正则表达式和通配符查询任意数据

javascript - Vim 使用空格而不是制表符缩进 JavaScript 文件

vim - 在 Vim 中搜索后居中光标位置

Vim:类似 Eclipse 的 Ctrl-Backspace 和 Ctrl-Del