はじめに
Windows版gVim1のフォントに、英数字にはConsolas、日本語などその他の文字にはメイリオを使いたい。しかし、Windows版gVimのフォント(guifont
, guifontwide
)にはプロポーショナルフォントを指定することができないため、プロポーショナルフォントであるメイリオを指定することができない。メイリオの代わりにMeiryoKeを使えば目的は達成できるが、フォントファイルの改変にはライセンス上の問題がある。
そこで、MeiryoKeは使わず、gVim側でどうにかすることにした。
結論
FEAT_PROPORTIONAL_FONTS
を有効にしてgVimをビルドすればよい。フォントが等幅かどうかのチェックが行われなくなる。
手順
Kaoriya版のgvim.exe
を置き換える形にする。そのため、あらかじめKaoriya版(g)Vimは使えているものとする。
ビルド環境はVisual Studioがインストールされていてnmake
, rc
等にパスが通っていればよい。この記事ではVisual Studio 2019の"x64 Native Tools Command Prompt for VS 2019"を使っている。
パスやパッチのあて方は環境に合わせて適宜読み替えてほしい。
vimのソースコードを入手
Kaoriya版パッチをあてるために少し前のバージョンに戻す。現在リリースされているKaoriya版ビルドは8.1.1048 (b45125
)なので、そのコミットをチェックアウトする。
d:\work>git clone https://github.com/vim/vim.git
d:\work>cd vim
d:\work\vim>git checkout b45125
Kaoriya版vim相当にする
パッチはKaoriya版のpatch
フォルダに入っている*.diff
を使わせていただく。今回はGit for Windows (msys2)のpatch
を使用した。パッチのうち0001-rich_icon.diff
は適用できなかったのでスキップした。
$ cd /d/work/vim
$ patch -p 1 < /d/work/vim81-kaoriya-win64/patch/0000-kaoriya_marks.diff
:
:
このままビルドしても起動できないので、vim
を使って必要なファイルを更新する2。
d:\work\vim>cd src
d:\work\vim\src>d:\work\vim81-kaoriya-win64\vim.exe -u NONE -i NONE -X -S create_cmdidxs.vim
ビルド
基本的にvim-jpの説明の通りだが、nmake
時にDEFINES=-DFEAT_PROPORTIONAL_FONTS
を指定する。
なお、8.1.1048時点ではICONV=yes
がデフォルト、MBYTE
は常時有効になったため廃止されているので、これらは指定しなくてよいはずだ。
今回はとりあえずConsolas+メイリオさえできればよかったので、LuaやPythonなどは指定していない。
d:\work\vim\src>nmake -f Make_mvc.mak GUI=yes IME=yes DEBUG=no DEFINES=-DFEAT_PROPORTIONAL_FONTS
src
フォルダにgvim.exe
が生成されるので、これをKaoriya版gvim.exe
と差し替える。
また、Kaoriya版のswitches\catalog\utf-8.vim
をswitches\enabled\utf-8.vim
に移動する。
gvimrc
.gvimrc
などgVimが読み込む設定ファイルに以下のように記述する(renderoptions
を設定しない場合は表示上のゴミが発生したりベースラインより下が欠けたりするが、設定するとフォントによってはベースラインの位置が上にずれてしまう)。
"set renderoptions=type:directxset ambiwidth=double
set guifont=Consolas:h14
set guifontwide=メイリオ:h14
さいごに
この方法が通用するのは、メイリオのような非ASCII文字が実際には等幅となっているフォントのみであるので、すべてのフォントについてこの方法で正しく描画できるとは限らない。とはいえたいていの日本語フォントは等幅であると思われる。
Consolas+メイリオ以外のサンプル
ミンニアム (メイリオ日本語部分と同じデザイナーによる明朝体風フォント)