首页 > 解决方案 > VIM 每行一个句子:用句点分隔

问题描述

我有一个纯文本,我想将每个句子放在单独的行上。我看到了一些 Perl 的答案,但我只使用 Vim。

标签: vim

解决方案


Perl 的那些答案可能使用了正则表达式,并且将正则表达式语法转换为 Vim 的语法应该相对容易。:help perl-patterns应该为您提供有关语法差异的线索。

我想提出一个不同的解决方案,它采用递归宏定义和 Vim 的句子动作( :help ()。一、单次替换:

)hr<CR>

这会跳转到下一个句子 ( )),然后移回分隔空格 ( h),并用换行符 ( r<CR>) 替换它。

要将其变成重复自身的宏(直到某些操作无法再执行并中止),首先清除宏寄存器(例如a)并开始录制:qaqqa。然后插入上述动作,并以宏调用结束@q。结束宏 ( q) 并调用它 ( @a)。完整的宏(现在使用 register q):

qqqqq)hr<CR>@qq@q

这将在空行处停止并在句子中保留换行符;你可能想先:join所有线路。或者,您也可以调整替换 ( r<CR>),也许是一个change 命令。由于您没有在问题中提及任何详细要求,因此我将其保留。


推荐阅读