modelineを無視してfoldexprを使う
id:thincaさんの作ったfoldexprをさっそく使ってみました。
vim_fold.vim 作った - 永遠に未完成
vimスクリプト向けのftpluginで、イイ感じにfolding*1を作ってくれるftpluginです。
すばらしいのですが、自分の環境では.vimrcとvimスクリプトファイルに書かれたmodelineが邪魔をします。
以下はどう邪魔をするか、またそれをどう無効にしたかのまとめです。
時間がない人のために
これさえ.vimrcに書けば大丈夫です。
autocmd vimrc FileType vim setlocal nomodeline
それか、神経質な人は以下のようなafter/ftplugin/vim.vimを作ってください。
let s:save_cpo = &cpo set cpo&vim if exists('b:undo_ftplugin') let b:undo_ftplugin .= ' | ' else let b:undo_ftplugin = '' endif let b:undo_ftplugin .= 'setl modeline<' setlocal nomodeline let &cpo = s:save_cpo
after/ftplugin/vim.vim がわからない人のために
なぜafter/ftplugin/vim.vimはこんなに長いかというと
cpoptionsの保存/復元とb:undo_ftpluginのためです。
.vimrcに書けばcpoptionsに関しては大丈夫なのですが
なぜ大丈夫かはこちらのはっちゃけた記事を読んでください。
b:undo_ftpluginについては最初の例では省かれています。
なぜb:undo_ftpluginが必要かというと、
こちらの記事を参照してください。
ちなみに記事はyyyy年mm月dd日に公開予定です。
modelineがわからない人のために
自分の.vimrcには以下のようにmodelineが書かれています。
https://github.com/tyru/dotfiles/blob/8052db815b5fce2d1e81e79440417d5e0d79a4ca/dotfiles/.vimrc#L1
このmodelineはけっこういろんな人のvimスクリプトにあるはずで、
なぜかというとfen(foldenable)オプションとfdm(foldmethod)オプションを確実に設定させるためです。
設定なんて各人が適当に変えてる可能性があるので
foldmethodをセットして見た目を統一させようみたいな感じのアレです。
しかしthincaさんのプラグインも同じく
見た目を操作するものなのでバッティングしてしまいます。
この場合はmodelineの方が読み込まれるタイミングが後なので
modelineの設定がthincaさんのプラグインを上書きしてしまいます。
冒頭で言ったようにこのmodelineはvimスクリプトではよくあるので、
今から全部のmodelineを削除するなんてやってられません。
なら無視するようにしてしまいましょう。
というのが本記事の趣旨でした。
*1:厳密に言えばfoldingは+foldで作られた折り畳み、foldは+fold機能や折り畳むことそのものを指す語として自分は使っています