如何在gvim windows上使用GNU Unifont或Free Mono字体?

8

我正在尝试在Windows 7的gvim中支持符文字符。 我已经在我的字体目录中安装了支持此范围的Free Mono和GNU Unifont字体,但它们不出现在字体菜单中,并且gvim对以下行给出无效字体消息:

set guifont=unifont:h12:cANSI
set guifont=GNU_Unifont:h12:cANSI
set guifont=Free_Mono:h12:cANSI
set guifont=Free_Monospaced:h12:cANSI
set guifont=FreeMono:h12:cANSI

etc...

我该如何让它起作用?我注意到这两个字体都属于"Medium"字体族,而Ubuntu Mono是标记为"Regular"的,这有什么区别吗?总体上,我在更改gvim字体方面并没有太多成功经验,即使是等宽字体也一样。

4个回答

5
你让我对为什么这个不起作用很好奇,所以我安装了fontforge来查看字体。结果证明了你关于字体本身有问题的说法是正确的:PANOSE proportion code 是“Even Width”(4),而不是“Monospaced”(9)。由于vim会过滤掉非等宽字体,这就解释了为什么它们不会出现在对话框中。
如果你感兴趣,我通过这位日本人准备的独立cygwin/X版本获得了Windows版的fontforge,可以参考这个页面上的英文讨论。安装完成后,打开字体并转到Element->Font Info->OS/2->Panose。
我尝试更改设置并保存文件,但是:1)保存的字体文件比原始文件大10倍,并且保存文件需要几分钟时间,因此可能出了些问题;2)Windows拒绝加载它,抱怨它不是有效的字体文件。 我已经到达好奇心的尽头,但也许您可以使其正常工作。

太棒了!谢谢。我一定会尝试的。 - xdhmoore
所以,经过3年,我终于回来尝试了一下。我不得不在字体编辑器中使用“生成字体”而不是“保存字体”。此外,我还必须关闭错误验证。但是,在保存为.ttf文件后,unifont字体可以正常工作!谢谢!Free Mono仍然无法正常工作,但无论如何,我现在可以在gvim中输入霍比特人的矮人符文了...:S - xdhmoore
另外,对于任何其他在尝试这个的人,我从PortableApps.com获取了FontForge。 - xdhmoore
我也成功地根据这里的指示修复了Free Mono,并通过在验证中检查BB-> Check Advance: 600选项来解决问题。 - xdhmoore

4
我最近也遇到了同样的问题,并用 fontforge 解决了它。以下是生成可工作的 unifontmono.ttf 字体的工作流程:
  1. 启动 fontforge 并打开 unifont.ttf 字体。在 Debian 上,此字体位于

/usr/share/fonts/truetype/unifont/unifont.ttf

  1. 转到 Element -> Font Info...
    • PS Names 下更改 FontnameFamily NameName for Humans,例如改为 UnifontMono
    • OS/2 -> Panose 下将 Proportion 更改为 Monospaced
  2. 点击 Save。在弹出窗口中选择 Change
  3. File -> Generate Fonts...。在左侧请求者中选择 TrueType,选择 No Bitmap Fonts,禁用 Validate Before Saving
  4. Save
这将保存一个 TTF 文件,您可以在 Windows 下安装。
要在 Windows 上使用 gvim 字体:
  1. 双击安装字体并选择 Install
  2. 以管理员身份启动 gvim

    • 转到 Edit -> Startup Settings
    • 添加以下行:

set guifont=UnifontMono:h12:cANSI

  1. 重新启动 gvim,它现在应该使用转换后的字体了。

如果您想在Windows的cmd.exe中使用此字体,您需要执行注册表技巧,并且在生成字体之前打开选项菜单并勾选“兼容Windows的'kern'”框。在我执行此操作之前,该字体无法正确显示。 - RivenSkaye

4

对于Win32、GTK、Motif、Mac OS和Photon:

:set guifont=* 

这将会弹出一个字体请求器,在其中你可以选择你想要的字体。

输入:set guifont?来获取设置,并将其放入你的.vimrc文件中。当你将其放入.vimrc文件时,如果有空格,你需要转义这些空格。例如,如果':set guifont?'输出'Gnu Unifont 10',则需要在.vimrc中设置为:

set guifont=Gnu\ Unifont\ 10

1
是的,我尝试过了,但这些字体没有出现在字体窗口中。根据https://dev59.com/gV3Va4cB1Zd3GeqPEuEa,我认为这可能与GNU Unifont和Free Mono可能不是100%准确的固定宽度有关?这只是一个猜测。或者标签不符合gvim的期望?或者可能需要后置字体?我只是在瞎猜。 - xdhmoore
任何系统安装的等宽字体都可以使用。你从哪里获取这些字体的?它们是TrueType变体吗? - David Pope
是的,它们都是TrueType字体。它们都安装在C:\Windows\Fonts中,并且在MS Word中工作正常。GNU Unifont来自http://www.unifoundry.com/unifont.html,Free Mono来自https://savannah.gnu.org/projects/freefont/。在这两种情况下,我都使用ttf版本。 - xdhmoore

2
问题在于Unifont声称是等宽字体,但包含双倍宽度字符(例如,组合的双波浪线U+0360)。根据Gvim使用的工具包不同,可能无法接受TTF字体,只能接受位图。因此,这就是答案。
位图(PCF)字体的解决方案
将字体复制到您拥有权限的目录中,并在Fontforge中打开它。
使用Ctrl+A选择所有元素(它们将被突出显示)。然后转到
工具栏 > 指标 > 设置宽度
将宽度设置为:8 {最初设置的数字的一半}
单击“确定”并等待,这需要一些时间。
操作完成后,
工具栏 > 元素 > 其他信息 > BDF信息
在字体字段中,将“Unifont”更改为“Unifix”(或其他您喜欢的名称)
向下滚动,单击“新建” > “FONT ASCENT”(数字会自动设置,请勿更改)
向下滚动,单击“新建” > “FONT DESCENT”(数字会自动设置,请勿更改)
单击“确定”
现在在“文件”菜单中保存BDF字体(Ctrl+Shift+G)。选择您喜欢的名称,但在其他情况下使用默认设置。

在Linux中为X11设置字体

我将假设您在上一步中将字体命名为unifix.bdf。退出Fontforge,返回终端并发出以下命令。
bdftopcf unifix.bdf > unifix.pcf
gzip unifix.pcf

此时,可以删除留下的两个PCF和BDF文件。现在选择一条路线。
  • With root permissions,

    mv unifix.pcf.gz /usr/share/fonts/X11/misc
    mkfontdir /usr/share/fonts/X11/misc
    xset fp rehash
    
  • If you don't have root permissions or prefer not to fuss with system-wide directories, in the home directory,

    mkdir .fonts
    mv unifix.pcf.gz .fonts
    mkfontdir .fonts
    xset +fp $HOME/.fonts/
    xset fp rehash
    

    The two Xset commands will need to be repeated after each reboot.

现在应列出字体为 xfontselxlsfonts,您最终可以通过 :set gfn=-*-unifix-* 在 Gvim 中使用它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接