Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于选定的行,使用vim将每个场景放在新行上_Vim - Fatal编程技术网

对于选定的行,使用vim将每个场景放在新行上

对于选定的行,使用vim将每个场景放在新行上,vim,Vim,我的vim缓冲区包含多个句子的行 我怎样才能让每个句子都换一行?我不想在已经在新行开始的句子之间插入额外的空行 每个我都可以换。通过。\n%s/\./\.\n/但在句子后面已经有新行时也插入新行 编辑: 如果该行以%开头,则我希望该行保持原样。您可以尝试以下操作: :%s/\([?.!]\)\s\(\w\)/\1\r\2/g 查找以确保该行不以%开头,应防止在这些行上进行替换: :%s/\(^%.*\)\@<!\([?.!]\)\s\(\w\)/\2\r\3/g :%s/\(^%.*\

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

我怎样才能让每个句子都换一行?我不想在已经在新行开始的句子之间插入额外的空行

每个我都可以换。通过。\n
%s/\./\.\n/
但在句子后面已经有新行时也插入新行

编辑: 如果该行以%开头,则我希望该行保持原样。

您可以尝试以下操作:

:%s/\([?.!]\)\s\(\w\)/\1\r\2/g
查找以确保该行不以
%
开头,应防止在这些行上进行替换:

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

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

"one. two. three." becomes
one. [trailing space]
two. [trailing space] 
three.
说明:

:g/^[^%]/
在不以%

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

"one. two. three." becomes
one.
two.
three.
这不会将角色保留在句号之后

要保留它,请使用以下命令:

:g/^[^%]/s/\../&^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

似乎是重复的@angezanetti谢谢,问题确实非常相似。只是我不想在下一句已经从新行开始时插入新行。这一部分被省略了,因为在vim中很难精确地完成。这取决于你的句子有多“复杂”。见这里的讨论:谢谢。你能补充一点解释吗?它取代了所有句子结尾字符(?!)和单词字符之间的空格字符。捕获者记住句子的结尾和单词的第一个字母。替换用换行符替换空格。非常感谢您的解释。这是学习构建此类替换的良好开端。谢谢你的更新。你能解释一下更新吗?