【一人 vimrc advent calendar 2017】:set と :setlocal の違い【14日目】
一人 vimrc advent calendar 2017 14日目の記事になります。
:set
と :setlocal
の違い
:set
も :setlocal
も Vim のオプションを設定するためのコマンドです。
:set
はグローバルなオプションを設定するのに対して、 :setlocal
はカレントバッファ/ウィンドウに対してローカルな値を設定します。
ただし、オプションによってはグローバルな値しか設定できないオプションもあるので注意する必要があります(その場合 :setlocal
で設定してもエラーなどは出ない。
ちなみに vimrc
やスクリプトファイルのトップレベルとかで :setlocal
を行っても『そのファイルを開いた時の設定』とかになるわけではないので注意してください。
:set
と :setlocal
を行うタイミング
:set
はグローバルなオプションに対して設定を行なうので vimrc
で記述する事が一般的です。
逆に :setlocal
はローカルなオプションに対する設定なのでコマンドラインから設定したり『特定のバッファを読み込んだ場合』などに設定することが多いです。
具体的に言えば autocmd FileType
で『任意の言語に対する設定』とかですかね。
" C++ の場合のみバッファの設定を変える autocmd FileType cpp setlocal matchpairs+=<:>
インデントのように言語によって設定を変える必要があるオプションは :setlocal
を使うとよいでしょう。
まとめ
:set
はグローバルなオプションに対して設定:setlocal
はカレントバッファ/ウィンドウに対する設定- オプションによってはグローバルな設定しかできないものもある
- どこでオプションを設定するのかを意識する
そのバッファでのみ設定を行いたい場合は :setlocal
を使いましょう。