【一人 vimrc advent calendar 2017】:set と :setlocal の違い【14日目】

一人 vimrc advent calendar 2017 14日目の記事になります。

:set:setlocal の違い

:set:setlocalVim のオプションを設定するためのコマンドです。
:set はグローバルなオプションを設定するのに対して、 :setlocal はカレントバッファ/ウィンドウに対してローカルな値を設定します。
ただし、オプションによってはグローバルな値しか設定できないオプションもあるので注意する必要があります(その場合 :setlocal で設定してもエラーなどは出ない。
ちなみに vimrcスクリプトファイルのトップレベルとかで :setlocal を行っても『そのファイルを開いた時の設定』とかになるわけではないので注意してください。

:set:setlocal を行うタイミング

:set はグローバルなオプションに対して設定を行なうので vimrc で記述する事が一般的です。
逆に :setlocal はローカルなオプションに対する設定なのでコマンドラインから設定したり『特定のバッファを読み込んだ場合』などに設定することが多いです。
具体的に言えば autocmd FileType で『任意の言語に対する設定』とかですかね。

" C++ の場合のみバッファの設定を変える
autocmd FileType cpp setlocal matchpairs+=<:>

インデントのように言語によって設定を変える必要があるオプションは :setlocal を使うとよいでしょう。

まとめ

  • :set はグローバルなオプションに対して設定
  • :setlocal はカレントバッファ/ウィンドウに対する設定
  • オプションによってはグローバルな設定しかできないものもある
  • どこでオプションを設定するのかを意識する


そのバッファでのみ設定を行いたい場合は :setlocal を使いましょう。