Hexo Markdown渲染时多余的空格

hexo使用的是markdown渲染博客的,不过在写文章的时候,我vim并没有设置auto wrap,一般我会自己去换行。但是 markdown 语法中换行就是分段,一行多了换行后分段导致行间距增大,感觉是多了一个空格,排版就会变得很难看。如果从 hexo 的 markdown 渲染引擎入手我感觉会异常麻烦,所以,我打算写个脚本把换行去掉合并成一行,这样就简单的解决了这个问题,修复原来的文字,后续的不再手动换行了。

也可以使用hexo-renderer-markdown-it引擎解决这个问题,不过我还是建议使用标准,而不是利用引擎来解决这个问题。

花了几十分钟写完,代码如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from glob import glob
from typing import List

files = glob("*/**/*.md", recursive=True)


def fmt(content: List[str]) -> str:
data: List[str] = []
lens = len(content)
n = 0
while True:
if "---" in content[n]:
tmp: List[str] = []
tmp.append("---")
while True:
n += 1
tmp.append(content[n])
if "---" in content[n]:
while True:
n += 1
if content[n] == "":
continue
break
break
continue
data.append("\n".join(tmp))

tmp = []
while True:
if "```" in content[n]:
_tmp: List[str] = []
_tmp.append(content[n])
while True:
n += 1
if lens == n:
n -= 1
break

_tmp.append(content[n])
if "```" in content[n]:
while True:
n += 1
if lens == n:
n -= 1
break

if content[n] == "":
continue
break
break
continue

data.append("\n".join(_tmp))

tmp.append(content[n])
i = n + 1
n += 1
if i == lens or content[i] == "":
data.append("".join(tmp))
break

if lens == n:
break

return "\n\n".join(data)


for f in files:
with open(f) as fp:
c = fp.read()

data = fmt(c.split("\n"))
with open(f, "w") as fp:
fp.write(data)

当然代码依然有一些问题,没有覆盖到所有的 markdown 语法,所以很多问题手动修改了。不过使用 Python 编写脚本确实能提升不少的效率,所以Python 是很值得学习的一门语言。