😀

Vimmerの人達が怖すぎてプルプルしても聞けないVimの設定 【autocmd】

2022/11/28に公開

時間があるときにエンジニアがやることといえば

  • 積んだゲームをひたすらやる
  • 見逃した映画をひたすら見る
  • 途方も無い距離自転車で漕いでみる
    • 俺だけか・・・・
  • dotfileを整理する
    • vimrcを整理する
    • vimrcを整理する
    • vimrcを整理する
    • vimrcを整理する

そうだ。vimrcを整理しよう

俺のvimrc見ろ的なやつを見て適当に今まで入れてたなんて・・・・・

口が裂けてもいえない(あ・・・・言っている・・・・)

環境

  • macosx10.11(El capitan)
    • Vim 7.4

参考にしたサイト

autocmdとは?

特定のイベント(ウィンドウを開いた時、INSERTモードに切り替えた時、INSERTモードから戻る時etc...)などで自動で処理を追加することができる。

特定のイベントの一覧はVim documentation: autocmdを参照してください。

## 基本的なautocmdの書き方のフォーマット

if has("autocmd")
  augroup {autocmdグループ名(任意の名前)}
    autocmd!
    autocmd {イベント1},{イベント2...(以下,イベント名で複数のイベントの追加が可能)} * {イベント発生時に行うこと}
  augroup END
endif " has("autocmd")

if has("autocmd")

その通りでvimにautocmdの機能があった場合実行する。
古いvimとかでautocmdがない場合で.vimrcの読込みでエラーにさせないため

augroup

おさらい autocmd/augroupで記載されている通りautocmdをグループ化するもの。

自分の任意のグループ名を記載する

autocmd!

以下Vim のカスタマイズ 〜autocmd で自動処理〜を参照で

autocmd にグループを指定しておくと、そのグループの autocmd をまとめて解除することが出来ます。これは、同じ autocmd が何度も繰り返し登録されるのを避けるのに使われます。
また、グループは、augroup コマンドにより、一括指定することも出来ます。
このグループ指定と、それを用いた事前一括解除を怠ると、.vimrc が複数回読み込まれた時に自動処理が何重にも登録されることになり、Vim が重くなったり、異常な動作をする原因になるので注意しましょう。

augroup!を入れておけば何重にもautocmdが登録されることはないらいしいので入れておこう。

autocmd {イベント1},{イベント2...(以下,イベント名で複数のイベントの追加が可能)} * {イベント発生時に行うこと}

ここにイベント発生時に実行したいことを記載する

例として、外部で変更のあったファイルを自動的に読み直すautocmdの場合はこんな感じ

  • checktimeはファイル(バッファ)の読み直しの時に実行するコマンド
" インサートモードに切り替わるとき、別のウィンドウに入った後にchecktimeを実行する
autocmd InsertEnter,WinEnter * checktime

外部で変更のあったファイルを自動的に読み直すautocmdの場合はこんな感じ

 ファイルの自動読み直しの設定でInsertモードに切り替わった時とウィンドウが移動した時にフ>ァイルを読み直すようにする
if has("autocmd")
  augroup vimrc-checktime
    autocmd!
    autocmd InsertEnter,WinEnter * checktime
  augroup END
endif " has("autocmd")

最後に

vimrcの設定でautocmdでなんじゃろ?ってやつの疑問が一つすっきりしたニャーー・・・・

Discussion