1
- *autocmd.txt* For Vim バージョン 8.0 . Last change: 2017 Jan 14
1
+ *autocmd.txt* For Vim バージョン 8.1 . Last change: 2018 May 03
2
2
3
3
4
4
VIMリファレンスマニュアル by Bram Moolenaar
5
5
6
6
7
- 自動コマンド *autocommand*
7
+ 自動コマンド *autocommand* *autocommands *
8
8
9
9
基本的な説明については、ユーザーマニュアルの | 40.3 | 章を参照。
10
10
21
21
11.自動コマンドを無効にする | autocmd-disable |
22
22
23
23
{Vi にはこれらのコマンドはない}
24
- {only: | +autocmd | の機能は、コンパイル時に有効にされていなければ使えない。}
25
24
26
25
==============================================================================
27
26
1. はじめに *autocmd-intro*
33
32
ることができる。圧縮ファイルを編集するといったような機能だ (| gzip-example | を
34
33
参照)。こういった自動コマンドはファイル .vimrc かファイル .exrc に書き込む。
35
34
36
- *E203* *E204* *E143* *E855* *E937*
35
+ *E203* *E204* *E143* *E855* *E937* *E952 *
37
36
警告: 自動コマンドは大変強力であるので、思いも寄らない副作用をもたらすことがあ
38
37
る。テキストを壊さないように注意しなければならない。
39
38
- 捨ててもよいようなファイルのコピーに対して、最初にテストしておくのがよい。例
56
55
{pat} | autocmd-patterns | に一致するファイルで、{event}
57
56
のときに自動的に実行するコマンドのリストに、{cmd} を加
58
57
える。
58
+ Note: クォートは :autocmd への引数と見なされ、コメント
59
+ を開始しない。
59
60
{cmd} は常に既存の自動コマンドの後に追加されるので、
60
61
自動コマンドは指定された順に実行される。 [nested] につ
61
62
いては| autocmd-nested | を参照。
@@ -67,7 +68,14 @@ Note: '|' が {cmd} の前にある場合、":autocmd" コマンドの後には
67
68
けることができる。これは動作する: >
68
69
:augroup mine | au! BufRead | augroup END
69
70
しかし、これは定義されたコマンドの一部として "augroup" を見る: >
71
+ :augroup mine | au! BufRead * | augroup END
70
72
:augroup mine | au BufRead * set tw=70 | augroup END
73
+ 代わりにグループ名をコマンドの中に置くことができる: >
74
+ :au! mine BufRead *
75
+ :au mine BufRead * set tw=70
76
+ もしくは `:execute ` を使用する: >
77
+ :augroup mine | exe "au! BufRead *" | augroup END
78
+ :augroup mine | exe "au BufRead * set tw=70" | augroup END
71
79
72
80
Note ":autocmd" の引数の中の特別な文字 (例えば "%" や "<cword> " 等) は、
73
81
自動コマンドが定義されたときに展開されるのではなく、イベントの発生が認識され、
@@ -83,7 +91,8 @@ Note ":autocmd" の引数の中の特別な文字 (例えば "%" や "<cword>"
83
91
れを避けるには、グループ内に自動コマンドを定義することで、簡単にクリアできる:
84
92
>
85
93
augroup vimrc
86
- autocmd! " 「全ての」vimrcの自動コマンドを削除する
94
+ " 「全ての」vimrcの自動コマンドを削除する
95
+ autocmd!
87
96
au BufNewFile,BufRead *.html so <sfile>:h/html.vim
88
97
augroup END
89
98
@@ -140,6 +149,8 @@ Note [group] はあらかじめ定義されていなければならないこと
140
149
イトなどを壊すことがある。
141
150
142
151
:au[tocmd]! [group] 「全ての」自動コマンドを除去する。
152
+ Note: クォートは :autocmd への引数と見なされ、コメント
153
+ を開始しない。
143
154
警告: 通常はグループなしでこれを行うべきではない。プラ
144
155
グインや構文の強調表示などが壊れる。
145
156
@@ -258,6 +269,7 @@ Vimは以下のイベントを認識する。イベント名が大文字か小
258
269
| BufCreate | バッファリストにバッファを追加した直後
259
270
| BufDelete | バッファリストからバッファを削除する前
260
271
| BufWipeout | 完全にバッファを削除する前
272
+ | TerminalOpen | 端末バッファが生成された後
261
273
262
274
| BufFilePre | カレントバッファの名前を変える前
263
275
| BufFilePost | カレントバッファの名前を変えた後
@@ -286,7 +298,8 @@ Vimは以下のイベントを認識する。イベント名が大文字か小
286
298
| GUIFailed | GUIの起動が失敗した後
287
299
| TermResponse | | t_RV | に対する端末の反応を受け取った後
288
300
289
- | QuitPre | `:quit ` を使ったとき、本当に閉じるか決定する前
301
+ | QuitPre | `:quit ` を使ったとき、本当に終了するか決定する前
302
+ | ExitPre | Vimを終了するコマンドを使ったとき
290
303
| VimLeavePre | Vimを終了する前、viminfoファイルを書き出す前
291
304
| VimLeave | Vimを終了する前、viminfoファイルを書き出した後
292
305
@@ -295,6 +308,8 @@ Vimは以下のイベントを認識する。イベント名が大文字か小
295
308
| FileChangedShellPost | 編集を始めた後にファイルが変更されたことに対処した後
296
309
| FileChangedRO | 読み込み専用ファイルに対して最初に変更を加える前
297
310
311
+ | DirChanged | 作業ディレクトリが変更された後
312
+
298
313
| ShellCmdPost | シェルコマンドを実行した後
299
314
| ShellFilterPost | シェルコマンドでフィルタをかけた後
300
315
@@ -324,15 +339,24 @@ Vimは以下のイベントを認識する。イベント名が大文字か小
324
339
| CmdwinEnter | コマンドラインウィンドウに入った後
325
340
| CmdwinLeave | コマンドラインウィンドウから離れる前
326
341
342
+ | CmdlineChanged | コマンドラインのテキストに変更が加えられた後
343
+ | CmdlineEnter | カーソルがコマンドラインに移動した後
344
+ | CmdlineLeave | カーソルがコマンドラインを離れる前
345
+
327
346
| InsertEnter | 挿入モードを開始したとき
328
347
| InsertChange | 挿入や置換モードで<Insert> をタイプしたとき
329
348
| InsertLeave | 挿入モードを抜けるとき
330
349
| InsertCharPre | 挿入モードで文字が入力されたとき、その文字が挿入される
331
350
前
332
351
333
352
| TextChanged | ノーマルモードでテキストが変更された後
334
- | TextChangedI | 挿入モードでテキストが変更された後
353
+ | TextChangedI | ポップアップメニューが表示されていないときに、挿入モー
354
+ ドでテキストが変更された後
355
+ | TextChangedP | ポップアップメニューが表示されているときに、挿入モード
356
+ でテキストが変更された後
357
+ | TextYankPost | テキストがヤンクもしくは削除された後
335
358
359
+ | ColorSchemePre | カラースキームを読み込む前
336
360
| ColorScheme | カラースキームを読み込んだ後
337
361
338
362
| RemoteReply | Vimサーバーからの返答を受け取ったとき
@@ -455,6 +479,10 @@ BufWinEnter バッファがウィンドウ内に表示された後。これは
455
479
まま使われるためである。しかし、カレントバッファ
456
480
の名前を指定して ":split" をすると、そのバッファ
457
481
を再読み込みすることになるので、発生する。
482
+ 端末ウィンドウでは発生しない。何故なら端末ジョ
483
+ ブモードで開始され、ノーマルモードコマンドは機
484
+ 能しないからである。代わりに | TerminalOpen | を
485
+ 使用すること。
458
486
*BufWinLeave*
459
487
BufWinLeave バッファがウィンドウから取り除かれる前。そのバッ
460
488
ファが別のウィンドウ内で表示中ならば発生しない。
@@ -505,6 +533,28 @@ CmdUndefined ユーザー定義コマンドが使われたが、定義され
505
533
マンドを常に定義するようにしてそのコマンドから
506
534
autoload 関数を呼び出すようにするという方法も
507
535
ある。| autoload | 参照。
536
+ *CmdlineChanged*
537
+ CmdlineChanged コマンドラインのテキストに変更が加えられた後。
538
+ Vim が固まってしまう可能性があるので、コマンド
539
+ ラインで間違いを起こさないよう注意すること。
540
+ <afile> はコマンドラインの種類を示す 1 文字に
541
+ 設定される。
542
+ | cmdwin-char |
543
+ *CmdlineEnter*
544
+ CmdlineEnter ユーザーがコマンドを入力もしくは文字列を検索で
545
+ きるコマンドラインにカーソルが移動した後。
546
+ <afile> はコマンドラインの種類を示す 1 文字に
547
+ 設定される。
548
+ | cmdwin-char |
549
+ *CmdlineLeave*
550
+ CmdlineLeave カーソルがコマンドラインを離れる前。CTRL-C も
551
+ しくは <Esc> の入力によってコマンドラインを放
552
+ 棄する場合も同様。
553
+ コマンドの結果がエラーとなる場合は、コマンドラ
554
+ インは引き続き実行中となる。
555
+ <afile> はコマンドラインの種類を示す 1 文字に
556
+ 設定される。
557
+ | cmdwin-char |
508
558
*CmdwinEnter*
509
559
CmdwinEnter Command-lineウィンドウに入った後。この特殊な
510
560
ウィンドウに対してのみオプションを設定するのに
@@ -525,6 +575,12 @@ ColorScheme カラースキームを読み込んだ後。 |:colorscheme|
525
575
<afile> はこのオプションを設定したファイルの名
526
576
前になる。<amatch> はカラースキーム名になる。
527
577
578
+ *ColorSchemePre*
579
+ ColorSchemePre カラースキームを読み込む前。| :colorscheme |
580
+ あるカラースキームが読み込まれる前に、それ以前
581
+ に別のカラースキームによって追加されたものを取
582
+ り除くのに便利。
583
+
528
584
*CompleteDone*
529
585
CompleteDone 挿入モード補完が完了したとき。補完が実行されて
530
586
も中止されても発行される。 | ins-completion |
@@ -608,14 +664,33 @@ FileChangedRO 読み込み専用ファイルに最初の変更を加える前
608
664
*E881*
609
665
行数が変化した場合 undo のための保存は失敗し、
610
666
その変更は中止されるだろう。
667
+ *DirChanged*
668
+ DirChanged | :cd | もしくは | :lcd | コマンドによって、もしく
669
+ は 'autochdir' オプションの結果として作業ディ
670
+ レクトリが変更された後。
671
+ パターンは以下のようになる:
672
+ "window" `:lcd ` により発生する
673
+ "global" `:cd ` により発生する
674
+ "auto" 'autochdir' により発生する
675
+ "drop" ファイルの編集により発生する
676
+ <afile> は新ディレクトリ名に設定される。
677
+ *ExitPre*
678
+ ExitPre Vim を終了させる `:quit ` , `:wq ` もしくは
679
+ `:qall ` を使用したときで、| QuitPre | の直後。不
680
+ 必要なウィンドウを閉じるのに使うことができる。
681
+ 自動的に保存されない変更済みのバッファがある場
682
+ 合には、終了はまだキャンセルされる可能性があ
683
+ る。本当に終了するときのためには | VimLeavePre |
684
+ を使用すること。
611
685
*FileChangedShell*
612
686
FileChangedShell ファイルのタイムスタンプが、ファイルの編集が始
613
687
まってから変更されたことを発見したとき。
614
688
ファイルの属性やファイルサイズが変更されたとき
615
689
にも使われる。| timestamp |
616
690
大抵はシェルコマンドの実行後に発生する。またコ
617
- マンド | :checktime | の実行後や、Vimが入力フォー
618
- カスを一度失い、再び得たときにも発生する。
691
+ マンド | :checktime | の実行後や、gvimが入力
692
+ フォーカスを一度失い、再び得たときにも発生す
693
+ る。
619
694
このイベントは変更されたファイルそれぞれに対し
620
695
て発生する。オプション 'autoread' がオンであり、
621
696
かつバッファが変更されていないときには使われな
@@ -656,7 +731,8 @@ FileType オプション 'filetype' が設定されたとき。
656
731
パターンはファイルタイプに対して照合される。
657
732
<afile> は 'filetype' が設定されたファイルの名
658
733
前として使える。<amatch> は 'filetype' の新し
659
- い値として使える。
734
+ い値として使える。他のウィンドウもしくはバッ
735
+ ファへの移動は許されていない。
660
736
| filetypes | を参照。
661
737
*FileWriteCmd*
662
738
FileWriteCmd バッファ全体を書き込まない場合の、ファイルに書
@@ -733,7 +809,8 @@ InsertCharPre 挿入モードで文字が入力されたとき、その文字
733
809
ま (literally) 挿入される。
734
810
テキストを変更することはできない | textlock | 。
735
811
このイベントは 'paste' がオンに設定されている
736
- ときは発行されない。
812
+ ときは発行されない。{+eval 機能が有効な場合の
813
+ み}
737
814
*InsertEnter*
738
815
InsertEnter 挿入モード・置換モード・仮想置換モードを開始す
739
816
る直前。変数| v:insertmode | がモードを示す。
@@ -804,6 +881,7 @@ QuitPre `:quit`, `:wq`, `:qall` を使ったとき、カレント
804
881
定する前に発行される。例えば、普通のウィンドウ
805
882
がカレントウィンドウだけだったときに、他の余分
806
883
なウィンドウを閉じることができる。
884
+ | ExitPre | も参照。
807
885
*RemoteReply*
808
886
RemoteReply サーバーとして働くVimからの応答を受け取ったとき
809
887
| server2client() | 。パターンは{serverid} に対し
@@ -875,7 +953,7 @@ SwapExists ファイルの編集を始めようとしてスワップファイ
875
953
*E812*
876
954
ここでは他のバッファに切り替えること、バッファ
877
955
名を変更すること、ディレクトリを変更することは
878
- 許可されていない。
956
+ 許可されていない。{+eval 機能が有効な場合のみ}
879
957
*Syntax*
880
958
Syntax オプション 'syntax' が設定されたとき。
881
959
パターンは構文名に対して照合される。
@@ -900,6 +978,11 @@ TermChanged オプション 'term' を変更した後。色やフォント等
900
978
ターミナル依存の設定を更新するために構文定義ファ
901
979
イルを再読み込みするのに便利である。読み込まれ
902
980
たバッファ全てで発生する。
981
+ *TerminalOpen*
982
+ TerminalOpen `:terminal ` もしくは | term_start() | により端末
983
+ バッファが生成された直後。このイベントは、
984
+ ++hidden オプションによってウィンドウなしに
985
+ バッファが生成された場合でも発生する。
903
986
*TermResponse*
904
987
TermResponse | t_RV | に対する応答をターミナルから受け取った
905
988
とき。Vim変数 | v:termresponse | の値を使って、
@@ -922,10 +1005,36 @@ TextChangedI 挿入モードでカレントバッファのテキストが変
922
1005
ポップアップメニューが表示されているときは発生
923
1006
しない。
924
1007
他は TextChanged と同じ。
1008
+ *TextChangedP*
1009
+ TextChangedP 挿入モードでカレントバッファのテキストに変更が
1010
+ 加えられた後で、ポップアップメニューが表示され
1011
+ ている場合に限られる。そうでなければ
1012
+ TextChanged と同じ。
1013
+ *TextYankPost*
1014
+ TextYankPost カレントバッファでテキストがヤンクもしくは削除
1015
+ された後。| v:event | の以下の値は、この autocmd
1016
+ を発生させた操作を特定するのに使用できる:
1017
+ operator オペレーションが実行された。
1018
+ regcontents 行のリストとしてレジスタに格納
1019
+ されたテキスト、例: >
1020
+ getreg(r, 1, 1)
1021
+ < regname レジスタの名前、もしくは無名レ
1022
+ ジスタの場合は空文字列。
1023
+ regtype レジスタの種類、| getregtype() |
1024
+ を参照。
1025
+ | quote_ | が使用された場合、もしくは再帰的に呼
1026
+ び出された場合には発生しない。
1027
+ バッファのテキストを変更することは許されていな
1028
+ い、| textlock | を参照。
1029
+ {+eval 機能付きでコンパイルされた場合のみ有効}
925
1030
*User*
926
1031
User 自動的に実行されることはない。コマンド
927
1032
":doautocmd" によってのみ実行される
928
1033
自動コマンドのために使用される。
1034
+ Note: 該当する自動コマンドが存在しないときに
1035
+ `:doautocmd User MyEvent` が使用された場合、エ
1036
+ ラーが発生する。これを回避したい場合、ダミーの
1037
+ 自動コマンドを自身で定義すること。
929
1038
*UserGettingBored*
930
1039
UserGettingBored ユーザーが同じキーを 42 回押したとき。
931
1040
ただの冗談! :-)
@@ -969,9 +1078,10 @@ WinEnter 別のウィンドウに入った後。Vimの開始直後、1個目
969
1078
ウの高さを設定するのに便利である。
970
1079
そのウィンドウで他のバッファを開いていたときは、
971
1080
イベント WinEnter の後に BufEnter が発生する。
972
- Note: ":split fname" を実行したとき、WinEnter
973
- が発生するのは、ウィンドウ分割の後だがファイル
974
- "fname" が読み込まれる前の時点である。
1081
+ Note: split と tabpage コマンドに関しては、
1082
+ WinEnter イベントが発生するのは分割もしくはタ
1083
+ ブコマンドの後だが、ファイルが読み込まれる前で
1084
+ ある。
975
1085
*WinLeave*
976
1086
WinLeave ウィンドウを離れる前。次に入るウィンドウで他の
977
1087
バッファを開いていたときは、イベント WinLeave
0 commit comments