vim:连接段落中的所有行
|
我正在尝试使用vimscript将段落(文本块)中的所有行连接起来而没有成功。
我想对每个段落(文本块)执行此操作,并希望在它们之间保持空白行。
(我不想使用宏)
当我使用“ 0”命令转到下一个段落中的第一个单词时,我注意到它无法识别带有空格或段落之间有多个空行的空行。
那不是我想要的。
所以我尝试了这个:
进行搜索:
\\(^.*\\S\\+.*\\n\\)\\{2,}
做:
normal vipgJ
再次进行上述搜索等。
当我手动执行此操作时,它可以正常工作,但无法将其放入脚本中。
我尝试了以下脚本:
function! <SID>JoinParagraphs()
let i = 1
normal gg
while i <= 200
call search(\"\\\\(^.*\\\\S\\\\+.*\\\\n\\\\)\\\\{2,})\", \"\")
normal vipgJ
let i=i+1
endwhile
endfunction
不起作用...
我也尝试将“呼叫搜索...”行更改为
let @/ = \"\\\\(^.*\\\\S\\\\+.*\\\\n\\\\)\\\\{2,})\"
但这会将所有行合并在一起(不保留空行)。
我怎么了
没有找到相关结果
已邀请:
4 个回复
氏脑
另一种方法:
广躺椽
恕我直言,这绝对是赢家。 在从“ 9”(开始)到“ 10”(文档结束)的运动上执行“ 8”,使用的文本宽度为1000000。
屠创氓读叔
修正正确的评论后修正。它发生在仅包含空格的行中,这些行包含Tab字符...很抱歉。
如何为您工作? (如果愿意,可以替换
->
) 更新这里是一种不使用普通模式的模式(受彼得的评论启发) 最大的好处是它可以在消极和积极意义上重用相同的模式。这样可以将其通用化为
现在,第二行显示了此方法的简单性(对于每一个不匹配的行,请连接到下一个匹配的行)。最好的是,您可以改用任何奇数搜索模式 当然,您可以将这一特定任务写成一行,但是它并不那么优雅:
讼乐
这将在整个文件上完成,这可能会弄乱编号列表之类的内容。您可以按以下段落进行操作:
或从vi之外的命令行执行此操作:
我喜欢这种方法,因为我不必记住要重置textwidth = 80