Home / Mac

TextMate 内的中文字符显示与输入

TextMate 是 Mac OS X 下著名的编辑器,相信很多看过 Ruby on Rails Screencast 的开发者都对它有深刻的印象 —— 流畅的生成固定格式代码(Snipper),方便的 Project 管理,以及像老牌编辑器 BBEdit 一样使用 unix 命令来过滤文本内容。但是 TextMate 对于在开发过程中使用中、日、韩文字的开发着来说却有一些麻烦。

  • 无法正确显示 CJK 字符
  • 无法正确输入 CJK 字符

好在 Hetima 提供了两种可以间接解决问题的办法:

显示 CJK 字符

大多数 CJK 字体都是 2 字宽,在 TextMate 下会和后边的 CJK 字符重叠在一起。(没有使用标准的 NSView?)对于这个问题 Hetima 提出了用 缩小日文字体宽度 的办法来解决,不过实际上最后的效果有点见仁见智。我照猫画虎的用中文字体做了一些实践,下面把大致的步骤写一下。

字体变形有许多选择:从超贵的 FontGrapher 到开放原始码的 FontForge,按照 Hetima 的介绍我们用 FontForge 就可以。用 FontForge 读取 .dfont 或者 .ttf 文件,然后用 Scale()MergeFonts() 方法来变形、合并字体。要注意的是 FontForge 需要 X11 环境的支持,如果你在安装 Mac OS X 的时候没有安装过,可以在第一张安装盘中的 Optional Install 中安装。脚本中使用了 2 款字体,都是可以在 Mac OS X 中找到的(/System/Library/Fonts/)。如果你想要“华文黑体”(STHei.ttf)而不是“黑体”(Hei.dfont),那你需要 动一点小手脚 —— STHei.ttf 受 FSType/2 保护,FontForge 在脚本中是动不到它的。当然你也可以用任意两种免费的中英文字体进行组合。

把 Hei.dfont 和 Monaco.dfont 两款字体复制到同一文件夹中,(比如 ~/tmfont/)然后建立文本文件 tmfont.pe:

#!/usr/local/bin/fontforge -script

#中文字体处理
Open("Hei.dfont"); #中文字体
SelectAll()
foreach
Scale(60, 100, 0, 0) #横0.6,纵1.0
endloop
Generate("temp.ttf", "", 0x14)
Close()

#Monaco 字体合并
Open("Monaco.dfont"); #英文字体
MergeFonts("temp.ttf");
SetFontNames("TextMate-Regular", "TextMate", "TextMate Regular", "Regular", "")
Generate("TextMate.ttf", "", 0x14)
Close()

这样就差不多了。开启 X11 环境(/Applications/Utilities/),在 term 中赋予 tmfont.pe 执行权限并执行:

chmod +x tmfont.pe ./tmfont.pe

之后,你应该能在目录下找到 TextMate.ttf,安装这个字体就可以啦。

CJK in TextMate
使用了自定义字体的 TextMate

输入 CJK 字符

相比显示 CJK 字符来说简单多了:下载安装 Hetima 的 CJK-Input.tmplugin。(Kudos to Hetima again.)

TextMate 的主页上称 TextMate 2.0 将使用 Leopard 中的 CoreText(也就是说想用 2.0 就必须要买 10.5 :-|),作者承诺届时 CJK 支持问题将得到彻底解决。 我在写代码的时候不常用到中文,也许写注释给别人看的时候会用到。虽然这个方法显示的文字略显小,不过聊胜于无,希望对同样使用 TextMate 的朋友有所帮助。

2 Comments

Gravatar

谢谢,终于搞定了,可以写中文注释了.

— znithy

Gravatar

[...] 使用难看的特制字体 [...]

Vim in Chinese « Mayrice Works

Post a comment

Comment Guidelines

  • We use Markdown here.
  • Have no more than 2 links.
  • Register Gravatar if you want an avatar displayed.