.vimrcに書くべきでないVimの設定項目 (Vim Advent Calendar 2012, 165日目)

Vim Advent Calendar の165日目の記事です。

前回の記事はthincaさんの同一視されるキーに注意でした。

Vimの設定ファイルをGitHub等のリモートリポジトリで管理すれば、新しい環境にVimをインストールする際手間が省けます。 便利な反面「リモートで管理できる設定」と「ローカルで行うべき設定」を正しく区別しないと、 むしろセキュリティなどの面で問題が生じかねません。 今回はリモートリポジトリで共有する汎用の .vimrc と、ローカルな設定ファイル vimrc_local についての意見を書きます。

vimrc_localの読み込み

まず vimrc_local を読み込む方法について説明します。 .vimrc の最後に以下のように書き加えます。

if filereadable(expand($HOME.'/.localsetting/vimrc_local'))
  source $HOME/.localsetting/vimrc_local
endif

こうすればローカルな設定ファイル $HOME/.localsetting/vimrc_local が読み込まれます。 僕はこの $HOME/.localsetting ディレクトリに他のアプリケーション(zsh等)のローカルな設定ファイルもまとめて置いています。

vimrc_localを読み込むためのプラグインはいろいろあります。

わざわざプラグイン入れるほどの大仰な話じゃない気もしますが。。。

2013/5/15 訂正: thincaさんのプラグインはむしろ 「プロジェクト毎に別のlocalrc.vimを読む」ためのもので、 今回話題にしている「マシン毎に別のvimrc_localを読む」こととは関係ありませんでした。

さて次に、具体的にどのような設定をvimrc_localに書くべきか考えるわけですが、 その前に、そもそも.vimrcで行うべき設定とは何なのか考えてみます。

.vimrcに書くべき設定

普通の設定

set autoindent のような普通の設定は、もちろん共有用の.vimrc に書くべきです。 プラグインの設定についても、基本的には.vimrcに書くべきだと思います。

OSで分岐できる設定

環境依存に見える設定でも、Windows/Linux/Mac/Cygwin等のOSで分岐できる内容なら、 .vimrcに以下のように記述することで設定できます。

if has("mac")
" mac用の設定
elseif has("unix")
" unix固有の設定
elseif has("win64")
" 64bit_windows固有の設定
elseif has("win32unix")
" Cygwin固有の設定
elseif has("win32")
" 32bit_windows固有の設定
endif

if has()についてはhelp hasを参照しましょう。かなり細かい分岐までサポートされています。 この条件式にはいくつかハマりどころがあって、たとえばwin32より先にwin64を設定しないと、 64bit_windowsの環境でもwin32用設定が読み込まれたり。。。

Vimのバージョンで分岐できる設定

たとえばset relativenumber はVim7.3で実装されたので、Vim7.2では使用できません。 こういうのも.vimrcでif文を使えば分岐できます

if v:version >= 703
  set relativenumber
else
  set number
endif

if文で分岐できないような設定については、いよいよvimrc_localの出番です。

vimrc_localで行うべき設定について

OSやバージョンの違いによって識別できないような、つまりマシンごとに異なる問題については、 そのマシン専用のローカルな設定ファイルを作って対処せねばなりません。 具体的にどのような設定をvimrc_localに書くべきか見てみます。

フォントの設定

詳細:Gvimのフォント設定に関するまとめ

どのフォントが入ってるか、環境によって随分異なります。 Windowsの場合はプリインストールのフォントがほぼ決まっていますが、 Linuxの場合はディストリビューションによって異なります。 Linuxのディストリビューションによってはアンダースコアが表示されない 等の問題もあります。 こういう問題は個別に対処せねばなりません。 .vimrcの最後で.vimrc_localを読み込むように設定しておいて、.vimrcに予めデフォルトのフォント設定を書いておいて、 それで問題が生じれば .vimrc_local で設定を上書きする、という方法が良いと思います。

他のアプリケーションとの連携に関する設定

LaTeXのコンパイルの設定とか。 外部アプリケーションとの連携の設定とか。 どのアプリケーションが入ってるかはマシンによって異なるし、 最適な設定もマシン毎に異なるでしょう。 .vimrcに「Vim」の設定以外のことは書きたくないなぁと個人的に思うのです(宗教臭いですね)。

その他

一時ファイル類の保存場所やセキュリティに絡んだ部分などが挙げられます。 まぁこのへんは各人の思想による振れ幅が大きそうですね。

「これはローカルな設定か?」を意識することで、汎用性の高い.vimrcになります。 もちろん vimrc_local の使用は最小限に控えるべきですが。