-
Notifications
You must be signed in to change notification settings - Fork 33
/
Copy pathautocmd.jax
2002 lines (1778 loc) · 103 KB
/
autocmd.jax
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
*autocmd.txt* For Vim バージョン 9.1. Last change: 2025 Mar 12
VIMリファレンスマニュアル by Bram Moolenaar
自動コマンド *autocommand* *autocommands*
基本的な説明については、ユーザーマニュアルの |40.3| 章を参照。
1. はじめに |autocmd-intro|
2. 自動コマンドの定義 |autocmd-define|
3. 自動コマンドの削除 |autocmd-remove|
4. 自動コマンドの列挙 |autocmd-list|
5. イベント |autocmd-events|
6. パターン |autocmd-patterns|
7. バッファローカルな自動コマンド |autocmd-buflocal|
8. グループ |autocmd-groups|
9. 自動コマンドの実行 |autocmd-execute|
10.自動コマンドの使用 |autocmd-use|
11.自動コマンドを無効にする |autocmd-disable|
==============================================================================
1. はじめに *autocmd-intro*
ファイルを読み込んだり書き込むときや、バッファやウィンドウに入ったり出たりし
たとき、あるいはVimを終了させるときに、コマンドを自動的に実行するように指定で
きる。例えば "*.c" にマッチするファイルに対して、オプション 'cindent' をオンに
する自動コマンドを作ることができる。また自動コマンドでさらに高度な機能を実装す
ることができる。圧縮ファイルを編集するといったような機能だ (|gzip-example| を
参照)。こういった自動コマンドはファイル .vimrc かファイル .exrc に書き込む。
*E203* *E204* *E143* *E855* *E937* *E952*
警告: 自動コマンドは大変強力であるので、思いも寄らない副作用をもたらすことがあ
る。テキストを壊さないように注意しなければならない。
- 捨ててもよいようなファイルのコピーに対して、最初にテストしておくのがよい。例
えば、ファイルの編集開始時にファイルを解凍する自動コマンドを使うときには、
書き込みするときに圧縮を行う自動コマンドが正しく働くか確かめること。
- 実行中のエラー (例えばディスクが満杯になる) に対して、対処の準備をしておかな
ければならない。バッファへの変更に対しては大抵アンドゥができるが、他のファイ
ルへの変更は、自分で処理しなければならないかもしれない (例えば、解凍された
ファイルを圧縮する、等)。
- もしイベント BufRead* の自動コマンドによって圧縮ファイルを編集できるなら、
FileRead* でも同じ事ができるようにするべきである (こうすることで復旧可能にな
る場合がたまにある)。可能であれば、イベント File* や Buf* には同じ自動コマン
ドを使うのはよい考えだ。
推奨される使用法:
- 常にグループを使用することで、自動コマンドの削除が容易になる。
- コマンド自体を短く維持し、より多くの仕事をする関数を呼ぶようにする。
- 定義されているスクリプトを、自動コマンドを繰り返さずに数回ソースできるように
する。
Vim9 script での例: >
autocmd_add([{replace: true,
group: 'DemoGroup',
event: 'BufEnter',
pattern: '*.txt',
cmd: 'call DemoBufEnter()'
}])
旧来のスクリプトの例: >
call autocmd_add([#{replace: v:true,
\ group: 'DemoGroup',
\ event: 'BufEnter',
\ pattern: '*.txt',
\ cmd: 'call DemoBufEnter()'
\ }])
==============================================================================
2. 自動コマンドの定義 *autocmd-define*
*:au* *:autocmd*
:au[tocmd] [group] {event} {aupat} [++once] [++nested] {cmd}
{aupat} |autocmd-patterns| に一致するファイルで、
{event} のときに自動的に実行するコマンドのリストに、
{cmd} を加える。
{event} には "*" は使えない。 *E1155*
Note: クォートは :autocmd への引数と見なされ、コメント
を開始しない。
{cmd} は常に既存の自動コマンドの後に追加されるので、
自動コマンドは指定された順に実行される。
[nested] については |autocmd-nested| を参照。後方互換
性のために、"nested" (++ なし)も使用できるが、|Vim9|
script では使用できない。 *E1078*
*autocmd-once*
[++once] が指定されている場合、コマンドは1回実行される
と削除される("one shot")。
特殊なパターン<buffer>や<buffer=N>はバッファローカルな自動コマンドを定義する。
|autocmd-buflocal| を参照。
`:autocmd` が Vim9 script (スクリプトが `:vim9script` で始まるのと `:def` 関数
内) にあると {cmd} は Vim9 script として実行される。したがってこの依存は自動コ
マンドが定義された位置に依存し、トリガーされた位置ではない。
*:autocmd-block*
{cmd} は `:command` のようにブロックにできる。|:command-repl| を参照。例: >
au BufReadPost *.xml {
setlocal matchpairs+=<:>
/<start
}
|autocmd_add()| 関数は、Vim script から自動コマンドやグループのリストを追加す
るために使用できる。`:autocmd` で `:execute` を使用する必要があるような場合は、
この関数を使用することが好ましい。
Note: ":autocmd" コマンドの後には、パターンが期待される位置に '|' が現れる場合
にのみ別のコマンドを続けることができる。これは動作する: >
:augroup mine | au! BufRead | augroup END
しかし、これは定義されたコマンドの一部として "augroup" を見做す: >
:augroup mine | au! BufRead * | augroup END
:augroup mine | au BufRead * set tw=70 | augroup END
代わりにグループ名をコマンドの中に置くことができる: >
:au! mine BufRead *
:au mine BufRead * set tw=70
もしくは `:execute` を使用する: >
:augroup mine | exe "au! BufRead *" | augroup END
:augroup mine | exe "au BufRead * set tw=70" | augroup END
< *autocmd-expand*
Note ":autocmd" の引数の中の特別な文字 (例えば "%" や "<cword>" 等) は、自動コ
マンドが定義されたときに展開されるのではなく、イベントの発生が認識され、{cmd}
が実行されるときに展開されることに注意せよ。唯一の例外は、"<sfile>" が自動コマ
ンドが定義されたときに展開されることである。例: >
:au BufNewFile,BufRead *.html so <sfile>:h/html.vim
ここで <sfile> は、この行を含むファイルの名前に展開される。
`:autocmd` は、すでに存在しているかどうかにかかわらず、自動コマンドのリストに
追加する。.vimrc ファイルが2回読み込まれると、自動コマンドが2回表示される。こ
れを避けるには、グループ内に自動コマンドを定義することで、簡単にクリアできる:
>
augroup vimrc
" 「全ての」vimrcの自動コマンドを削除する
autocmd!
au BufNewFile,BufRead *.html so <sfile>:h/html.vim
augroup END
もし全ての自動コマンドを消去したくなかったら、代わりに変数を使って自動コマンド
を読み込むのがただ1度だけにすることができる。 >
:if !exists("autocommands_loaded")
: let autocommands_loaded = 1
: au ...
:endif
引数 [group] が指定されないと、現在のグループが使われる (":augroup" で定義され
たもの)。そうでなければ、Vimは [group] で定義されたグループを使う。
Note [group] はあらかじめ定義されていなければならないことに注意。
":au group ..." で新しいグループを定義することはできない。それには ":augroup"
を使うこと。
自動コマンドをテストするとき、オプション 'verbose' が便利かもしれない。 >
:set verbose=9
この設定により、Vimは自動コマンドが実行されるとそれらを表示するようになる。
スクリプト内で自動コマンドを定義するときには、スクリプト内でのみ有効なローカル
関数とローカルキーマップを利用できる。イベントが発生してコマンドが実行されると
き、コマンドは自分の定義されたスクリプト内での設定に従って働く。これはコマンド
に |<SID>| が使われているときに問題になる。
コマンドを実行するとき、あるコマンドからのメッセージは前のメッセージを上書きし
てしまう。これはコマンドを手動で実行するときとは違う動作である。大抵、メッセー
ジスクリーンはスクロールしないので、「続けるには」というプロンプトは現れない。
また1個のコマンドが2つのメッセージを出すときには、何にせよメッセージは上書きさ
れてしまう。
==============================================================================
3. 自動コマンドの除去 *autocmd-remove*
以下で説明するコマンドに加えて、|autocmd_delete()| 関数を使用し Vim script か
ら自動コマンドおよびグループのリストを削除できる。
:au[tocmd]! [group] {event} {aupat} [++once] [++nested] {cmd}
{event} と {aupat} に関連づけられた全ての自動コマンド
を除去し、コマンド {cmd} を加える。
[++once] については |autocmd-once| を参照。
[++nested] については |autocmd-nested| を参照。
:au[tocmd]! [group] {event} {aupat}
{event} と {aupat} に関連づけられた全ての自動コマンド
を除去する。
:au[tocmd]! [group] * {aupat}
{aupat} に関連づけられた、全てのイベントに関する自動コ
マンドを全て除去する。
:au[tocmd]! [group] {event}
{event} に関連づけられた「全ての」自動コマンドを除去す
る。
警告: |BufRead| や他の一般的なイベントのためのグループ
なしでこれを行うべきではない。プラグインや構文のハイラ
イトなどを壊すことがある。
:au[tocmd]! [group] 「全ての」自動コマンドを除去する。
Note: クォートは :autocmd への引数と見なされ、コメント
を開始しない。
警告: 通常はグループなしでこれを行うべきではない。プラ
グインや構文の強調表示などが壊れる。
引数 [group] が指定されないと、現在のグループが使われる (":augroup" で定義され
たもの)。そうでなければ、[group] で定義されたグループが使われる。
==============================================================================
4. 自動コマンドの列挙 *autocmd-list*
:au[tocmd] [group] {event} {aupat}
{event} と {aupat} に関連づけられた全ての自動コマンド
を表示する。
:au[tocmd] [group] * {aupat}
{aupat} に関連づけられた、全てのイベントに関する自動コ
マンドを表示する。
:au[tocmd] [group] {event}
{event} に関連づけられた全ての自動コマンドを表示する。
:au[tocmd] [group] 全ての自動コマンドを表示する。
引数 [group] を指定すると、[group] に関する自動コマンドのみが列挙される。そう
でなければ、「全ての」グループに関する自動コマンドが表示される。Note ここでの
引数による動作の違いは、自動コマンドを定義したり除去するときとは違うことに注
意。
バッファローカルな自動コマンドを列挙するには、<buffer>または<buffer=N>という形
のパターンを使う。|autocmd-buflocal|を参照。
|autocmd_get()| 関数で自動コマンドのリストを Vim script から取得できる。
*:autocmd-verbose*
'verbose' がゼロでないならば、自動コマンドを列挙するときに、それが最後にどこで
定義されたかも表示する。例: >
:verbose autocmd BufEnter
FileExplorer BufEnter
* call s:LocalBrowse(expand("<amatch>"))
Last set from /usr/share/vim/vim-7.0/plugin/NetrwPlugin.vim
<
より詳しい情報は|:verbose-cmd|を参照。
==============================================================================
5. イベント *autocmd-events* *E215* *E216*
複数のイベントをコンマ (,) で区切ったリストにして指定することもできる。そのリ
ストにはスペースを含めてはいけない。そのコマンドは指定したリストにある全てのイ
ベントに適用される。
「ファイル読み込み」には次の4種類のイベントが発生しうる。
BufNewFile 存在しないファイルの編集を開始する。
BufReadPre BufReadPost 既存のファイルの編集を開始する。
FilterReadPre FilterReadPost フィルタの出力による一時ファイルを読み
込む。
FileReadPre FileReadPost その他のファイルを読み込む。
Vimはファイルを読み込むときにこの4種類のうちどれか1つを利用する。"Pre"と"Post"
のイベントは、ファイル読み込みの前後で両方とも起動される。
Note イベント *ReadPre や、全てのイベント Filter に関する自動コマンドは、カレ
ントバッファを変更してはならないことに注意 (これが起きると、エラーメッセージが
表示される)。これは、間違ったバッファにファイルを読み込むのを防ぐためである。
Note オプション 'modified' は、BufReadPost と BufNewFile の自動コマンドを実行
した「後に」オフに設定されることに注意。しかし 'modified' が自動コマンドから
オンに設定されたときはそうならない。
'eventignore' は、いくつかあるいは全てのイベントを無視するために使える。
*autocommand-events* *{event}*
Vimは以下のイベントを認識する。イベント名が大文字か小文字かは無視される (例え
ば "BufRead" の代わりに "BUFread" や "bufread" が使える)。
まず機能ごとに短い説明とともに概要を解説する。それから完全な説明とともにアル
ファベット順のリストを載せる |autocmd-events-abc|。
名前 発生するとき ~
読み込み
|BufNewFile| 存在しないファイルの編集を始めたとき
|BufReadPre| 新しいバッファの編集を始めたとき。ファイルを読み込む前
|BufRead| 新しいバッファの編集を始めたとき。
ファイルを読み込んだ後
|BufReadPost| 新しいバッファの編集を始めたとき。
ファイルを読み込んだ後
|BufReadCmd| 新しいバッファの編集を始める前 |Cmd-event|
|FileReadPre| ":read"でファイルを読み込む前
|FileReadPost| ":read"でファイルを読み込んだ後
|FileReadCmd| ":read"でファイルを読み込む前 |Cmd-event|
|FilterReadPre| フィルタコマンドでファイルを読み込む前
|FilterReadPost| フィルタコマンドでファイルを読み込んだ後
|StdinReadPre| 標準入力からバッファに読み込む前
|StdinReadPost| 標準入力からバッファに読み込んだ後
書き込み
|BufWrite| バッファ全体をファイルに書き込むとき
|BufWritePre| バッファ全体をファイルに書き込むとき
|BufWritePost| バッファ全体をファイルに書き込んだ後
|BufWriteCmd| バッファ全体をファイルに書き込む前 |Cmd-event|
|FileWritePre| バッファの一部をファイルに書き込むとき
|FileWritePost| バッファの一部をファイルに書き込んだ後
|FileWriteCmd| バッファの一部をファイルに書き込む前 |Cmd-event|
|FileAppendPre| ファイルに追加するとき
|FileAppendPost| ファイルに追加した後
|FileAppendCmd| ファイルに追加する前 |Cmd-event|
|FilterWritePre| フィルタコマンドやdiff用にファイルを書き込むとき
|FilterWritePost| フィルタコマンドやdiff用にファイルを書き込んだ後
バッファ
|BufAdd| バッファリストにバッファを追加した直後
|BufCreate| バッファリストにバッファを追加した直後
|BufDelete| バッファリストからバッファを削除する前
|BufWipeout| 完全にバッファを削除する前
|BufFilePre| カレントバッファの名前を変える前
|BufFilePost| カレントバッファの名前を変えた後
|BufEnter| バッファに入った後
|BufLeave| 別のバッファへ移る前
|BufWinEnter| バッファがウィンドウに表示された後
|BufWinLeave| バッファがウィンドウから削除される前
|BufUnload| バッファをアンロードする前
|BufHidden| バッファが隠れバッファになる直前
|BufNew| 新規バッファを作成した直後
|SwapExists| 既存のスワップファイルを検出したとき
オプション
|FileType| オプション 'filetype' がセットされたとき
|Syntax| オプション 'syntax' がセットされたとき
|EncodingChanged| オプション 'encoding' が変更された後
|TermChanged| オプション 'term' が変更された後
|OptionSet| オプションが設定された後
起動と終了
|VimEnter| 全ての起動処理が終わった後
|GUIEnter| GUIの起動が成功した後
|GUIFailed| GUIの起動が失敗した後
|TermResponse| |t_RV| に対する端末の反応を受け取った後
|TermResponseAll| |t_RV| および他の端末応答を受信した後
|QuitPre| `:quit` を使ったとき、本当に終了するか決定する前
|ExitPre| Vimを終了するコマンドを使ったとき
|VimLeavePre| Vimを終了する前、viminfoファイルを書き出す前
|VimLeave| Vimを終了する前、viminfoファイルを書き出した後
|VimSuspend| Vimがサスペンドした時
|VimResume| Vimがサスペンド後復帰した時
端末
|TerminalOpen| 端末バッファが生成された後
|TerminalWinOpen| 新しいウィンドウで端末バッファが生成された後
その他
|FileChangedShell| 編集を始めた後にファイルが変更されたことを検出したとき
|FileChangedShellPost| 編集を始めた後にファイルが変更されたことに対処した後
|FileChangedRO| 読み込み専用ファイルに対して最初に変更を加える前
|DiffUpdated| 差分が更新された後
|DirChangedPre| 作業ディレクトリが変更される前
|DirChanged| 作業ディレクトリが変更された後
|ShellCmdPost| シェルコマンドを実行した後
|ShellFilterPost| シェルコマンドでフィルタをかけた後
|CmdUndefined| 呼び出そうとしたユーザー定義コマンドが定義されていな
かったとき
|FuncUndefined| 呼び出そうとしたユーザー定義関数が定義されていなかった
とき
|SpellFileMissing| スペリングファイルを使おうとしたが見つからなかったとき
|SourcePre| Vim script を読み込む前
|SourcePost| Vim script を読み込んだ後
|SourceCmd| Vim script を読み込む前 |Cmd-event|
|VimResized| Vimのウィンドウサイズが変わったとき
|FocusGained| Vimが入力フォーカスを得たとき
|FocusLost| Vimが入力フォーカスを失ったとき
|CursorHold| ユーザーが一定時間キーを押さなかったとき
|CursorHoldI| 挿入モードでユーザーが一定時間キーを押さなかったとき
|CursorMoved| ノーマルモードでカーソルが移動したとき
|CursorMovedC| |Command-line| でカーソルが移動したとき
|CursorMovedI| 挿入モードでカーソルが移動したとき
|WinNewPre| 新しいウィンドウを作成する前
|WinNew| 新しいウィンドウを作成した後
|TabNew| 新しいタブページを作成した後
|WinClosed| ウィンドウを閉じた後
|TabClosed| タブページを閉じた後
|TabClosedPre| タブページを閉じる前
|WinEnter| 別のウィンドウに入った後
|WinLeave| ウィンドウから離れる前
|TabEnter| 別のタブページに入った後
|TabLeave| タブページから離れる前
|CmdwinEnter| コマンドラインウィンドウに入った後
|CmdwinLeave| コマンドラインウィンドウから離れる前
|CmdlineChanged| コマンドラインのテキストに変更が加えられた後
|CmdlineEnter| カーソルがコマンドラインに移動した後
|CmdlineLeave| カーソルがコマンドラインを離れる前
|InsertEnter| 挿入モードを開始したとき
|InsertChange| 挿入や置換モードで<Insert>をタイプしたとき
|InsertLeave| 挿入モードを抜けるとき
|InsertLeavePre| 挿入モードを抜ける直前
|InsertCharPre| 挿入モードで文字が入力されたとき、その文字が挿入される
前
|ModeChanged| モード変更後
|TextChanged| ノーマルモードでテキストが変更された後
|TextChangedI| ポップアップメニューが表示されていないときに、挿入モー
ドでテキストが変更された後
|TextChangedP| ポップアップメニューが表示されているときに、挿入モード
でテキストが変更された後
|TextChangedT| 端末モードでテキストが変更された後
|TextYankPost| テキストがヤンクもしくは削除された後
|SafeState| 保留中のものはなく、ユーザーの文字入力を待つとき
|SafeStateAgain| 繰り返された SafeState
|ColorSchemePre| カラースキームを読み込む前
|ColorScheme| カラースキームを読み込んだ後
|RemoteReply| Vimサーバーからの返答を受け取ったとき
|QuickFixCmdPre| QuickFixコマンドを実行する前
|QuickFixCmdPost| QuickFixコマンドを実行した後
|SessionLoadPost| セッションファイルを読み込んだ後
|SessionWritePost| |:mksession| コマンドを使用してセッションファイルを書
き込んだ後
|MenuPopup| ポップアップメニューを表示する直前
|CompleteChanged| 挿入モード補完メニューが変更されたとき
|CompleteDonePre| 挿入モード補完が完了したとき、情報がクリアされる前
|CompleteDone| 挿入モード補完が完了したとき、情報がクリアされた後
|KeyInputPre| キーが処理される前
|User| ":doautocmd" との組合せで使われる
|SigUSR1| SIGUSER1シグナルを受けとった後
|WinScrolled| ウィンドウがスクロールもしくはサイズ変更した後
自動コマンドイベントのアルファベット順リスト: *autocmd-events-abc*
*BufCreate* *BufAdd*
BufAdd or BufCreate バッファリストに追加されるバッファを作った直後
か、バッファをバッファリストに追加した直後。
バッファリスト内のバッファがリネームされた直後
にも発生する。
起動中に作成された初期バッファでは発生しない。
イベント BufCreate は歴史上の理由で存在してい
る。
NOTE: このイベントで自動コマンドが実行された
ときは、"%" で表されるカレントバッファと
"<afile>" で表される作成されたバッファは異なる
かもしれないことに注意。
*BufDelete*
BufDelete バッファリストからバッファを削除する前。(バッ
ファが読み込まれているなら) BufUnload が最初に
呼び出されるだろう。
また、バッファリスト内のバッファがリネームされ
た直前にも使われる。
NOTE: このイベントで自動コマンドが実行された
ときは、"%" で表されるカレントバッファと
"<afile>" と "<abuf>" で表される削除されるバッ
ファとは異なるかもしれないことに注意。
他のバッファに切り替えないこと。もしすると問題
が発生するだろう。
*BufEnter*
BufEnter バッファに入った後。ファイルタイプに関するオプ
ションの設定に便利である。バッファの編集を始め
るときにも、BufReadPost の自動コマンドの後に実
行される。
*BufFilePost*
BufFilePost 現在のバッファの名前をコマンド ":file" または
":saveas" で変更した後。
*BufFilePre*
BufFilePre 現在のバッファの名前をコマンド ":file" または
":saveas" で変更する前。
*BufHidden*
BufHidden バッファが隠れ状態 (hidden) になる直前。つまり
そのバッファを表示するウィンドウがもう存在しな
いのに、バッファが解放されなかったり、削除され
ないとき。":qa" や "q" でVimを終了するときに
は使われない。
NOTE: このイベントで自動コマンドが実行された
ときは、"%" で表されるカレントバッファと
"<afile>" で表される解放されるバッファとは異な
るかもしれないことに注意。
*BufLeave*
BufLeave 他のバッファに移る前。カレントウィンドウを離れ
たり、閉じたりするときで、新しいカレントウィン
ドウが同じバッファを開いていないとき。":qa" や
"q" でVimを閉じるときには使われない。
*BufNew*
BufNew 新しいバッファを作った直後。バッファがリネーム
された直後にも発生する。バッファがバッファリス
トに追加されると、イベント BufAdd も発生する。
NOTE: このイベントで自動コマンドが実行された
ときは、"%" で表されるカレントバッファと
"<afile>" で表される作成されるバッファとは異な
るかもしれないことに注意。
*BufNewFile*
BufNewFile 存在しないファイルの編集を始めたとき。スケルト
ンファイル {訳注: テンプレートファイルともいう}
に読み込むときに使える。
*BufRead* *BufReadPost*
BufRead or BufReadPost 新しいバッファの編集を始めたときの、ファイルを
バッファに読み込んだ後で、モードラインを実行す
る前。モードラインを実行した後に何かするには
|BufWinEnter|を参照すること。
発行される場合:
- 無名バッファを保存してバッファに名前がついた
とき
- ファイルのリカバリーが成功した後
- filetypedetect グループを対象として
":filetype detect" を実行したとき
発行されない場合:
- `:read file` コマンド
- ファイルが存在しないとき
*BufReadCmd*
BufReadCmd 新しいバッファの編集を始める前。ファイルをバッ
ファ内に読み込む役目を負う。 |Cmd-event|
*BufReadPre* *E200* *E201*
BufReadPre 新しいバッファの編集を始めたときの、ファイルを
バッファに読み込む前。読み込むファイルが存在し
ないときは使えない。
*BufUnload*
BufUnload バッファを解放する前。これは、バッファ内のテキ
ストが解放されるときである。BufWritePost の後
で、BufDelete の前かもしれない。Vimが終了しよ
うとしているとき、読み込まれた全てのバッファに
ついて発生する。
NOTE: このイベントで自動コマンドが実行された
ときは、"%" で表されるカレントバッファと
"<afile>" で表される解放されるバッファとは異な
るかもしれないことに注意。
他のバッファやウィンドウに切り替えないこと。問
題が発生するだろう。
終了時に v:dying が 2 以上のときはこのイベント
は発生しません。
*BufWinEnter*
BufWinEnter バッファがウィンドウ内に表示された後。これはバッ
ファが読み込まれたとき (モードラインの処理後)
か、隠れ (hidden) バッファがウィンドウ内に表示
されたとき (もう隠れバッファでなくなったとき)。
引数なしで |:split| をしたときや、既にウィンド
ウに表示されているバッファを指定して ":split"
をしたときは、同じバッファを開いたままなので、
このイベントは発生しない。既存のバッファがその
まま使われるためである。しかし、カレントバッファ
の名前を指定して ":split" をすると、そのバッファ
を再読み込みすることになるので、発生する。
端末ウィンドウでは発生しない。何故なら端末ジョ
ブモードで開始され、ノーマルモードコマンドは機
能しないからである。代わりに |TerminalOpen| を
使用すること。
*BufWinLeave*
BufWinLeave バッファがウィンドウから取り除かれる前。そのバッ
ファが別のウィンドウ内で表示中ならば発生しない。
Vimの終了時にも発生する。イベント BufUnload や
BufHidden よりも前に発生する。
NOTE: このイベントで自動コマンドが実行された
ときは、"%" で表されるカレントバッファと
"<afile>" で表される解放されるバッファとは異な
るかもしれないことに注意。
他のバッファに切り替えないこと。もしすると問題
が発生するだろう。
終了時に v:dying が 2 以上のときはこのイベント
は発生しません。
*BufWipeout*
BufWipeout バッファを完全に削除する前。イベント BufUnload
と BufDelete が先に発生するかもしれない (バッ
ファが読み込まれていて、バッファリスト内に存在
するなら)。バッファがリネームされる直前にも発
生する (そのバッファがバッファリスト内になくと
も)。
NOTE: このイベントで自動コマンドが実行された
ときは、"%" で表されるカレントバッファと
"<afile>" で表される削除されるバッファとは異な
るかもしれないことに注意。
*BufWrite* *BufWritePre*
BufWrite or BufWritePre バッファ全体をファイルに書き込む前。
*BufWriteCmd*
BufWriteCmd バッファ全体をファイルに書き込む前。ファイルへ
の書き込みの役目を負い、成功したときはオプショ
ン 'modified' をオフにする。バッファの内容を変
更すべきではない。
'modified' をオフにすると、以前の undo 状態が
'modified' (変更あり) になるように undo 情報が
調整される (|:write| と同様)。
|Cmd-event|
*BufWritePost*
BufWritePost バッファ全体をファイルに書き込んだ後 (イベント
BufWritePre によるコマンドをアンドゥする役目を
果たす)。
*CmdUndefined*
CmdUndefined ユーザー定義コマンドが使われたが、定義されてい
なかったとき。必要なときのみコマンドを定義する
のに便利である。パターンはコマンド名に対して照
合される。<amatch> と <afile> の両方ともコマン
ド名に設定される。
これは、|autocmd-nested| なしで定義された自動
コマンドの内部でもトリガーされる。
NOTE: 未定義のコマンドに対して自動補完は機能し
ない。このイベントを使う代わりにユーザー定義コ
マンドを常に定義するようにしてそのコマンドから
autoload 関数を呼び出すようにするという方法も
ある。|autoload| 参照。
*CmdlineChanged*
CmdlineChanged コマンドラインのテキストに変更が加えられた後。
Vim が固まってしまう可能性があるので、コマンド
ラインで間違いを起こさないよう注意すること。
<afile> はコマンドラインの種類を示す 1 文字に
設定される。
|cmdwin-char|
*CmdlineEnter*
CmdlineEnter ユーザーがコマンドを入力もしくは文字列を検索で
きるコマンドラインにカーソルが移動した後、非イ
ンタラクティブなマッピング内での ":" 利用を含
むが、|<Cmd>| の利用は含まない。
パターンは、コマンドラインの種類を表す文字と照
合される。|cmdwin-char|
<afile> はコマンドラインの種類を示す 1 文字に
設定される。
*CmdlineLeave*
CmdlineLeave カーソルがコマンドラインを離れる前、非インタラ
クティブなマッピング内での ":" 利用を含むが、
|<Cmd>| の利用は含まない。CTRL-C もしくは
<Esc> の入力によってコマンドラインを放棄する場
合も同様。
コマンドの結果がエラーとなる場合は、コマンドラ
インは引き続き実行中となる。
<afile> はコマンドラインの種類を示す 1 文字に
設定される。
|cmdwin-char|
*CmdwinEnter*
CmdwinEnter Command-lineウィンドウに入った後。この特殊な
ウィンドウに対してのみオプションを設定するのに
便利である。
<afile> は、command-lineの種類を示す1文字に設
定される。 |cmdwin-char|
*CmdwinLeave*
CmdwinLeave Command-lineウィンドウから出る前。イベント
CmdwinEnter で行ったグローバル設定を消去するの
に便利である。
<afile> は、command-lineの種類を示す1文字に設
定される。 |cmdwin-char|
*ColorScheme*
ColorScheme カラースキームを読み込んだ後。 |:colorscheme|
カラースキームが見つからない場合は、トリガーさ
れない。
パターンはカラースキーム名にマッチする。
<afile> はこのオプションを設定したファイルの名
前になる。<amatch> はカラースキーム名になる。
*ColorSchemePre*
ColorSchemePre カラースキームを読み込む前。|:colorscheme|
あるカラースキームが読み込まれる前に、それ以前
に別のカラースキームによって追加されたものを取
り除くのに便利。
CompleteChanged *CompleteChanged*
挿入モード補完メニューが変更される度。ポップ
アップメニューが非表示時には発生しない。そのた
めには |CompleteDonePre| または |CompleteDone|
を使用すること。再帰的に発生することはない。
これらの |v:event| キーを設定する:
completed_item |complete-items| 参照
height 表示項目数
width 画面セル数
row 画面上端の行
col 画面最左の桁
size 全項目数
scrollbar 表示時 TRUE
テキストの |textlock| を変更することはできない。
ポップアップのサイズと位置は、|pum_getpos()|
を呼び出すことでも得られる。
*CompleteDonePre*
CompleteDonePre 挿入モード補完が完了したとき。補完が実行されて
も中止されても発行される。 |ins-completion|
|complete_info()| を使うことができる。情報は
CompleteDonePre が発行された後にクリアされる。
変数 |v:completed_item| には補完された候補につい
ての情報が含まれている。
*CompleteDone*
CompleteDone 挿入モード補完が完了したとき。補完が実行されて
も中止されても発行される。 |ins-completion|
|complete_info()| を使うことができる。情報は
CompleteDone が発行される前にクリアされる。必
要ならば CompleteDonePre を使うこと。
変数 |v:completed_item| には補完された候補につい
ての情報が含まれている。
以下の |v:event| キーを設定する:
complete_word 選択された単語。補完が
放棄された場合は空白に
なる。
complete_type |complete_info_mode|
*CursorHold*
CursorHold 'updatetime' の時間の間、ユーザーがキーを押さ
なかったとき。ユーザーが何かキーを押すまで、発
生することはない (例えば、もしあなたがコーヒー
を入れるためにVimの前を離れても、その間の
'updatetime' ミリ秒ごと発生することはない :-)。
タグをプレビューするためには、
|CursorHold-example| を参照。
このイベントはノーマルモードのときのみ呼ばれる。
コマンドの引数の入力待ち状態、またはオペレータ
の後の移動コマンド入力待ち状態のときは発生しな
い。
レコーディングの最中にはCursorHoldイベントは発
生しない。|q|
*<CursorHold>*
この自動コマンドは内部的に <CursorHold> キーが
引き金になっている。式による指定のマッピング内
では |getchar()| によってこの文字が取得されるこ
とがある。
Note: このイベントには対話的なコマンドは使えな
いことに注意。「続けるには」プロンプトは現れず、
スクリーンは必要に応じて直接更新される。
Note: 近いうちに、発生するまでの時間を設定する
別のオプションができるだろう。
ヒント: ステータスラインの更新を強制的に行うに
は、これを使うこと: >
:let &ro = &ro
< {VimのAmiga版、Unix版、Win32版および全てのGUI
版でのみ有効}
*CursorHoldI*
CursorHoldI CursorHoldと同様だが、挿入モードのとき発生す
る。例えば別のキーを待っているとき、例えば
CTRL-V の後で、CTRL-X モード |insert_expand|
ではないときにはトリガーされない。
*CursorMoved*
CursorMoved ノーマルモードかビジュアルモードでカーソルが移
動した後。カーソル行のテキストが変更されたとき
にも発生する(例: "x", "rx", "p"などで)。
先行入力があるとき、スクリプトファイルのコマン
ドの実行中、オペレータが待機しているとき、また
は同じカーソル位置のまま別のウィンドウへ移動し
たときには常に発生しない。
|match-parens|の例を参照。
Note: この自動イベントは `:noautocmd` を付けて
もスキップできない。
注意: このイベントは頻繁に発生するので、ユーザー
が予期しないことや時間のかかる処理は行わないこ
と。
*CursorMovedC*
CursorMovedC コマンドラインでカーソルを移動した後。コマンド
ラインをぐちゃぐちゃにすると Vim がロック状態
になる可能性があるので注意。
<afile> には、コマンドラインの種類を示す単一の
文字が設定される。|cmdwin-char|
*CursorMovedI*
CursorMovedI 挿入モードでカーソルが移動した後。ポップアップ
メニューが表示されているときは発行されない。
それ以外はCursorMovedと同じ。
*DiffUpdated*
DiffUpdated 差分が更新された後。使用されているdiffコマンド
の種類(内部または外部)に応じて、変更毎か
|:diffupdate| 実行時に発生する。
*DirChangedPre*
DirChangedPre |DirChanged| と同じように、作業ディレクトリが
変更されようとしているとき。パターンは
|DirChanged| と同様。新しいディレクトリ名は
v:event.directory にある。
*DirChanged*
DirChanged |:cd|, |:tcd| もしくは |:lcd| コマンドによって、
もしくは 'autochdir' オプションの結果として作業
ディレクトリが変更された後。
パターンは以下のようになる:
"window" `:lcd` により発生する
"tabpage" `:tcd` により発生する
"global" `:cd` により発生する
"auto" 'autochdir' により発生する
"drop" ファイルの編集により発生する
<afile> は新ディレクトリ名に設定される。
*EncodingChanged*
EncodingChanged オプション 'encoding' が変更されたとき。例えば、
フォント等の設定に便利である。
*ExitPre*
ExitPre Vim を終了させる `:quit`, `:wq` もしくは
`:qall` を使用したときで、|QuitPre| の直後。不
必要なウィンドウを閉じるのに使うことができる。
自動的に保存されない変更済みのバッファがある場
合には、終了はまだキャンセルされる可能性があ
る。本当に終了するときのためには |VimLeavePre|
を使用すること。
*FileAppendCmd*
FileAppendCmd ファイルに追加する前。ファイルへの追加の役目を
負う。|Cmd-event|
*FileAppendPost*
FileAppendPost ファイルに追加した後。
*FileAppendPre*
FileAppendPre ファイルに追加する前。
*FileChangedRO*
FileChangedRO 読み込み専用ファイルに最初の変更を加える前。
ソース管理システム {訳注: CVSやRCS} からファイ
ルをチェックアウトするのに使われる。変更が自動
コマンドによるときには発生しない。
このイベントが発生するのは、バッファに最初の変
更を行うときや、'readonly'がセットされた後に最
初の変更を行うときの、変更が適用される直前であ
る。
警告: 自動コマンドでカーソルが動かされるときの
動作は、定義されていない。
*E788*
ここで他のバッファに変更をしてはならない。バッ
ファを再読み込みするのはよいが、他のバッファを
編集してはならない。
*E881*
行数が変化した場合 undo のための保存は失敗し、
その変更は中止されるだろう。
*FileChangedShell*
FileChangedShell ファイルのタイムスタンプが、ファイルの編集が始
まってから変更されたことを発見したとき。
ファイルの属性やファイルサイズが変更されたとき
にも使われる。|timestamp|
大抵はシェルコマンドの実行後に発生する。またコ
マンド |:checktime| の実行後や、gvimが入力
フォーカスを一度失い、再び得たときにも発生す
る。
このイベントは変更されたファイルそれぞれに対し
て発生する。オプション 'autoread' がオンであり、
かつバッファが変更されていないときには使われな
い。もし FileChangedShell の自動コマンドが存
在しても、警告メッセージやプロンプトは現れない。
変数|v:fcs_reason|に何が起こったのかが設定さ
れ、|v:fcs_choice|によってVimに次に何をすべき
かを指示できる。
NOTE: このイベントで自動コマンドが実行された
ときは、"%" で表されるカレントバッファと
"<afile>" で表される変更されたバッファとは異な
るかもしれないことに注意。
NOTE: この自動コマンドはカレントバッファを変
更したり、別のバッファにジャンプしたり、バッ
ファを消去してはいけない。 *E246* *E811*
NOTE: このイベントは、無限ループを避けるために
決してネストしてはいけない (入れ子にならない)。
つまり、FielChangedShellイベントの処理中は他の
FileChangedShellイベントは呼ばれない。
*FileChangedShellPost*
FileChangedShellPost Vimの外部でファイルが変更されたのを検出・対処
した後。ステータスラインを更新するのに使える。
*FileEncoding*
FileEncoding 時代遅れである。まだ有効だがイベント
|EncodingChanged| と同等である。
*FileReadCmd*
FileReadCmd コマンド ":read" でファイルを読み込む前。ファ
イルを読み込む役目を負う。 |Cmd-event|
*FileReadPost*
FileReadPost コマンド ":read" でファイルを読み込んだ後。
Note 読み込んだテキストの先頭行と末尾行には、
マーク '[ と '] が設定されることに注意。これは、
読み込まれた行に対して操作を行うのに使われる。
*FileReadPre*
FileReadPre コマンド ":read" でファイルを読み込む前。
*FileType*
FileType オプション 'filetype' が設定されたとき。
パターンはファイルタイプに対して照合される。
<afile> は 'filetype' が設定されたファイルの名
前として使える。<amatch> は 'filetype' の新し
い値として使える。他のウィンドウもしくはバッ
ファへの移動は許されていない。
|filetypes| を参照。
*FileWriteCmd*
FileWriteCmd バッファ全体を書き込まない場合の、ファイルに書
き込む前。ファイルへの書き込みの役目を負う。バッ
ファを変更すべきではない。 |Cmd-event|
*FileWritePost*
FileWritePost バッファ全体を書き込まない場合の、ファイルに書
き込んだ後。
*FileWritePre*
FileWritePre バッファ全体を書き込まない場合の、ファイルに書
き込む前。
*FilterReadPost*
FilterReadPost フィルタコマンドからファイルを読み込んだ後。
Vimは FilterReadPre と同様に、現在のバッファの
名前に対してパターンを調べる。
*FilterReadPre* *E135*
FilterReadPre フィルタコマンドからファイルを読み込む前。Vim
は、フィルタコマンドの出力である一時ファイルの
名前ではなく、現在のバッファの名前に対してパター
ンを調べる。
*FilterWritePost*
FilterWritePost フィルタコマンド用のファイルを書き込んだり、外
部diffで差分表示用のファイルを作った後。(内部
diffについては |DiffUpdated| を参照)
Vimは FilterWritePre と同様、現在のバッファの
名前に対してパターンをチェックする。
'shelltemp' がオフのときは発生しない。
*FilterWritePre*
FilterWritePre フィルタコマンド用のファイルを書き込んだり、外
部diffで差分表示用のファイルを作る前。
Vimはフィルタコマンドの出力である一時ファイル
の名前ではなく、現在のバッファの名前に対してパ
ターンをチェックする。
'shelltemp' がオフのときは発生しない。
*FocusGained*
FocusGained Vimが入力フォーカスを得たとき。GUI版と、入力
フォーカスを認識できるいくつかのコンソール版で
のみ有効。|xterm-focus-event|
*FocusLost*
FocusLost Vimが入力フォーカスを失ったとき。GUI版と、入力
フォーカスを認識できるいくつかのコンソール版で
のみ有効。|xterm-focus-event|
ダイアログがポップアップした時にも発生する可能
性がある。
*FuncUndefined*
FuncUndefined ユーザー定義関数が使われたが、定義されていなかっ
たとき。必要なときのみ関数を定義するのに便利で
ある。パターンは関数名に対して照合される。
<amatch> と <afile> の両方とも関数名に設定され
る。
これは、|autocmd-nested| なしで定義された自動
コマンド内でもトリガーされるが、|Vim9| 関数を
コンパイルするときにはトリガーされない。
NOTE: Vim script を書くときには autoload 関数
を使う方がよい。
|autoload-functions|を参照。
*GUIEnter*
GUIEnter GUI の開始に成功し、ウィンドウを開いた後。
gvim を使ったときは、VimEnter の前に発生する。
ファイル .gvimrc からウィンドウの配置場所を設
定するために使うことができる。 >
:autocmd GUIEnter * winpos 100 50
< *GUIFailed*
GUIFailed GUIの開始に失敗した後。可能ならば、Vimはターミ
ナル内で実行を継続する(Unix系のみ。Xサーバーへ
接続が失敗したとき)。ここでVimを終了させるには、
次のようにする: >
:autocmd GUIFailed * qall
< *InsertChange*
InsertChange 挿入・置換モードで <Insert> をタイプしたとき。
変数 |v:insertmode| が新しいモードを示す。
カーソルを移動したりなどユーザーが予期しないこ
とは行わないように注意。
*InsertCharPre*
InsertCharPre 挿入モードで文字が入力されたとき、その文字が挿
入される前。|v:char| 変数に入力された文字が入っ
ている。イベント内でそれを変更することで実際に
挿入される文字を変更できる。|v:char| に 2 つ以
上の文字を入れた場合はそのテキストはそのまま
(literally) 挿入される。
テキストを変更することはできない |textlock|。
このイベントは 'paste' がオンに設定されている
ときは発行されない。{+eval 機能が有効な場合の
み}
*InsertEnter*
InsertEnter 挿入モード・置換モード・仮想置換モードを開始す
る直前。変数|v:insertmode|がモードを示す。
ユーザーが予期しないことは行わないように注意。
カーソルはコマンド実行後に復元される。復元され
たくない場合は |v:char| に非空文字を設定する。
*InsertLeavePre*
InsertLeavePre 挿入モードを抜ける前。CTRL-O |i_CTRL-O| を使っ
た時も発生する。問題の原因になりうるのでモード
の変更や `:normal` の使用には注意すること。
*InsertLeave*
InsertLeave 挿入モードを抜けた直後。CTRL-O |i_CTRL-O| を
使ったときにも発生する。|i_CTRL-C| のときは発
生しない。
*KeyInputPre*
KeyInputPre マッピングが適用されてキーが処理される前。パ
ターンは、現在のモードを示す文字列と照合され
る。これは、`mode(1)` によって返されるものと同
じである。
|v:char| 変数は入力されたキーを示し、イベント
中に変更して別のキーを処理することができ
る。|v:char| が単一の文字または特殊キーでない
場合は、最初の文字が使用される。
|v:event| には以下の値が設定される:
typed キーがタイプされたか否か。
typedchar 最後の |KeyInputPre| 呼び出し
以降に (実際に) タイプされた
キー。
Note: 連続する |KeyInputPre| 自動コマンドが処
理される場合、"typedchar" は空になることがあ
る。
テキスト |textlock| または現在のモードを変更す
ることはできない。
{+eval 機能が有効な場合のみ}
*MenuPopup*
MenuPopup (マウス右ボタンで)ポップアップメニューを表示す