我所说的分成句子是指每个新句子都应以新的一行开始。
如何重复)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 mode
,q
然后按下任意键,假设该键是a
。因此您将在底部看到recording @a
。 - 现在按照按键顺序操作,
0)i<cr><esc>q
现在您的宏已录制完毕。这将在 处中断段落.
。 N@a
现在,在正常模式下按下 来重复此宏多次 ,其中N
是任意数字。
笔记:您可以选择任何字母数字字符来存储您的宏a
,该宏在处换行.
,您可以选择任意列,只需.
用您选择的任何列替换即可N
。