用vim对txt格式的小说重新排版
小说最通用的格式是txt,但制作的txt文件质量参差不齐,经常有一些毛病,比如段落前没有缩进,文件中植入了网址,章节前后没有缺少空行,空行过多,段落内每行用回车键断开等。这些问题用vim处理非常方便。
如图所示,排版尚好,但是每段内容内每行都用换行分割,需要去掉换行。每段段首有缩进。两种方式解决:普通的替换方式和全局的行合并方式。
1)段内换行,每个回车符后面紧跟着汉字或符号,假定都是双字节字符。匹配之后去掉换行
:%s/\n\([^\x00-\xff]\)/\1/g
或者反过来,假如换行符后紧跟的不是空格或者换行符,则删掉这个换行符
:%s/\n[\n ]\@!//g
2)行合并。从前一个开头有空格的行到后一个开头有空头的行之前的一行,全部合并。
:%g/^\s/,/^\s/-1j!
这里用j!是因为用j的话行之间会留一个空格隔开。解决办法一是用j!,二是先设置:set fo+=B,再用j。其表示删除双字节字符之间的空格,详情可以:h formatoptions 和:h fo-table查看。
其它常要用到的还有
1、删除行末的空格
:%s/\s\+$//g 或 :%s/\s*$//g
2、删除空行
:%g/^[ \t ]*$/d
3、删除连续空行,假如最多保留1个。
:%s/\n\n\+/\r\r/g
2和3可以组合起来
:%s/\([ \t ]*\n\)\+/\r/g
4、在章节之前或之后添加空行
:%s/^\s*第\(.*\)章/\r第\1章/g
为防止匹配到不是章节标题的行,可先用 :g/^\s*第.*章 看看匹配结果是否正确。类似的也可以在章节标题之后添加空行
:%s/^\s*第\(.(\)章\(.*\)$/第\1章\2\r/g