先日、「vimrc読書会」なる会で、Vimの設定ファイルであるところのvimrcを読まれてきました。
この記事は、Vim Advent Calendar 2013の84日目の記事です。昨日は、@manga_osyoさんによる「switch.vim で文字列リテラルを切り替える」。
VimやEmacsは、テキストエディタの中でもカスタマイズ性が異常に高いことで有名です。各人の設定ファイルにはそれぞれの性格が色濃く反映されますし、毎日コツコツ継ぎ足していくものですから、まさに「秘伝のタレ」のようなものです。
そんなvimrcのコードレビューをしてもらう機会なんて普通はないわけでして、とても貴重な体験でした。ちょうどよい機会なので、自分のvimrcの半生を振り返ってみます。
Vimにはじめて触れたのは数年前のこと。本格的に使うようになったのは、就職してからです。
職場ではWindowsとOS XをまたいでVimを使うことが多く、どの環境でも使える「ポータブル」なvimrcに興味を持ちはじめます。WindowsでもMacでも使えて、かつそのままLinuxなサーバーに持っていっても一発でセットアップできたら、きっとカッコイイだろうなぁ…と。
「ぼくのかんがえたさいきょうのvimrc」を目指して、この頃からGitHubでバージョン管理をはじめました。
一言で表すなら…「細マッチョ」ってところでしょうか。
あるとき、vimrc読書会なる会があることを知ります。
この会は、公開されているvimrcを酒の肴に、凄腕Vimmerたちがフルボッコにする、皆で議論してVim力を高めあう会です。
いつかここで読まれたときに、「指摘する箇所がまったくないわ…ブラボー!!!」みたいになる展開を夢みて、スキマ時間でリファクタリングを繰り返していきました。自分のvimrcはコンパクトさを保ちつつ、だんだんと筋肉質になっていきます。
そして、その時は突然やってきました。
#vimrc読書会 まであと10分!今回は @cocopon さんの vimrc です!会場→ http://t.co/6zfbsoXGNC
— thinca (@thinca) February 8, 2014
vimrc読書会は、LingrというチャットサービスのVim部屋で、毎週土曜日に開催されています。
ログインせずにこっそり眺めることもできましたが(正直びびっていたし、心の準備もできていない!)、またとない貴重な機会なので、勇気を出してリアルタイムで参加してきました。
当日のvimrc読書会の様子は、2月8日分のログに残っています。
自分のvimrcが、毎日お世話になっているプラグインの作者に読まれている…これはすごい体験です。めちゃくちゃ緊張しました。
ありがたいコメントの一覧は、chopというサービスで見られるようです。
unite-outlineは、unite.vimでアウトライン表示・選択を実現するプラグイン。Markdownで章構成を一覧したり、ソースコードでメソッドを一覧したりする目的で便利に使っています。
h1mesukeさんのunite-outlineは、もう長いことメンテナンスされていないようです。Shougoさんのものを使うのがよいということで、参照先のリポジトリを変更しました。
autocmd
を使うと、特定のファイルを読み込んだときや、特定のイベントが発生したときに実行するコマンドを定義できます。自分のvimrcでは、ファイルタイプに応じたインデント幅の設定などに利用しています。例えば…
autocmd FileType css setlocal sw=4 ts=4
このように書くと、ファイルタイプがcssになったときに、 setlocal sw=4 ts=4
(インデント幅を4に設定)を実行してくれます。
それで、この autocmd
を何も考えずにそのまま定義してしまうと、プラグインなどが定義した他の autocmd
と混ざり、どれがどれだか区別できなくなってしまいます。ここで登場するのが、 autocmd
をグループ化する augroup
。
自動コマンドはグループにまとめることができる。これは一連の自動コマンドを取り除いたり実行したりする際に便利である。
autocmd
をグループ化しておくと、例えば後でまとめて削除することも簡単。現時点で利用する予定がなくても、グループ化しておくほうがきれいなのです。
グループ化し忘れていた部分をいくつか指摘されたので、すべて augroup
で囲っておきました。
自分のvimrcでは、タブ文字や改行文字を可視化する listchars
にUTF-8な記号を設定しています。
set listchars=eol:¬,tab:▸\
環境によってはこれが文字化けを引き起こしてしまうらしく、UTF-8な文字を含むソースは先頭で scriptencoding
をUTF-8に設定しておいたほうがよいとのこと。
この際に気をつけなければならないのが、 encoding
設定との位置関係。
スクリプトで使われている文字コードを宣言する。それ以降の行は必要なら [encoding]から ‘encoding’ オプションの文字コードに変換される。
ヘルプによれば、 scriptencoding
を指定すると、その行以降が encoding
で指定された文字コードで解釈される可能性があります。 scriptencoding
を指定する前に encoding
を指定しておいたほうがよいでしょう。
正直、vimrcは磨ききった感もあったのですが、指摘ゼロ・100点満点はやっぱりむずかしいですね。それでも、Vim界のスーパーマンボウthincaさんからは「かなり綺麗に書かれていて、突っ込みポイントは多くなかった印象ですね」というコメントをいただきまして、小さくガッツポーズしました。
おそるおそる参加してみた結果、さいきょうのvimrcにまた一歩近づきました。vimrc読書会のページでは読みたいvimrcをリクエストできますので、さらに上を目指すVimmerは自ら手を上げてみるといいですよ!