VIM每行一句:以句点分隔

时间:2018-09-24 23:34:01

标签: vim

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

2 个答案:

答案 0 :(得分:1)

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

我想提出一个采用递归宏定义和Vim的句子运动:help ()的解决方案。首先,一次替换:

)hr<CR>

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

要将其转换为可重复的宏(直到某些操作无法再执行并中止),请首先清除宏寄存器(例如a)并开始记录:qaqqa。然后插入上面的操作,并以宏调用@q作为结束。结束宏(q)并调用它(@a)。完整的宏(现在使用寄存器q):

qqqqq)hr<CR>@qq@q

这将在空行处停止并将换行符保留在句子中;您可能需要先:join所有行。另外,您也可以调整替换(r<CR>),也许调整为c hange命令。由于您在问题中没有提及任何详细要求,因此我将其保留。

答案 1 :(得分:0)

我认为这个问题不太清楚。我看到其他一些答案尚不清楚的问题..所以..让我尝试一下吗?

如果要分隔的句子在一行中,而“句号”仅用于分隔该行,则可以尝试使用以下命令将其分隔:

:%s/\./.\r/g
     ^ ^ (change the dots by the character you want if needed)

这将在.的缓冲区中全局查找,将其自身替换为(hmm)并添加行返回(\r)。

然后,您可能必须使用:%le删除缩进以将左侧的行设置格式。

ps:Rkta的建议(根据评论)%s/\([\.!\?]\)/\1\r/gc看起来也很好(也许更好?)。 Amadam评论也很重要。

欢迎来到stackoverflow。阅读stackoverflow.com/tour页可能会帮助您完成任务;)