@scomper

TextWrangler 使用经验分享

2017.06.24

设置和正则处理实例

TextWrangler 是 Mac 上的一款免费文本编辑器,虽然免费但是功能并不简单,随着使用时间的增加对它的好感和经验值也在不断提升:消除文本乱码的编码转换(GB2312-UTF)、Surge 配置修改、编辑「鼠须管」的配置和词典,修改软件的语言文件(.strings)、比对文本变化。

处理词典文件查重、排序通常是用 Excel,但是遇到几次 Excel 处理超过 10 万条记录崩溃,开始尝试使用并喜欢上了 TextWrangler,很多时候 TextWrangler 比 Excel 显得更简单从容。

整理分享一些 TextWrangler 的设置和使用经验,希望同样能在日常使用中给你带来帮助。

给 TextWrangler 换个好看的配色

编辑文本时会长时间的面对屏幕,除了设置喜欢的字体、字号以外,和程序员面对代码一样还可以换上更养眼的配色方案。

电脑里和编码有关的几个应用,例如,iTerm 2、TextWrangler 采用的都是流行的 Solarized 配色,配色方案来自 http://ethanschoonover.com/solarized。iTerm 配色主题文件下载后双击就能应用,TextWrangler 的配色调整稍微麻烦一点,首先由 GitHub 下载配色文件,然后 Finder 定位到 ~/Library/TextWrangler/Color Schemes/ 文件夹,将下载解压的 .bbcolors 文件复制到文件夹,最后回到 TextWrangler 的偏好设置选择加载。

Light 配色对应白天的工作环境,Dark 配色对应晚上的昏暗环境。

Ulysses 不属于编码软件,但是针对这个流行的配色方案也有相应的主题,访问 Ulysses 的主题网站下载: http://styles.ulyssesapp.com/bundle/Solarized+XL/54aa19c4eaf6ea68210790dd

字体设置,制表符还是空格

字体设置决定内容的呈现,如,字符和特殊字符(回车符,换行符,TAB键,行首,行尾等特殊字符)的显示。清晰完整的显示这类控制符号并不是所有字体都支持,推荐使用字体册中的等宽编程字体。

另一方面,TextWrangler 遇到某些特殊字符也会显示不出来,需要改成大字符集的 HanaMinA 字体才能正常显示。例如,编辑 luna_pinyin.emoji.dict 这种包含表情和特殊符号的文本时,🉐️🈹️🈳️ 这些特殊符号通常的字体就没法显示。

除了字体的设置,还有两个设置用到的场景比较多:Auto-Tabs 和控制符号显示。勾选 Auto-tabs 按下 Tab 键输出的是四个空格 「…. 」,去掉勾选按 Tab 键输出的是制表符「△」,「鼠须管」的词典文件词汇和释义之间采用的都是制表符来区隔,如果错误的输入空格无法被正确识别。

文本属性有全局性和针对单个文本(菜单项 Edit - Text Options)的设置,另外,大多数使用场景中推荐勾选「Show invisibles」显示不可见元素。

全局设置只影响以后新建的文件,当打开的文本没有如预期一样显示不可见元素时检查一下针对当前文件的 Text Options 设置。

内容比较和磁盘浏览模式

打开需要比较的两个文件,都选择以后右键选择「Compare」就能在双窗口中比较内容,对比窗口底部会显示存在差异的具体行数,点击可以直接跳转定位。虽然在内容比较上不能和专业的 Beyond Compare 相提并论,但是普通文本的版本对比 TextWrangler 足以胜任。

编辑同一个文件夹下的多个文本时,推荐使用 Disk Browser 模式打开文本所在的文件夹,这样就不用一个个打开文件。

Disk Browser 模式会显示出当前文件夹中的所有文件,为了减少干扰,点击底部的过滤器,添加过滤规则来限制显示的文件。图示中过滤条件是仅显示包含标签和后缀是 yaml 的文件,不过依旧有几个 userdb 的漏网之鱼,看来 TextWrangler 的规则辨识能力还是有缺陷。

文本处理的几个主要功能

文本处理密度比较高的几项主要是:排序、去重、添加前后缀等等,而这些处理都集中在 TextWrangler 的 Text 菜单下。

  • 添加/移除 行编号
  • 给行添加 前缀/后缀
  • 行排序
  • 处理重复行
  • 按包含的内容处理行

要理解上述这些功能的用法最好的方式是通过实例来学习,下面会以整理 Squirrel 的几个词典文件为例予以介绍。

计划用编辑器处理词典文件的几个问题:

  • 排序检查 emoji 表情符号词典中单音节的词条,将单音节(候选位置过于靠后)改成多音节;
  • 英文词典计划去掉 3 个字母及其以下的单词;按照词频排序,复制词频在 10 万以上的部分改成首字母大写追加到原有词库;按照词频排序将词频达到 100万以上的复制成全部大写加到词库中,最终实现高频词汇同时显示 小写、大写、全部大写三种候选。
  • 去除 cn-en 英文常用软件名称词典中和英文词典重复的部分

添加和去除编号

英文词典中英文单词的小写和首字母大写部分是各自一个区域排列的,如果整体排序就会打乱顺序,这种情况下整理先添加编号来记录现有的顺序是非常必要的,处理完成后再基于编号排序还原顺序并去掉编号。

批量添加前缀和后缀

批量添加前缀能快速的为选中行添加前缀和后缀,例如,如果要快速注释掉文本中的多行,选中后添加前缀 #,就能快速实现,调试完成后想恢复再去掉前缀即可。

批量处理行的缩进时同样可以用前缀的方式来统一插入空格或者制表符。

排序和正则

文本处理中最有魅力的就是正则表达式的部分,因为需求稍微复杂一点的排序、查询和替换都会用到正则表达式。

不按 emoji 符号而是按释义拼音音节排序
单音节在候选中过于靠后以至于没有实际的意义,修改为多个音节才便于候选检索。例如 ⛄ xue 不如改为 ⛄ xue ren 更容易调用。Emoji 表情符号词典默认排序是按排在首位的表情符号排序的,为了排查符号后的音节问题,需要按音节排序。

勾选「Sort using pattern」,使用排序模式。输入正则表达式 \t+\w 基于表情符号后的第一个字母开始排序。如果不排序想直接查找单个音节的条目也可以用 \t+\w{1,}$ 直接搜索。

去掉单词位数低于 3 个字母的单词,减少候选干扰。
去掉英文词典中单词位数是两位的可以用^\w{1,2}\t.* 替换掉,如果单词位数是 3 位也不想保留正则表达式改成^\w{1,3}\t.* 再跑一遍。

组合一个新的英文词典,小写+首字母大写+整个单词大写
计划按照词频排序先去掉词频较低(日常使用几率很少)的单词条目。词条排序方式和上面差不错,只不过这次要排序的基准是最后的数值,\t+\d+按照词频的数值排序,记得勾选上「Number match by value」,将数字部分按数值的方式排序。

按照词频数值排序后,选中合适词频的单词段落新建成新的文本,例如,词频 10 万以上的复制新建成一个文本,词频 100 万以上的再另存一个文本,接下来将 10 万词频的改成首字母大写,100 万词频的单词改成首个单词全大写,最后合并到最终的英文词典当中。

首字母大写在 TextWrangler 中操作还是很简单的,通过菜单项 Text - Change Case 就能实现。稍微麻烦一些的是前一个单词都大写,「鼠须管」不能识别编码部分的大写(单词和编码是以制表符分隔开),所幸这部分内容不多,最后是另存成文本用 Excel 打开并转成大写,Excel 输出成 csv 文件,用 TextWrangler 打开 csv 文件还需要批量替换分隔符为制表符 (, 替换为 \t)。

去除重复项

去重原则是由上而下,意思说以排在前面的条目为主,如果后续发现相同的条目就删除,利用这个特性计划将 cn-en 词典中词条和英文词典对比去除重复项。

cn-en 词典中的词条是不包含词频数值的,为了比对\t+\d+$ 先将英文词典副本(安全起见不直接编辑原文件)的词频数值全部替换为空。

接下来将 cn-en 的内容复制到英文词典的内容后,记住起始位置的单词便于处理完成后搜索定位从这里再剪切回去。

Text - Process Duplicate Lines,去除重复的窗口勾选「Delete duplicate lines」,确定同时勾选了「Case sensitive」大写敏感,如果想知道去除了那些重复项勾选「Duplicates to clipboard」将重复项保存在剪贴板。

重复去除后将 cn-en 段落再剪切粘贴回去。实际上词典中的重复条目并不会对输入法的部署有什么困扰,能收获的好处除了练手以外只是让单个词典的尺寸变小一些。

按包含的内容处理行

按内容进行查询比较好理解,例如,想把词典中所有单个拼音开头的词条筛选出来,使用 \t+\w做为查询条件就行,查询的结果保存到剪贴板由剪贴板新建就能看到结果。


很多用到正则的地方并不能直观的看到正则的效果是否准确,可以先在查询 ⌘F 窗口中多验证几次,查看搜索结果是否和预期的一样,没有问题再到按内容查询、去重等窗口中调用。

正则表达式是需要大量实际操练才能掌握的技能之一,TextWrangler 所体现的强大很多时候都是因为其支持正则表达式。

当打开通知中心看到 TextWrangler 的这些操作记录的时候还是很有感触的,就是那些看上去很简单的正则表达式影响着几万条记录。

Evernote 里收集了不少关于正则表达式的文章,用到正则的时候也都是现学现卖,分享给有兴趣研究和实践的同学:《EditPlus常用正则表达式》、《正则表达式30分钟入门教程》、《正则表达式速查表》《正则表达式速查》。

--「壹页单章」会员计划 --

Comments
Write a Comment