JavaScript のインデント定義ファイル for Vim

javascript indent in vim - gnarl、技術メモ<s>ho<marquee>ge’”¥ 」様より継承したものを自分好みにちょっと改造してみました。

主な変更点は、以下の通りです。(制約事項については「後書き」を参照)

1、式の途中での改行

演算子の後で改行するとインデントするようにしました。長い式を途中で改行した場合に継続行がインデントされます。

1 +
  2 +
  3;
baka;

演算子には「.」も含まれますので、メソッドチェーンの途中で改行した場合も同様にインデントされます。

aaa.bbb.
  ccc.ddd;
baka;
2、リスト途中での改行

関数の引数リストなど、「,」の後で改行するとインデントするようにしました。長いリストの途中で改行した場合に継続行がインデントされます。

aaa(bbb,
  ccc, 
  ddd);
baka;

[aaa, bbb,
  ccc, ddd];
baka;

{ aaa:1, bbb:1,
  ccc:1, ddd:1 };
baka;
ソース

.vim/indent/javascript.vim に入れると有効になります。*1


後書き

構文を認識せず、正規表現マッチによってインデントを上げ下げする、という牧歌的手法には自ずから限界があるため、コードの書き方あるいは内容によっては適切にインデントできない可能性があります。(というか、構文解析なしで完璧なインデントは無理)

また、{} なしの if/else/for については継承元と同じ制約(二段まで)があります。

期待した通りにインデントできない場合は適当に改造して下さい(;^ω^)
よいものができたら gist などに貼っておくと喜ぶ人がいるかも知れません。

*1:filetype indent on が必要です。