Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

Windows でのステータスライン用フォント

$
0
0

本記事は Vim Advent Calendar 2013の 132 日目です。
131 日目は @keizo_bookman さんによる、とあるvim宣教師の手記でした。

vim-airline 等ステータスライン系プラグインでは、フォントにパッチを当てることでステータスラインのデザインを更に良くする方法があります。
しかし Windows の定番フォント Consolas ではうまくパッチが当たらなかったり、そもそもパッチを当てるための環境 (fontforge) を用意するのが不便という事情がある為、別のアプローチでこれを行うというのが本記事の趣旨です。

パッチ用フォントの入手、インストール

まずはステータスライン表示用の文字のみが含まれた、パッチ用のフォントを入手します。これは powerline のリポジトリで配布されています。

https://github.com/Lokaltog/powerline/blob/develop/font/PowerlineSymbols.otf?raw=true

これを windows 用の truetype フォントに変換します。変換は Web サービスで行うのが手軽でしょう。調べればそれっぽいサービスがいくつか引っかかります。

http://www.freefontconverter.com/

作成した ttf フォントファイルをインストールします。

フォントリンク

作成したパッチ用のフォントを、対象のフォントに fontlink させます。
例えば Consolas で行う場合、レジストリの
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink
に複数行文字列として新たに Consolasという値を追加し、以下の値を書き込みます。

Consolas
PowerlineSymbols.ttf

他に日本語フォント等リンクさせている場合、一番上にパッチ用のフォントを追加します。

Consolas
PowerlineSymbols.ttfMEIRYO.TTC,Meiryo,128,85

ちなみにフォントリンクはリンクさせるフォントのサイズを調整することができます。ここで 85 となっている 4 つめの値を、128 を基準に小さくすれば リンクフォントが大きく、128 より大きくすればリンクフォントが小さくなります。3 つめの値も scaling factor に関係すると説明されているところが多いですが、これはおそらく font charset に関係する値のようなので日本語をリンクさせる場合は 128 を指定しておきます。

メリット・デメリット

Windows ではフォントのエイリアスがうまく表示されず、Inconsolata や Ricty などの他 OS での定番フォントが汚くなりがちですが、この方法だと Windows に最適化されている Consolas を用いる為レンダリングが綺麗です。
また、レジストリを操作する必要はありますが、引き換えにフォントにパッチを当てる必要がありません。

デメリットというより制限事項ですが、追加されたフォントのシンボルと隣の文字が続いて表示されているような箇所では、若干の隙間があるようです。カラースキームによってはこの隙間が見えやすかったり見えにくいことがあります。但しパッチを当てたフォントについてもシンボルとフォントのバランスが取れていなかったり、同様に隙間が見えることもあるようです。

おまけ

少し前に、Vim を VS2013 でビルドする記事を書きました (宣伝)。

http://qiita.com/s_of_p/items/fe522eb6b1d48b8b3885

VAC の記事ではありませんが、よければチェックしてみてください。

以上 Vim Advent Calendar 2013 132 日目の記事でした、次回は現在未定です。

参考

http://www.natzworks.com/digital/2010/454.html
http://msdn.microsoft.com/en-us/library/cc194829.aspx


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>