Vim のインデント幅

Python では公式にはインデント幅は 4 にすることになっているようだが、 個人的には 4文字幅は深過ぎると思っている。 真面目な(書き捨てでない)コードの場合、主要な部分はだいたいインデントの 3-4段目に来ることになる。つまり、

class CLASS:
  def __init__(self):
    if a:
      hogehoge    #(3段目)
      for i in b:
        hogehoge  #(4段目)

さてそうすると、4文字幅の場合、4段目のインデントでは無条件に 16文字分の領域が消費されてしまうことになる。 一行の文字数が約70文字しか無いのに、その 2割強があらかじめ使えないとなると、 コード記述の自由度が低く、窮屈である。 私はこの窮屈さが嫌いで、インデント幅を 2文字に減らして python コードを 書いてきた。別に書いたコードを PyPI に登録したりする訳でもないので、 個人の勝手の範囲である。

さて、さっき、 FreeBSD 上の vim で python コードを書こうとしたら、 自動インデントの幅がいつの間にか 4 になってしまっていて戸惑った。 色々調べてみたところ、先日、サーバ上で何かをアップデートした時に pkg の vim にアップグレードが掛かってしまい、 filetype 関係の 定義ファイルが書き変わってしまったようだ、と考えられた。 /usr/local/share/vim/vim74/ftplugin/python.vim に

" As suggested by PEP8.
setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=8

という行があり、おそらくこれがアップグレード時に追加されたのだろう。

この設定は ~/.vimrc の指定を上書きするらしく、~/.vimrc の中での 記述順を変えたりしても無駄であった。

ググってみたところ、~/.vim/indent/ にインデントに関する個人設定が 置けるようだったので、試しに ~/.vim/indent/python.vim に

setlocal shiftwidth=2

と指定したら、以前の通り、自動インデントが 2文字に戻ったのであった。