Vimで折角tagsファイルを作成したドキュメントに色をつけたい!!


始めに

  • tagsファイルって何じゃそりゃって方はこの記事を見てみてください、もしかしたらわかるかもしれません(保証はしない)
  • この記事はまとめ編ではありません。結果どうしろっていうの、って方は一番下の結果までジャンプしてください
  • この記事では、ハイライトやカラースキームを作成するわけではありません。ご了承下さい。お寿司もください

動機

前回の記事のようにしてtagジャンプできるようになったはいいものの、現状としては全部同じ色で表示されており、どれがtagジャンプできんのかわかりづらい。
なので、:helpで表示すると使われているようなカラーリングが使いたいなって思ったのがきっかけ。

まず始めに

  • ハイライトの自動化はfiletypeに応じて行われる。
  • filetypeを調べるには:set filetype?を実行すれば良い
  • 逆にfiletypeを設定するには:set filetype=<filetype名>を実行すれば良い

以上のことを踏まえて、以下のことをしてみた

  1. :helpで表示されるファイルのfiletypeを調べる
  2. 自分のドキュメントのfiletypeをそれに合わせてみる
  3. 思った通りのハイライトが適応される!(はず)

1. :helpで表示されるファイルのfiletypeを調べる

これは簡単な話で、:set filetype?を実行すれば良い。
結果:

:set filetype?
> filetype=help

--> 求めているハイライトのfiletypehelpだということがわかった

2. 自分のドキュメントのfiletypeを合わせてみる

これも単純作業、ドキュメントを開いて:set filetype=help

--> おお、きちんと表示された!!

↑上段: 設定後
↓下段: 設定前

え、じゃあこれでよくね??
ところが

次なる課題: どうやってfiletypeを固定するのか

毎回毎回:set filetype ~とかやってるんじゃ効率悪いし何より配布とかもできない。
それは困る。
何とかして固定しなければならないわけで。

まず

  • 普段はfileの拡張子からfiletypeを判断をしている

ということから、とりあえず拡張子を.helpとかして見たが何も起こらず。
ちなみに:helpで表示されるヘルプページの拡張子は.txtであるがこれまた何も起こらず。
レッツgoogle!!

解決法: filetypeの固定 => modelineを使う!

が問題発生

結局、google先生に聞いてもよくわからなかったので素直に:help filetypeした。ええ、しましたとも。
そしたら*filetype*の欄の後ろの方に以下の記述があった。

If the file type is not detected automatically, or it finds the wrong type,
you can either set the 'filetype' option manually, or add a modeline to your
file.  Example, for an IDL file use the command: >
        :set filetype=idl

or add this |modeline| to the file:

/* vim: set filetype=idl : */ ~

どうやらmodefileとかいう機能を使うために、ファイルの中に/* vim: set filetype=<設定したいファイルタイプ> : */ ~と書けばいいようで。
今回は、設定したいfiletype=helpなのでidlhelpに書き換えてみる。
modelineが何なのかとか細けぇこた置いといて(=>help的なのはvimのmodelineオプションについて日本語で書いてみるをみてみてください)、説明の通りにやってみる。
どうやらファイルの最初or最後に書けばいいようで、とりあえずファイルの初めに置いてみる。
で、ファイルを一旦閉じて開き直す。

あれれ、色がついてない...
filetypeを確認するも、

:set filetype?
> filetype=text

とのことで変わっていない...

modelineを簡単に調べる

もうどうしようもないので:help modelineしまして。

The number of lines that are checked can be set with the 'modelines' option.                                                                                                                     
If 'modeline' is off or 'modelines' is 0 no lines are checked.

ふむ、どうやらmodelineがoffなのか、modelinesが0なのかが問題なようだ。
ちなみに最初modelinesについての記述に気がつかなくて1日ぐらい悩んだ

:set modeline?:set modelines?してそれぞれの値を見てみた。
するとどうだろう、modelineの方はonになっていたもののmodelinesが0になっていた。
つまり、modelineの機能自体はonになっていたものの、読み込む行数が0行だったので読み込まれていなかったということだ。わかりづれぇ

と、いうことで、:set modelines=5をしてみた。が、変わらない...
:set modelines=5をした後、一度開き直さなければいけないから、設定が変わってしまっているのかもしれない、ということで、
.vimrcにmodelines=5を書いてみた結果がこちら:

おお!!できた!!!

ということで、色がつきました、とさ。

(ちなみにこの後、/* vim: set filetype=help : */ ~はファイルの末尾に移動した。:helpで表示されるテキストも、modelineを末尾に書いてあることが多かったため。)


結果

  1. /* vim: set filetype=help : */ ~をファイルの先頭or末尾に置く
  2. :set modeline:set modelines=(0以外の数)vimreに書く