【问题标题】:For selected lines, put each scentence on a new line with vim对于选定的行,用 vim 将每个气味放在一个新行上
【发布时间】:2014-05-13 08:03:40
【问题描述】:

我的 vim 缓冲区包含多于一个句子的行。

如何让每个句子都换行?我不想在已经换行的句子之间插入额外的空行。

我可以替换每个 . by .\n %s/\./\.\n/ 但是当句子后面已经有一个新行时也插入一个新行。

编辑: 如果该行以 % 开头,那么我想保留该行。

【问题讨论】:

标签: vim


【解决方案1】:

你可以试试这个:

:%s/\([?.!]\)\s\(\w\)/\1\r\2/g

向后看以确保该行不以% 开头应防止在这些行上进行替换:

:%s/\(^%.*\)\@<!\([?.!]\)\s\(\w\)/\2\r\3/g

【讨论】:

  • 谢谢。你能补充一点解释吗?
  • 它替换所有句子结尾字符(?.!)和单词字符之间的空格字符。捕获记住句子结尾和单词的第一个字母。替换用换行符替换空格。
  • 非常感谢您的解释。这是学习构建此类替代品的良好开端。也谢谢你的更新。你能解释一下更新吗?
【解决方案2】:

试试这个:

:g/^[^%]/s/\../.^M/g

解释:

:g/^[^%]/ 处理不以 % 开头的行

s/\../.^M/g 替换每个 .后跟另一个带有换行符的字符。

"one. two. three." becomes
one.
two.
three.

这不会保留句号之后的字符。

要保留它,请使用:

:g/^[^%]/s/\../&amp;^M/g

"one. two. three." becomes
one. [trailing space]
two. [trailing space] 
three.

要保留它,但在下面一行,使用这个:

:g/^[^%]/s/\.\(.\)/.^M\1/g

"one. two. three." becomes
one.
 two.
 three.

在所有情况下,要输入^M,请输入ctrl+V,然后输入return

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    • 2011-05-19
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多