如何使用 Vim 将段落分成句子?

如何使用 Vim 将段落分成句子?

我所说的分成句子是指每个新句子都应以新的一行开始。

如何重复)i<CR><Esc>至段落末尾}?(<CR>= Enter

如果我将宏设为)i<CR><Esc>“q”,我可以执行它直到段落结束吗?

答案1

vap:s/\. /.^M/g
  • vap选择当前段落
  • :s/\. /.^M/g将所有句号后跟空格替换为句号后跟换行符。(请注意,要^M在替换表达式中获取文字换行符 ( ),您必须键入<CTRL-V><CR>。)

答案2

您可以进行搜索和替换。我刚刚写了这个。它有效,但您可能可以做得更好。

:%s/\v[ ]*([^\.]*\.)/\1\r/g

答案3

我的解决方案是,以正常模式启动并输入:

vip:'<,'>s/\n/ /|'<,'>s/\([.?!]\)\s/\1\r/g

vip请注意,在正常模式下输入“ ”后按下“:”键时,命令行上会自动插入第一个“<,'>” 。

第一个替换命令将段落合并为一行,然后“|”字符在同一命令行中分隔第二个 : 命令,这次'<,'>必须手动输入“ ”。第二个替换命令将句号、问号或感叹号后跟一个空格替换为匹配符号和换行符。

这不会捕捉到句子以句号/哀叹/疑问和引号字符等结尾的情况,但可以扩展模式来做到这一点。

答案4

我发现有一个非常简单的方法可以做到这一点 vim-macros

  • 首先按下normal modeq然后按下任意键,假设该键是 a。因此您将在底部看到recording @a
  • 现在按照按键顺序操作,0)i<cr><esc>q现在您的宏已录制完毕。这将在 处中断段落.
  • N@a现在,在正常模式下按下 来重复此宏多次 ,其中N是任意数字。

笔记:您可以选择任何字母数字字符来存储您的宏a,该宏在处换行.,您可以选择任意列,只需.用您选择的任何列替换即可N

相关内容