vim でコメントのオートインデントをしたくない

インデントは自分でするのに慣れてるので,.vimrc

set noautoindent

と書いているんですが,なぜかコメントを書くと次行もコメント行になってしまうのです(Ubuntu 8.10)。

// 適当にコメントを書いて,エンターキーを押すと
// ←勝手にコメント行になってしまう

とくに他所からコードをペーストするとほとんどコメント行になって困ったものでした((おかげさまで :set paste なる呪文を知ることができましたが。))。

んで,noautoindent なのにオートインデントになるのでなんでだろうと思っていろいろ調べたら,コメントの整形機能 のせいでした*1

つまり,(Ubuntuvim-full に含まれている)filetype plugin がコメント整形のためのオプションを設定していたみたいです。対象となるダミーファイルを拡張子つきで指定して vim を立ち上げ,

% vim test.js

:set comments とするとコメント整形まわりのオプションを表示することができます。


(システム環境をいじらないまま)単純に disable するには,たとえば

autocmd FileType * set comments=

などのように書けばいいんですが(([http://www.ac.cyberhome.ne.jp/~yakahaira/vimdoc/change.html#fo-table:title=formatoptions] を設定してもいいかもしれません。)),設定子をいろいろみていると3部コメントなる素敵な機能があるらしい。

3部コメントというのは,

/*   コメントを開始して改行を押すと
 *   ←継続行としてふさわしいコメントタグを挿入してくれる
 */  ←終了すると,コメントモードもおわる

みたいなやつのことです。

なににいらっとしていたかというと,// 〜 みたいに単行のコメントを入力しようとしているのに,勝手に次の行もコメントとしてみなされるところだったんですね。なのでこちらの3部コメントは残してもいいかもしんないです*2

なので,それようの .vimrc をでっちあげてみましたよ。

if has("autocmd")
  autocmd FileType *
  \ let &l:comments
        \=join(filter(split(&l:comments, ','), 'v:val =~ "^[sme]"'), ',')
endif

行分割をしてますが,autocmd のところは一行でいれてもかまいません。カンマが頻出するのでちょっと読みづらいのですが,ようするに s, m, e で始まる3部コメント以外のコメント識別オプションをフィルタアウトしているのです。


ただ3部コメントでもいきなり中間部分を入力してもコメント整形モードが開始してしまうがうっとおしいですね。これはオプションではどうしようもないのかなぁ。

*1:最初は [debian-users:48579] Re: Ecthのvimで、オートインデントをoffにしたいです のせいかと思いましたが,根本的な問題はそこではなかったのですね。

*2:外部からのペースト時に困りますが。