把 TextExpander 打造成文字格式清理利器

网站所有资源都有,可联系VX:kanyingvip

最近正逢各种职业资格考试,有读者熬夜备考,从 PDF 文献里拷贝出大段文字,没成想格式错乱,通篇都是重复的空行、多余的空格以及中英混用的标点。这位仁兄也是坚毅过人,连续几个晚上没睡,手动把所有格式错误修正了过来。事后他才知道,原来用自动化工具可以一键清理错误的文字格式。

为当事人惋惜的同时,我也反思了自己的工作流,其中同样有过这些繁琐操作:

手动在中英文之间插入空格
手动帮挤成一团的文字换行
手动把普通引号 ” 换成直角引号 「
……

从 PDF 复制出来的文本往往格式错乱
这些事情,其实都可以、也应该通过自动化工具瞬间完成。具体来说,我们主要有这些清理文字格式需求:

添加符号:如 Markdown 符号
添加空格:在中英文之间加入空格
文本替换:有普通文本替换和正则文本替换
文本去重:去掉多余的文字或者空格、空行
……
这篇文章我主要以 TextExpander 为例,它同时支持 macOS、iOS 和 Windows 等多个平台,而且其所用的 JavaScript 脚本通用性强,可以轻松移植到其他自动化工具中。

[rihide]文中每个案例中都会提供现成的自动化动作下载,绝大部分动作稍作修改后可用于任何支持 JavaScript 的文字处理工具(参考《iOS 文本处理中的 JavaScript》)。

> 所有 TextExpander Snippet 下载 ?

小科普:为什么是 TextExpander

选 TextExpander 作为清理工具,除了文章开头提到的跨平台通用性考虑,还因为它的操作比较独特,比起最常见的快捷键操作更适合在大量的文字输入中进行。

TextExpander 不依靠快捷键,而是利用文本缩写(abbrevation)来快速输入和处理文字,比如默认的 ddate 就表示输入日期(date),比快捷键更直观好记。通过 TextExpander 来清理文字格式,体验就像打字一样自然。

插入符号:以 Markdown 符号为例

Markdown 符号很简洁,一般我们都是手动输入的。直到 Hum 找我做一个「自动添加引用符号」的脚本,我才发现原来 Markdown 符号的输入也有优化空间。

下面的 Snippet(TextExpander 中的缩写片段)用到了一小段 JavaScript,功能很简单,就是在每行文字前面都加上 >,把好几行文字一次性转换成一大段的引用格式。

调整祝福语的格式

这个 Snippet 最早被用于在 Slack 发送祝福 ?。使用中它又有了衍生版本,比如:

  • 把 > 替换成 ,就能批量把段落转换成列表。
  • 把 > 替换成 \t,就能让整段文字向右缩进一格。
  • 把单个新行符 \n 替换成 \n\n,在每段文字后添加空行。
  • ……

下面是添加空行的动作演示,在某些基础 Markdown 编辑器中进行预览时,添加空行就可以避免文字挤成一团。

在中英文之间插入空格

中英文之间要不要加空格,这没有强制标准,但是有空格的确会更清晰好看,少数派编辑部在排版时也默认会添加空格。

不过多数时候,我们引来的资料、收到的原稿都是中英文挤成一团的,手动加空格非常累,也容易漏加、重复加。所以我写了一个 TextExpander Snippet 来完成自动添加。利用下面的 Snippet,拷贝原文后,在编辑器内输入 addsp(add space,增加空格),TextExpander 就会粘上一段已加好空格的文本。

添加中英、数字间的空格

在编辑工作中,这个脚本帮了我不少忙,大大降低了手动加空格的工作量。

仔细看 Snippet 中的脚本,其实不光是中英文,它还可以在中文和数字、英文和数字之间也插入空格。事实上,这段脚本在运行时会进行 6 轮的「添加空格」操作(.replace(pn, "$1 $2")),每次检测成功就会来一波空格添加。

添加中英空格的脚本

如果有你不需要的部分,也可以自行删除:

  • 英中空格:删除 .replace(p1, "$1 $2") 
  • 中英空格:删除 .replace(p2, "$1 $2") 
  • 中文数字空格:删除 .replace(p3, "$1 $2") 
  • 数字中文空格:删除 .replace(p4, "$1 $2") 
  • 英文数字空格:删除 .replace(p5, "$1 $2") 
  • 数字英文空格:删除 .replace(p6, "$1 $2") 

特别提醒一下,诸如 U盘 这类可能被认为不用加空格的词语,这个 Snippet 无法识别,大家如果不慎动到这些特殊的专有名词,还是需要手动改回来。另外,不要用这个 Snippet 清理链接,多出来的空格会导致链接格式出错。

文本替换

文本替换是很常见的一类操作,甚至有人调侃,会不会用 Word 的文本替换是辨别电脑「小白」的指标。现在,文本替换不只是各类文本编辑器的标配功能,也是每个人的必备技能——而最常用的文本替换操作,还可以进一步打包成自动化的流程。下面我们就用 TextExpander 来实现文本替换,进行格式清理。

和中英文之间要不要加空格一样,用直角引号还是弯引号并不是绝对的,具体用哪个,更多还是处于审美的考虑。不过设置一个自动切换的 Snippet,在需要时就能避免恶心的手动操作。

下面演示的是弯引号变直角引号,复制好参考资料的文本后,输入替换码 rpqt(replace qoute,替换引号),新的文本就跃然「屏」上:

替换弯角引号成直角引号

这个需求,原先来自写文章的场景,用到的很多参考资料普遍采用弯引号,为了和少数派整体风格统一,我经常用这个 Snippet 来清理文本。后来发现,San Francisco 下的弯引号和闭引号不易辨认,明明是弯引号,看不到、搜不出来,只能靠 JavaScript 来处理,于是 TextExpander 的必要性又增强了。

打开脚本,可以看到我设置了两次替换,分别对应左右两个引号:

  1. 替换左引号:var re1 = /“/g;  和 result = result.replace(re1,"「"); 
  2. 替换右引号:var re2 = /”/g;  和 result = result.replace(re2,"」"); 
替换引号的脚本

你可以把  和  和  分别换成自己需要的替换前后文本,来制作自己的文本替换 Snippet。

顺带一提,JavaScript 里的文本替换函数(replace())是支持正则表达式的,我们可以随手做出很灵活的文本替换,比如把下面这一大段书名换成列表:

随手就能改造出一个替换书名的 snippet

正则表达式的玩法远远不止这些。在文章末尾,我们还会学用 TextExpander 来清理重复文本。

清理重复文本

注:有些自动化工具,比如 LaunchBar 自带了清理多余空格、空行的功能,有这些工具的读者可以直接使用。

让我们回到开头的场景。和 PDF 打过交道的人,估计都被这种「所见不是所得」的文档格式折磨过,复制下来大量错乱的文本。

文章开头我们已经领教过这些错乱的文字

各种文本错乱中,多余的空格和空行是最常见的,这一节我们就来解决这些文本重复问题。下面是一个清理多余空行的 Snippet:

清理多余的空行

它的脚本其实很简单,就是在文本替换 Snippet的基础上做了一点修改,把多个重复文本替换成单个文本(空格和换行符也可以用正则符号来表示)。下图红色和蓝色区域分别就是替换前后的文本:

  1. 替换前:\n(\n)*( )*(\n)*\n ,表示多个空行
  2. 替换后:\n\n ,表示两个空行(为了方便 Markdown 格式下进行预览所以多加了一行空行)
清理重复空行的脚本

你可能已经想到,既然重复的空行能精简,其他多余符号也可以如法炮制。没错,把上面脚本中的 \n(\n)*( )*(\n)*\n  换成表示重复空格的 \s(\s)*( )*(\s)*\s,再将替换后的文本设为空值 "",即可实现重复空格的清除。

清理重复的空格

注意,如果中英文之间有重复空格,这个 Snippet 也会把它们一并清理掉。如果有给中英文添加空格的需求,可以在清理后在运行一遍添加空格的 Snippet。

小结

有人觉得,只有作者、编辑才需要清理文字,其实越是不常写东西的人,越是需要掌握文字格式清理的方法,不然为了给报告换行、删空格这种小事,而在日常工作之外又熬夜加班,实在亏待自己。

这篇文章里,我们以跨平台的 TextExpander 为例,借助最通用的脚本语言——JavaScript——实现了一系列的文本格式清理。从最简单的插入符号,到文本替换、重复文本精简,以后遇到这些常见的格式错误,我们能够更轻松地处理。

最后还是那句话,工具不是唯一的,学会思路,用自己习惯的其他工具也能实现[/rihide]  

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容