formatoptionsがうまく設定されない...?

ファイル名が*.cであると,croqlになる.
それ以外だとtcqになる.
だけど,ファイル名がc.vimだと,croqlになる.
ファイル名がそれ以外のc.fooや,c.tmpだと,tcqになる.

ちなみに,formatoptionsのデフォルト値は"tcq".


$VIMRUNTIME/ftplugin/c.vimには次のようにある.

" Set 'formatoptions' to break comment lines but not other lines,
" and insert the comment leader when hitting <CR> or using "o".
setlocal fo-=t fo+=croql

# $VIMRUNTIMEは/usr/share/vim/current
つまりこれは,*.cではじまるファイルに対しては
$VIMRUNTIME/ftplugin/c.vimの設定がロードされるということだろう.
これはファイルタイププラグインそのままだから,理解できる.


しかしこれは,$HOME/.vimrcに

set formatoptions-=r
set formatoptions-=o

と書いておいても同じ.
$HOME/.vim/ftplugin/c.vim(後の/home/XXX/.vim内のファイルに該当する)に

setl formatoptions-=ro

とか

setl formatoptions& formatoptions-=ro

と書いても同じ.
つまり$HOME/.vimrcで変更できないようだ.


echo &runtimepathは

/home/XXX/.vim,/usr/share/vim/current/vimfiles,/usr/share/vim/current,/usr/share/vim/current/vimfiles/after,/home/XXX/.vim/after

# XXXはわたしのユーザ名
となっている.
/home/XXX/.vimが入っているので,ftpluginの下の*.vimファイルは読み込まれるはず.
読み込まれる順番はどうなっているのだろう.


もしかしたら,/home/XXX/.vimが最初にあるのは問題かもしれない.
試しに最後に表示されている/home/XXX/.vim/after/ftplugin/c.vimを作り,このファイルに

setl formatoptions-=ro

と書いてみた.


すると,*.cでset &formatoptionsがcqlになった.
ということは,
多分&runtimepathは最初の見つかったものからロードされるのではなくて,
全部検索され,最後に見つかった設定になる.
ことになる.
つまり,上記の例で言うと

  1. /home/XXX/.vim
  2. /usr/share/vim/current
  3. /home/XXX/.vim/after

の順番で最後の設定が有効になることになる.
そして,$HOME/.vimrcに書かれた設定は,システムvimrcよりは後に有効にされるが,
/usr/share/vim/currentよりは前に位置する.


したがって,
$HOME/.vimrcの設定はシステムvimrcシステムのftpluginより弱いことになる
これは...違和感を感じる.


ちなみに:versionは次の通り.

system vimrc file: "$VIM/vimrc"
user vimrc file: "$HOME/.vimrc"
user exrc file: "$HOME/.exrc"
system gvimrc file: "$VIM/gvimrc"
user gvimrc file: "$HOME/.gvimrc"
system menu file: "$VIMRUNTIME/menu.vim"
fall-back for $VIM: "/etc"
f-b for $VIMRUNTIME: "/usr/share/vim/current"

gvimを使いたかったので,以前*1とは異なる.


また,この問題に悩まされるのか;

*1:id:pneumaster:20081202とid:pneumaster:20081213