formatoptionsの件,一応確認した過程メモ

$HOME/.vim/after/ftpluginは,システムのftpluginを丸々読み替えるのではなく,
上書きするかどうかの確認過程.


システムのc.vimには,わたしが分かる範囲で試せるオプションがなかったのでvim.vimを使用しました.
システムのvim.vimには次の2つの設定があります.

setlocal fo-=t fo+=croql

(snip)

if &tw == 0
  setlocal tw=78
endif

これを使って,

  • formatoptionsはafterで上書きされる
  • textwidthはこれを引き継ぐ

かどうかを調べます.上記のようになれば確認されたことになります.


まず,初期状態の確認です.
$HOME/.vim/after/ftplugin/vim.vimは空のファイル(というか無い).
この状態で("vim"の付かないファイル名として)fooを編集したときの

verbose setlocal fo?と
verbose setlocal tw?の結果は,
  formatoptions=tcq
        Last set from ~/.vimrc
  textwidth=0
        Last set from ~/.vimrc

となり,foo.vimでは,

  formatoptions=croql
        Last set from /usr/share/vim/vim72_gui/ftplugin/vim.vim
  textwidth=78
        Last set from /usr/share/vim/vim72_gui/ftplugin/vim.vim

となりました.


では,$HOME/.vim/after/ftplugin/vim.vim

setlocal fo-=ro

と書いてみることにします.
同じくfoo,foo.vimそれぞれについて各オプションを確認してみます.
まず,foo.

  formatoptions=tcq
        Last set from ~/.vimrc
  textwidth=0
        Last set from ~/.vimrc

となり,foo.vimでは,

  formatoptions=cql
        Last set from ~/.vim/after/ftplugin/vim.vim
  textwidth=78
        Last set from /usr/share/vim/vim72_gui/ftplugin/vim.vim

となりました.


確かに$HOME/.vim/after/ftplugin/vim.vimに書いたオプションのみが上書きされることが確認できました.


しかし,*.cでは$HOME/.vimrcよりシステムのftplugin/c.vimの方が強い.
一般ユーザが,オプションの値をどうしても変えたい場合には,
~/.vim/after/ftplugin/c.vimに設定を書かないとなりません.
どんなファイルタイプでも適用されるような設定はどこに書けばよいのでしょう.
.vimrcには書けないということになってしまった.
今回のようにformatoptionsにrとoが入っているのが,Cに関わらずわたしは好きではないので,
そのような設定ファイルに出会う度にafterにファイルを作らなければなりません...


# 今まで,.vimrcに書けばfoからroが外れたように感じましたが,
# vim72をカスタムしてインストールしてから,挙動が変わった気がするので
コンパイルまちがったかなあ...

:help startupに初期化時のロードされる順番が書いてあった.
.vimrcより$VIMRUNTIME/ftpluginが後に読み込まれる現在の状態が正しいらしい.