vimrc読書会で読まれてきました!細マッチョなvimrcへの道

2014-02-22

先日、「vimrc読書会」なる会で、Vimの設定ファイルであるところのvimrcを読まれてきました。

この記事は、Vim Advent Calendar 2013の84日目の記事です。昨日は、@manga_osyoさんによる「switch.vim で文字列リテラルを切り替える」。

VimやEmacsは、テキストエディタの中でもカスタマイズ性が異常に高いことで有名です。各人の設定ファイルにはそれぞれの性格が色濃く反映されますし、毎日コツコツ継ぎ足していくものですから、まさに「秘伝のタレ」のようなものです。

そんなvimrcのコードレビューをしてもらう機会なんて普通はないわけでして、とても貴重な体験でした。ちょうどよい機会なので、自分のvimrcの半生を振り返ってみます。

vimrcをポータブルにしたい

Vimにはじめて触れたのは数年前のこと。本格的に使うようになったのは、就職してからです。

職場ではWindowsとOS XをまたいでVimを使うことが多く、どの環境でも使える「ポータブル」なvimrcに興味を持ちはじめます。WindowsでもMacでも使えて、かつそのままLinuxなサーバーに持っていっても一発でセットアップできたら、きっとカッコイイだろうなぁ…と。

「ぼくのかんがえたさいきょうのvimrc」を目指して、この頃からGitHubでバージョン管理をはじめました。

ぼくのかんがえたさいきょうのvimrc

  • 無駄な設定がなく洗練されていること
  • マルチプラットフォームであること
  • 単一のファイルで完結すること
  • プラグインをインストールしない状態でも普通に使えること

一言で表すなら…「細マッチョ」ってところでしょうか。

vimrc読書会

あるとき、vimrc読書会なる会があることを知ります。

この会は、公開されているvimrcを酒の肴に、凄腕Vimmerたちがフルボッコにする、皆で議論してVim力を高めあう会です。

いつかここで読まれたときに、「指摘する箇所がまったくないわ…ブラボー!!!」みたいになる展開を夢みて、スキマ時間でリファクタリングを繰り返していきました。自分のvimrcはコンパクトさを保ちつつ、だんだんと筋肉質になっていきます。

その時は突然やってきた

そして、その時は突然やってきました。

vimrc読書会は、LingrというチャットサービスのVim部屋で、毎週土曜日に開催されています。

ログインせずにこっそり眺めることもできましたが(正直びびっていたし、心の準備もできていない!)、またとない貴重な機会なので、勇気を出してリアルタイムで参加してきました。

当日のvimrc読書会の様子は、2月8日分のログに残っています。

vimrc読書会の結果

自分のvimrcが、毎日お世話になっているプラグインの作者に読まれている…これはすごい体験です。めちゃくちゃ緊張しました。

ありがたいコメントの一覧は、chopというサービスで見られるようです。

「そのunite-outlineはメンテされていない」

unite-outlineは、unite.vimでアウトライン表示・選択を実現するプラグイン。Markdownで章構成を一覧したり、ソースコードでメソッドを一覧したりする目的で便利に使っています。

h1mesukeさんのunite-outlineは、もう長いことメンテナンスされていないようです。Shougoさんのものを使うのがよいということで、参照先のリポジトリを変更しました。

「autocmdがグループ化されていない」

autocmd を使うと、特定のファイルを読み込んだときや、特定のイベントが発生したときに実行するコマンドを定義できます。自分のvimrcでは、ファイルタイプに応じたインデント幅の設定などに利用しています。例えば…

autocmd FileType css setlocal sw=4 ts=4

このように書くと、ファイルタイプがcssになったときに、 setlocal sw=4 ts=4 (インデント幅を4に設定)を実行してくれます。

それで、この autocmd を何も考えずにそのまま定義してしまうと、プラグインなどが定義した他の autocmd と混ざり、どれがどれだか区別できなくなってしまいます。ここで登場するのが、 autocmd をグループ化する augroup

自動コマンドはグループにまとめることができる。これは一連の自動コマンドを取り除いたり実行したりする際に便利である。

autocmd をグループ化しておくと、例えば後でまとめて削除することも簡単。現時点で利用する予定がなくても、グループ化しておくほうがきれいなのです。

グループ化し忘れていた部分をいくつか指摘されたので、すべて augroup で囲っておきました。

「scriptencodingをutf-8にしたほうがよい」

自分の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は自ら手を上げてみるといいですよ!

書いている人:cocopon

Developer / Designer. Web / iOSなどのフロントエンドを主軸に、UIデザインから開発全般まで手がける。

趣味が高じて、ドット絵やジェネラティブアートが仕事になりつつある。