vimdoc_ja-snapshot 2010-02-07
[MacVim/KaoriYa.git] / runtime / doc / autocmd.jax
blob843400f32d836cf11a4718d9e7be6961bb571814
1 *autocmd.txt*   For Vim バージョン 7.2.  Last change: 2009 Nov 25
4                   VIM REFERENCE MANUAL    by Bram Moolenaar
7 自動コマンド                                          *autocommand*
9 基本的な説明については、ユーザマニュアルの |40.3| 章を参照。
11 1. はじめに                         |autocmd-intro|
12 2. 自動コマンドの定義                    |autocmd-define|
13 3. 自動コマンドの削除                    |autocmd-remove|
14 4. 自動コマンドの列挙                    |autocmd-list|
15 5. イベント                         |autocmd-events|
16 6. パターン                         |autocmd-patterns|
17 7. バッファローカルな自動コマンド      |autocmd-buflocal|
18 8. グループ                         |autocmd-groups|
19 9. 自動コマンドの実行                    |autocmd-execute|
20 10.自動コマンドの使用                    |autocmd-use|
21 11.自動コマンドを無効にする         |autocmd-disable|
23 {Vi にはこういったコマンドは全くない。}
24 {only: |+autocmd| の機能は、コンパイル時に有効にされていなければ使えない。}
26 ==============================================================================
27 1. はじめに                                         *autocmd-intro*
29 ファイルを読み込んだり書き込むときや、バッファやウィンドウに入ったり出たりし
30 たとき、あるいはVimを終了させるときに、コマンドを自動的に実行するように指定で
31 きる。 例えば "*.c" にマッチするファイルに対して、オプション 'cindent' をオン
32 にする自動コマンドを作ることができる。また自動コマンドでさらに高度な機能を実
33 装することができる。圧縮ファイルを編集するといったような機能だ (|gzip-example|
34 を参照)。こういった自動コマンドはファイル .vimrc かファイル .exrc に書き込む。
36                                                         *E203* *E204* *E143*
37 注意:自動コマンドは大変強力であるので、思いも寄らない副作用をもたらすことがあ
38 る。テキストを壊さないように注意しなければならない。
39 - 捨ててもよいようなファイルのコピーに対して、最初にテストしておくのがよい。例
40   えば、ファイルの編集開始時にファイルを解凍する自動コマンドを使うときには、
41   書き込みするときに圧縮を行う自動コマンドが正しく働くか確かめること。
42 - 実行中のエラー (例えばディスクが満杯になる) に対して、対処の準備をしておかな
43   ければならない。バッファへの変更に対しては大抵アンドゥができるが、他のファイ
44   ルへの変更は、自分で処理しなければならないかもしれない (例えば、解凍されたファ
45   イルを圧縮する、等)。
46 - もしイベント BufRead* の自動コマンドによって圧縮ファイルを編集できるなら、
47   FileRead* でも同じ事ができるようにするべきである (こうすることで復旧可能にな
48   る場合がたまにある)。可能であれば、イベント File* や Buf* には同じ自動コマン
49   ドを使うのはよい考えだ。
51 ==============================================================================
52 2. 自動コマンドの定義                                    *autocmd-define*
54 Note: コマンド ":autocmd" には他のコマンドを続けることはできない。'|' はみなコ
55 マンドの一部と認識されるからである。
57                                                         *:au* *:autocmd*
58 :au[tocmd] [group] {event} {pat} [nested] {cmd}
59                         {pat} |autocmd-patterns| に一致するファイルで、{event}
60                         のときに自動的に実行するコマンドのリストに、{cmd} を加
61                         える。
62                         {cmd} は常に既存の自動コマンドの後に追加されるので、
63                         自動コマンドは指定された順に実行される。 [nested] につ
64                         いては|autocmd-nested| を参照。
66 特殊なパターン<buffer>や<buffer=N>はバッファローカルな自動コマンドを定義する。
67 |autocmd-buflocal|を参照.
69 Note ":autocmd" の引数の中の特別な文字 (例えば "%" や "<cword>" 等) は、
70 自動コマンドが定義されたときに展開されるのではなく、イベントの発生が認識され、
71 {cmd} が実行されるときに展開されることに注意せよ。唯一の例外は、"<sfile>" が
72 自動コマンドが定義されたときに展開されることである。例: >
74         :au BufNewFile,BufRead *.html so <sfile>:h/html.vim
76 ここで <sfile> は、この行を含むファイルの名前に展開される。
78 ファイル .vimrc が2回読み込まれるとき、自動コマンドは二度現れる。これを避ける
79 ため、このコマンドをファイル .vimrc の自動コマンドを定義する所の前に入れてお
80 く必要がある。 >
82         :autocmd!     " 現在のグループに対する「全て」の自動コマンドを削除。
84 もし全ての自動コマンドを消去したくなかったら、代わりに変数を使って
85 自動コマンドを読み込むのがただ1度だけにすることができる。 >
87         :if !exists("autocommands_loaded")
88         :  let autocommands_loaded = 1
89         :  au ...
90         :endif
92 引数  [group] が指定されないと、現在のグループが使われる (":augroup" で定義さ
93 れたもの)。そうでなければ、Vimは [group] で定義されたグループを使う。
94 Note [group] はあらかじめ定義されていなければならないことに注意。
95 ":au group ..." で新しいグループを定義することはできない。それには ":augroup"
96 を使うこと。
98 自動コマンドをテストするとき、オプション 'verbose' が便利かもしれない。 >
99         :set verbose=9
100 この設定により、Vimは自動コマンドが実行されるとそれらを表示するようになる。
102 スクリプト内で自動コマンドを定義するときには、スクリプト内でのみ有効なローカ
103 ル関数とローカルキーマップを利用できる。イベントが発生してコマンドが実行される
104 とき、コマンドは自分の定義されたスクリプト内での設定に従って働く。これはコマン
105 ドに |<SID>| が使われているときに問題になる。
107 コマンドを実行するとき、あるコマンドからのメッセージは前のメッセージを上書きし
108 てしまう。これはコマンドを手動で実行するときとは違う動作である。大抵、メッセー
109 ジスクリーンはスクロールしないので、「続けるには」というプロンプトは現れない。
110 また1個のコマンドが2つのメッセージを出すときには、何にせよメッセージは上書きさ
111 れてしまう。
113 ==============================================================================
114 3. 自動コマンドの除去                                    *autocmd-remove*
116 :au[tocmd]! [group] {event} {pat} [nested] {cmd}
117                         {event} と {pat} に関連づけられた全ての自動コマンドを
118                         除去し、コマンド {cmd} を加える。 [nested] については
119                         |autocmd-nested| を参照。
121 :au[tocmd]! [group] {event} {pat}
122                         {event} と {pat} に関連づけられた全ての自動コマンドを
123                         除去する。
125 :au[tocmd]! [group] * {pat}
126                         {pat} に関連づけられた、全てのイベントに関する
127                         自動コマンドを全て除去する。
129 :au[tocmd]! [group] {event}
130                         {event} に関連づけられた「全ての」自動コマンドを除去す
131                         る。
133 :au[tocmd]! [group]     「全ての」自動コマンドを除去する。
135 引数 [group] が指定されないと、現在のグループが使われる (":augroup" で定義され
136 たもの)。そうでなければ、 [group] で定義されたグループが使われる。
138 ==============================================================================
139 4. 自動コマンドの列挙                                    *autocmd-list*
141 :au[tocmd] [group] {event} {pat}
142                         {event} と {pat} に関連づけられた全ての自動コマンドを
143                         表示する。
145 :au[tocmd] [group] * {pat}
146                         {pat} に関連づけられた、全てのイベントに関する
147                         自動コマンドを表示する。
149 :au[tocmd] [group] {event}
150                         {event} に関連づけられた全ての自動コマンドを表示する。
152 :au[tocmd] [group]      全ての自動コマンドを表示する。
154 引数 [group] を指定すると、 [group] に関する自動コマンドのみが列挙される。そ
155 うでなければ、「全ての」グループに関する自動コマンドが表示される。Note ここで
156 の引数による動作の違いは、自動コマンドを定義したり除去するときとは違うことに注
157 意。
159 バッファローカルな自動コマンドを列挙するには、<buffer>または<buffer=N>という形
160 のパターンを使う。|autocmd-buflocal|を参照。
162                                                         *:autocmd-verbose*
163 'verbose'がゼロでないならば、自動コマンドを列挙するときに、それが最後にどこで
164 定義されたかも表示する。例: >
166     :verbose autocmd BufEnter
167     FileExplorer  BufEnter
168         *         call s:LocalBrowse(expand("<amatch>"))
169             Last set from /usr/share/vim/vim-7.0/plugin/NetrwPlugin.vim
171 より詳しい情報は|:verbose-cmd|を参照。
173 ==============================================================================
174 5. イベント                                 *autocmd-events* *E215* *E216*
176 複数のイベントをコンマ(,)で区切ったリストにして指定することもできる。そのリス
177 トにはスペースを含めてはいけません。そのコマンドは指定したリストにある全てのイ
178 ベントに適用されます。
180 「ファイル読み込み」には次の4種類のイベントが発生しうる。
181         BufNewFile                      存在しないファイルの編集を開始する。
182         BufReadPre      BufReadPost     既存のファイルの編集を開始する。
183         FilterReadPre   FilterReadPost  フィルタの出力による一時ファイルを読み
184                                         込む。
185         FileReadPre     FileReadPost    その他のファイルを読み込む。
186 Vimはファイルを読み込むときにこの4種類のうちどれか1つを利用する。"Pre"と"Post"
187 のイベントは、ファイル読み込みの前後で両方とも起動される。
189 Note イベント *ReadPre や、全てのイベント Filter に関する自動コマンドは、カレ
190 ントバッファを変更してはならないことに注意 (これが起きると、エラーメッセージが
191 表示される)。これは、間違ったバッファにファイルを読み込むのを防ぐためである。
193 Note オプション 'modified' は、BufReadPost と BufNewFile の自動コマンドを実行
194 した「後に」オフに設定されることに注意。しかし 'modified' が自動コマンドから
195 オンに設定されたときはそうならない。
197 'eventignore' は、いくつかあるいは全てのイベントを無視するために使える。
200                                         *autocommand-events* *{event}*
201 Vimは以下のイベントを認識する。イベント名が大文字か小文字かは無視される (例え
202 ば "BufRead" の代わりに "BUFread" や "bufread" が使える)。
204 まず機能ごとに短い説明とともに概要を解説する。それから完全な説明とともにアルフ
205 ァベット順のリストを載せる |autocmd-events-abc|。
207 名前                      発生するとき ~
209         読み込み
210 |BufNewFile|            存在しないファイルの編集を始めたとき
211 |BufReadPre|            新しいバッファの編集を始めたとき。ファイルを読み込む前
212 |BufRead|               新しいバッファの編集を始めたとき。
213                         ファイルを読み込んだ後
214 |BufReadPost|           新しいバッファの編集を始めたとき。
215                         ファイルを読み込んだ後
216 |BufReadCmd|            新しいバッファの編集を始める前 |Cmd-event|
218 |FileReadPre|           ":read"でファイルを読み込む前
219 |FileReadPost|          ":read"でファイルを読み込んだ後
220 |FileReadCmd|           ":read"でファイルを読み込む前 |Cmd-event|
222 |FilterReadPre|         フィルタコマンドでファイルを読み込む前
223 |FilterReadPost|        フィルタコマンドでファイルを読み込んだ後
225 |StdinReadPre|          標準入力からバッファに読み込む前
226 |StdinReadPost|         標準入力からバッファに読み込んだ後
228         書き込み
229 |BufWrite|              バッファ全体をファイルに書き込むとき
230 |BufWritePre|           バッファ全体をファイルに書き込むとき
231 |BufWritePost|          バッファ全体をファイルに書き込んだ後
232 |BufWriteCmd|           バッファ全体をファイルに書き込む前 |Cmd-event|
234 |FileWritePre|          バッファの一部をファイルに書き込むとき
235 |FileWritePost|         バッファの一部をファイルに書き込んだ後
236 |FileWriteCmd|          バッファの一部をファイルに書き込む前 |Cmd-event|
238 |FileAppendPre|         ファイルに追加するとき
239 |FileAppendPost|        ファイルに追加した後
240 |FileAppendCmd|         ファイルに追加する前 |Cmd-event|
242 |FilterWritePre|        フィルタコマンドやdiff用にファイルを書き込むとき
243 |FilterWritePost|       フィルタコマンドやdiff用にファイルを書き込んだ後
245         バッファ
246 |BufAdd|                バッファリストにバッファを追加した直後
247 |BufCreate|             バッファリストにバッファを追加した直後
248 |BufDelete|             バッファリストからバッファを削除する前
249 |BufWipeout|            完全にバッファを削除する前
251 |BufFilePre|            カレントバッファの名前を変える前
252 |BufFilePost|           カレントバッファの名前を変えた後
254 |BufEnter|              バッファに入った後
255 |BufLeave|              別のバッファへ移る前
256 |BufWinEnter|           バッファがウィンドウに表示された後
257 |BufWinLeave|           バッファがウィンドウから削除される前
259 |BufUnload|             バッファをアンロードする前
260 |BufHidden|             バッファが隠れバッファになった直後
261 |BufNew|                新規バッファを作成した直後
263 |SwapExists|            既存のスワップファイルを検出したとき
265         オプション
266 |FileType|              オプション'filetype'がセットされたとき
267 |Syntax|                オプション'syntax'がセットされたとき
268 |EncodingChanged|       オプション'encoding'が変更された後
269 |TermChanged|           オプション'term'が変更された後
271         起動と終了
272 |VimEnter|              全ての起動処理が終わった後
273 |GUIEnter|              GUIの起動が成功した後
274 |TermResponse|          |t_RV|に対する端末の反応を受け取った後
276 |VimLeavePre|           Vimを終了する前、viminfoファイルを書き出す前
277 |VimLeave|              Vimを終了する前、viminfoファイルを書き出した後
279         その他
280 |FileChangedShell|      編集を始めた後にファイルが変更されたことを検出したとき
281 |FileChangedShellPost|  編集を始めた後にファイルが変更されたことに対処した後
282 |FileChangedRO|         読み込み専用ファイルに対して最初に変更を加える前
284 |ShellCmdPost|          シェルコマンドを実行した後
285 |ShellFilterPost|       シェルコマンドでフィルタをかけた後
287 |FuncUndefined|         呼び出そうとしたユーザ定義コマンドが定義されていなかっ
288                         たとき
289 |SpellFileMissing|      スペリングファイルを使おうとしたが見つからなかったとき
290 |SourcePre|             Vimスクリプトを読み込む前
291 |SourceCmd|             Vimスクリプトを読み込む前 |Cmd-event|
293 |VimResized|            Vimのウィンドウサイズが変わったとき
294 |FocusGained|           Vimが入力フォーカスを得たとき
295 |FocusLost|             Vimが入力フォーカスを失ったとき
296 |CursorHold|            ユーザが一定時間キーを押さなかったとき
297 |CursorHoldI|           インサートモードでユーザが一定時間キーを押さなかった
298                         とき
299 |CursorMoved|           ノーマルモードでカーソルが移動したとき
300 |CursorMovedI|          インサートモードでカーソルが移動したとき
302 |WinEnter|              別のウィンドウに入った後
303 |WinLeave|              ウィンドウから離れる前
304 |TabEnter|              別のタブページに入った後
305 |TabLeave|              タブページから離れる前
306 |CmdwinEnter|           コマンドラインウィンドウに入った後
307 |CmdwinLeave|           コマンドラインウィンドウから離れる前
309 |InsertEnter|           インサートモードを開始したとき
310 |InsertChange|          インサートや上書きモードで<Insert>をタイプしたとき
311 |InsertLeave|           インサートモードを抜けるとき
313 |ColorScheme|           カラースキームを読み込んだ後
315 |RemoteReply|           Vimサーバからの返答を受け取ったとき
317 |QuickFixCmdPre|        QuickFixコマンドを実行する前
318 |QuickFixCmdPost|       QuickFixコマンドを実行した後
320 |SessionLoadPost|       セッションファイルを読み込んだ後
322 |MenuPopup|             ポップアップメニューを表示する直前
324 |User|                  ":duautocmd"との組合せで使われる
326 自動コマンドイベントのアルファベット順リスト:         *autocmd-events-abc*
328                                                         *BufCreate* *BufAdd*
329 BufAdd or BufCreate             バッファリストに追加されるバッファを作った直後
330                                 か、バッファをバッファリストに追加した直後。
331                                 バッファリスト内のバッファがリネームされた直後
332                                 にも発生する。
333                                 イベント BufCreate は歴史上の理由で存在してい
334                                 る。
335                                 NOTE: このイベントで自動コマンドが実行された
336                                 ときは、"%" で表されるカレントバッファと
337                                 "<afile>" で表される作成されたバッファは異なる
338                                 かもしれないことに注意。
339                                                         *BufDelete*
340 BufDelete                       バッファリストからバッファを削除する前。(バッ
341                                 ファが読み込まれているなら) BufUnload が最初に
342                                 呼び出されるだろう。
343                                 また、バッファリスト内のバッファがリネームされ
344                                 た直前にも使われる。
345                                 NOTE: このイベントで自動コマンドが実行された
346                                 ときは、"%" で表されるカレントバッファと
347                                 "<afile>" と "<abuf>" で表される解放されるバッ
348                                 ファとは異なるかもしれないことに注意。
349                                 他のバッファに切り替えないこと。もしすると問題
350                                 が発生するだろう。
351                                                         *BufEnter*
352 BufEnter                        バッファに入った後。ファイルタイプに関するオプ
353                                 ションの設定に便利である。バッファの編集を始め
354                                 るときにも、BufReadPost の自動コマンドの後に
355                                 実行される。
356                                                         *BufFilePost*
357 BufFilePost                     現在のバッファの名前をコマンド ":file" または
358                                 ":saveas" で変更した後。
359                                                         *BufFilePre*
360 BufFilePre                      現在のバッファの名前をコマンド ":file" または
361                                 ":saveas" で変更する前。
362                                                         *BufHidden*
363 BufHidden                       バッファが隠れ状態 (hidden) になった直後。つま
364                                 りそのバッファを表示するウィンドウがもう存在し
365                                 ないのに、バッファが解放されなかったり、削除さ
366                                 れないとき。":qa" や "q" でVimを終了するときに
367                                 は使われない。
368                                 NOTE: このイベントで自動コマンドが実行された
369                                 ときは、"%" で表されるカレントバッファと
370                                 "<afile>" で表される解放されるバッファとは異な
371                                 るかもしれないことに注意。
372                                                         *BufLeave*
373 BufLeave                        他のバッファに移る前。カレントウィンドウを離れ
374                                 たり、閉じたりするときで、新しいカレントウィン
375                                 ドウが同じバッファを開いていないとき。":qa" や
376                                 "q" でVimを閉じるときには使われない。
377                                                         *BufNew*
378 BufNew                          新しいバッファを作った直後。バッファがリネーム
379                                 された直後にも発生する。バッファがバッファリス
380                                 トに追加されると、イベント BufAdd も発生する。
381                                 NOTE: このイベントで自動コマンドが実行された
382                                 ときは、"%" で表されるカレントバッファと
383                                 "<afile>" で表される解放されるバッファとは異な
384                                 るかもしれないことに注意。
385                                                         *BufNewFile*
386 BufNewFile                      存在しないファイルの編集を始めたとき。スケルト
387                                 ンファイル (訳注: テンプレートファイルともいう)
388                                 に読み込むときに使える。
389                                                 *BufRead* *BufReadPost*
390 BufRead or BufReadPost          新しいバッファの編集を始めたときの、ファイルを
391                                 バッファに読み込んだ後で、モードラインを実行す
392                                 る前。モードラインを実行した後に何かするには
393                                 |BufWinEnter|を参照してください。これは ":r
394                                 file" には「動作しない」。ファイルが存在しない
395                                 ときも使えない。またファイルの復旧に成功したと
396                                 きにも使われる。
397                                                         *BufReadCmd*
398 BufReadCmd                      新しいバッファの編集を始める前。ファイルをバッ
399                                 ファ内に読み込む役目を負う。 |Cmd-event|
400                                                 *BufReadPre* *E200* *E201*
401 BufReadPre                      新しいバッファの編集を始めたときの、ファイルを
402                                 バッファに読み込む前。読み込むファイルが存在し
403                                 ないときは使えない。
404                                                         *BufUnload*
405 BufUnload                       バッファを解放する前。これは、バッファ内のテキ
406                                 ストが解放されるときである。BufWritePost の後
407                                 で、BufDelete の前かもしれない。Vimが終了しよ
408                                 うとしているとき、読み込まれた全てのバッファに
409                                 ついて発生する。
410                                 NOTE: このイベントで自動コマンドが実行された
411                                 ときは、"%" で表されるカレントバッファと
412                                 "<afile>" で表される解放されるバッファとは異な
413                                 るかもしれないことに注意。
414                                 他のバッファに切り替えないこと。もしすると問題
415                                 が発生するだろう。
416                                                         *BufWinEnter*
417 BufWinEnter                     バッファがウィンドウ内に表示された後。これはバッ
418                                 ファが読み込まれたとき (モードラインの処理後)
419                                 か、隠れ (hidden) バッファがウィンドウ内に表示
420                                 されたとき (もう隠れバッファでなくなったとき)。
421                                 引数なしで |:split| をしたときや、既にウィンド
422                                 ウに表示されているバッファを指定して ":split"
423                                 をしたときは、同じバッファを開いたままなので、
424                                 このイベントは発生しない。既存のバッファがその
425                                 まま使われるためである。しかし、カレントバッファ
426                                 の名前を指定して":split" をすると、そのバッファ
427                                 を再読み込みすることになるので、発生する。
428                                                         *BufWinLeave*
429 BufWinLeave                     バッファがウィンドウから取り除かれる前。そのバッ
430                                 ファが別のウィンドウ内で表示中ならば発生しない。
431                                 Vimの終了時にも発生する。イベント BufUnload や
432                                 BufHidden よりも前に発生する。
433                                 NOTE: このイベントで自動コマンドが実行された
434                                 ときは、"%" で表されるカレントバッファと
435                                 "<afile>" で表される解放されるバッファとは異な
436                                 るかもしれないことに注意。
437                                 他のバッファに切り替えないこと。もしすると問題
438                                 が発生するだろう。
439                                                         *BufWipeout*
440 BufWipeout                      バッファを完全に削除する前。イベント BufUnload
441                                 と BufDelete が先に発生するかもしれない (バッ
442                                 ファが読み込まれていて、バッファリスト内に存在
443                                 するなら)。バッファがリネームされる直前にも発
444                                 生する (そのバッファがバッファリスト内になくと
445                                 も)。
446                                 NOTE: このイベントで自動コマンドが実行された
447                                 ときは、"%" で表されるカレントバッファと
448                                 "<afile>" で表される解放されるバッファとは異な
449                                 るかもしれないことに注意。
450                                                 *BufWrite* *BufWritePre*
451 BufWrite or BufWritePre         バッファ全体をファイルに書き込む前。
452                                                         *BufWriteCmd*
453 BufWriteCmd                     バッファ全体をファイルに書き込む前。ファイルへ
454                                 の書き込みの役目を負い、成功したときはオプショ
455                                 ン 'modified' をオフにする。バッファの内容を変
456                                 更すべきではない。 |Cmd-event|
457                                                         *BufWritePost*
458 BufWritePost                    バッファ全体をファイルに書き込んだ後 (イベント
459                                 BufWritePre によるコマンドをアンドゥする役目を
460                                 果たす)。
461                                                         *CmdwinEnter*
462 CmdwinEnter                     Command-lineウィンドウに入った後。この特殊なウィ
463                                 ンドウに対してのみオプションを設定するのに便利
464                                 である。このイベントはイベント BufEnter や
465                                 WinEnter の「代わりに」発生する。
466                                 <afile> は、command-lineの種類を示す1文字に設
467                                 定される。 |cmdwin-char|
468                                                         *CmdwinLeave*
469 CmdwinLeave                     Command-lineウィンドウから出る前。イベント
470                                 CmdwinEnter で行ったグローバル設定を消去するの
471                                 に便利である。このイベントは BufLeave や
472                                 WinLeave の「代わりに」発生する。
473                                 <afile> は、command-lineの種類を示す1文字に設
474                                 定される。 |cmdwin-char|
475                                                         *ColorScheme*
476 ColorScheme                     カラースキームを読み込んだ後。 |:colorscheme|
477                                                         *CursorHold*
478 CursorHold                      'updatetime' の時間の間、ユーザがキーを押さな
479                                 かったとき。ユーザーが何かキーを押すまで、再び
480                                 発生することはない (例えば、もしあなたがコーヒー
481                                 を入れるためにVimの前を離れても、その間の
482                                 'updatetime' ミリ秒ごと発生することはない :-)。
483                                 タグをプレビューするためには、
484                                 |CursorHold-example| を参照。
485                                 このイベントはノーマルモードのときのみ呼ばれる。
486                                 コマンドの引数の入力待ち状態、またはオペレータ
487                                 の後の移動コマンド入力待ち状態のときは発生しな
488                                 い。
489                                 レコーディングの最中にはCursorHoldイベントは発
490                                 生しない。|q|
491                                 Note: このイベントには対話的なコマンドは使えな
492                                 いことに注意。「続けるには」プロンプトは現れず、
493                                 スクリーンは必要に応じて直接更新される。
494                                 Note: 近いうちに、発生するまでの時間を設定する
495                                 別のオプションができるだろう。
496                                 ヒント: ステータスラインの更新を強制的に行うに
497                                 は、これを使うこと: >
498                                         :let &ro = &ro
499 <                               {Vi mのAmiga版、Unix版、Win32版、MSDOS版および
500                                 全てのGUI 版でのみ有効}
501                                                         *CursorHoldI*
502 CursorHoldI                     CursorHoldと同様だが、インサートモードのとき発
503                                 生する。
504                                                         *CursorMoved*
505 CursorMoved                     ノーマルモードでカーソルが移動した後。カーソル
506                                 行のテキストが変更されたときにも発生する
507                                 (例: "x", "rx", "p"などで)。
508                                 先行入力があったりオペレータが実行待ちになって
509                                 いる場合は発生しない。
510                                 |match-parens|の例を参照。
511                                 注意: ユーザが予期しないことや時間のかかる処理
512                                 は行わないこと。
513                                                         *CursorMovedI*
514 CursorMovedI                    インサートモードでカーソルが移動した後。それ以
515                                 外はCursorMovedと同じ。
516                                                         *EncodingChanged*
517 EncodingChanged                 オプション 'encoding' が変更されたとき。例えば、
518                                 フォント等の設定に便利である。
519                                                         *FileAppendCmd*
520 FileAppendCmd                   ファイルに追加する前。ファイルへの追加の役目を
521                                 負う。 |Cmd-event|
522                                                         *FileAppendPost*
523 FileAppendPost                  ファイルに追加した後。
524                                                         *FileAppendPre*
525 FileAppendPre                   ファイルに追加する前。
526                                                         *FileChangedRO*
527 FileChangedRO                   読み込み専用ファイルに最初の変更を加える前。ソー
528                                 ス管理システム (訳注: CVSやRCS) からファイルを
529                                 チェックアウトするのに使われる。変更が
530                                 自動コマンドによるときには発生しない。
531                                 このイベントが発生するのは、バッファに最初の変
532                                 更を行うときや、'readonly'がセットされた後に最
533                                 初の変更を行うときの、変更が適用される直前であ
534                                 る。
535                                 警告:自動コマンドでカーソルが動かされるときの動作は、
536                                 定義されていない。
537                                                         *E788*
538                                 ここで他のバッファに変更をしてはならない。バッ
539                                 ファを再読み込みするとはよいが、他のバッファを
540                                 編集してはならない。
541                                                         *FileChangedShell*
542 FileChangedShell                ファイルのタイムスタンプが、ファイルの編集が始
543                                 まってから変更されたことを発見したとき。
544                                 ファイルの属性が変更されたときにも使われる。
545                                 |timestamp|
546                                 大抵はシェルコマンドの実行後に発生する。またコ
547                                 マンド |:checktime| の実行後や、Vimが入力フォー
548                                 カスを一度失い、再び得たときにも発生する。
549                                 このイベントは変更されたファイルそれぞれに対し
550                                 て発生する。オプション 'autoread' がオンであり、
551                                 かつバッファが変更されていないときには使われな
552                                 い。もし FileChangedShell の自動コマンドが存
553                                 在しても、警告メッセージやプロンプトは現れない。
554                                 変数|v:fcs_reason|に何が起こったのかが設定され
555                                 、|v:fcs_choice|によってVimに次に何をすべきか
556                                 を指示できる。
557                                 NOTE: このイベントで自動コマンドが実行された
558                                 ときは、"%" で表されるカレントバッファと
559                                 "<afile>" で表される解放されるバッファとは異な
560                                 るかもしれないことに注意。
561                                 NOTE: この自動コマンドはカレントバッファを変
562                                 更したり、別のバッファにジャンプしたり、バッ
563                                 ファを消去してはいけない。 *E246* *E811*
564                                 NOTE: このイベントは、無限ループを避けるために
565                                 決してネストしてはいけない (入れ子にならない)。
566                                 つまり、FielChangedShellイベントの処理中は他の
567                                 FileChangedShellイベントは呼ばれない。
568                                                         *FileChangedShellPost*
569 FileChangedShellPost            Vimの外部でファイルが変更されたのを検出・対処
570                                 した後。ステータスラインを更新するのに使える。
571                                                         *FileEncoding*
572 FileEncoding                    時代遅れである。まだ有効だがイベント
573                                 |EncodingChanged| と同等である。
574                                                         *FileReadCmd*
575 FileReadCmd                     コマンド ":read" でファイルを読み込む前。ファ
576                                 イルを読み込む役目を負う。 |Cmd-event|
577                                                         *FileReadPost*
578 FileReadPost                    コマンド ":read" でファイルを読み込んだ後。
579                                 Note 読み込んだテキストの先頭行と末尾行には、
580                                 マーク '[ と '] が設定されることに注意。これは、
581                                 読み込まれた行に対して操作を行うのに使われる。
582                                                         *FileReadPre*
583 FileReadPre                     コマンド ":read" でファイルを読み込む前。
584                                                         *FileType*
585 FileType                        オプション 'filetype' が設定されたとき。
586                                 パターンはファイルタイプに対して照合される。
587                                 <afile> は 'filetype' が設定されたファイルの名
588                                 前として使える。<amatch> は 'filetype' の新し
589                                 い値として使える。
590                                 |filetypes| を参照。
591                                                         *FileWriteCmd*
592 FileWriteCmd                    バッファ全体を書き込まない場合の、ファイルに書
593                                 き込む前。ファイルへの書き込みの役目を負う。バッ
594                                 ファを変更すべきではない。 |Cmd-event|
595                                                         *FileWritePost*
596 FileWritePost                   バッファ全体を書き込まない場合の、ファイルに書
597                                 き込んだ後。
598                                                         *FileWritePre*
599 FileWritePre                    バッファ全体を書き込まない場合の、ファイルに書
600                                 き込む前。
601                                                         *FilterReadPost*
602 FilterReadPost                  フィルタコマンドからファイルを読み込んだ後。
603                                 Vimは FilterReadPre と同様に、現在のバッファの
604                                 名前に対してパターンを調べる。
605                                                         *FilterReadPre* *E135*
606 FilterReadPre                   フィルタコマンドからファイルを読み込む前。Vim
607                                 は、フィルタコマンドの出力である一時ファイルの
608                                 名前ではなく、現在のバッファの名前に対してパター
609                                 ンを調べる。
610                                                         *FilterWritePost*
611 FilterWritePost                 フィルタコマンド用のファイルを書き込んだり、差
612                                 分表示用のファイルを作った後。
613                                 Vimは FilterWritePre と同様、現在のバッファの
614                                 名前に対してパターンをチェックする。
615                                 'shelltemp'がオフのときは発生しない。
616                                                         *FilterWritePre*
617 FilterWritePre                  フィルタコマンド用のファイルを書き込んだり、差
618                                 分表示用のファイルを作る前。
619                                 Vimはフィルタコマンドの出力である一時ファイル
620                                 の名前ではなく、現在のバッファの名前に対してパ
621                                 ターンをチェックする。
622                                 'shelltemp'がオフのときは発生しない。
623                                                         *FocusGained*
624 FocusGained                     Vimが入力フォーカスを得たとき。GUI版と、入力
625                                 フォーカスを認識できるいくつかのコンソール版で
626                                 のみ有効。
627                                                         *FocusLost*
628 FocusLost                       Vimが入力フォーカスを失ったとき。GUI版と、入力
629                                 フォーカスを認識できるいくつかのコンソール版で
630                                 のみ有効。
631                                                         *FuncUndefined*
632 FuncUndefined                   ユーザ定義関数が使われたが、定義されていなかっ
633                                 たとき。必要なときのみ関数を定義するのに便利で
634                                 ある。パターンは関数名に対して照合される。
635                                 <amatch> と <afile> の両方とも関数名に設定され
636                                 る。|autoload-functions|を参照。
637                                                         *GUIEnter*
638 GUIEnter                        GUI の開始に成功し、ウィンドウを開いた後。
639                                 gvim を使ったときは、VimEnter の前に発生する。
640                                 ファイル .gvimrc からウィンドウの配置場所を設
641                                 定するために使うことができる。 >
642         :autocmd GUIEnter * winpos 100 50
643 <                                                       *GUIFailed*
644 GUIFailed                       GUIの開始に失敗した後。可能ならば、Vimはターミ
645                                 ナル内で実行を継続する(Unix系のみ。Xサーバへ接
646                                 続が失敗したとき)。ここでVimを終了させるには、
647                                 次のようにする: >
648         :autocmd GUIFailed * qall
649 <                                                       *InsertChange*
650 InsertChange                    インサート・上書きモードで<Insert>をタイプした
651                                 とき。変数|v:insertmode|が新しいモードを示す。
652                                 カーソルを移動したりなどユーザが予期しないこと
653                                 は行わないように注意。
654                                                         *InsertEnter*
655 InsertEnter                     インサートモード・上書きモード・Virtual上書き
656                                 モードを開始する直前。変数|v:insertmode|がモー
657                                 ドを示す。カーソルを移動したりなどユーザが予期
658                                 しないことは行わないように注意。
659                                                         *InsertLeave*
660 InsertLeave                     インサートモードを抜けるとき。CTRL-O
661                                 |i_CTRL-O|を使ったときにも発生する。|i_CTRL-C|
662                                 のときは発生しない。
663                                                         *MenuPopup*
664 MenuPopup                       (マウス右ボタンで)ポップアップメニューを表示す
665                                 る直前。カーソル下やマウスポインタの下にあるも
666                                 のによってメニューを調整するのに便利。
667                                 パターンにはモードを表す文字を記述する:
668                                         n       ノーマル
669                                         v       ビジュアル
670                                         o       オペレータ実行待ち
671                                         i       インサート
672                                         c       コマンドライン
673                                                         *QuickFixCmdPre*
674 QuickFixCmdPre                  QuickFixコマンドが実行される前 (|:make|,
675                                 |:lmake|, |:grep|, |:lgrep|, |:grepadd|,
676                                 |:lgrepadd|, |:vimgrep|, |:lvimgrep|,
677                                 |:vimgrepadd|, |:lvimgrepadd|)。パターンには実
678                                 行されるコマンドを記述する。|:grep|が書かれて
679                                 いると、'grepprg'が"internal"にセットされてい
680                                 ても実行される。このコマンドを使って変数
681                                 'makeprg'と'grepprg'を設定することはできない。
682                                 このコマンドでエラーになるとQuickFixコマンドは
683                                 実行されない。
684                                                         *QuickFixCmdPost*
685 QuickFixCmdPost                 QuickFixCmdPreと同様だが、QuickFixコマンドが実
686                                 行された後、最初の位置にジャンプする前に発生す
687                                 る。|QuickFixCmdPost-example| を参照。
688                                                         *RemoteReply*
689 RemoteReply                     サーバとして働くVimからの応答を受け取ったとき
690                                 |server2client()|。パターンは{serverid}に対し
691                                 て照合される。
692                                 <amatch> は応答が送られてきたサーバの
693                                 {serverid} になり、<afile> は応答の実際の内容
694                                 になる。
695                                 Note これに自動コマンドを定義したときも、応答
696                                 を読み込むのには、読み込んだ応答を処理できるよ
697                                 うに関数 |remote_read()| を使うべきであること
698                                 に注意。
699                                                         *SessionLoadPost*
700 SessionLoadPost                 |:mksession|で作られたセッションファイルを読み
701                                 込んだ後。
702                                                         *ShellCmdPost*
703 ShellCmdPost                    |:!cmd|, |:shell|, |:make|, |:grep|を使って
704                                 シェルコマンドを実行した後。変更されたファイル
705                                 をチェックするのに使える。
706                                                         *ShellFilterPost*
707 ShellFilterPost                 ":{range}!cmd", ":w !cmd", ":r !cmd"を使ってシ
708                                 ェルコマンドを実行した後。変更されたファイルを
709                                 チェックするのに使える。
710                                                         *SourcePre*
711 SourcePre                       Vimスクリプトを読み込む前。 |:source|
712                                 <afile>は読み込まれるファイルの名前となる。
713                                                         *SourceCmd*
714 SourceCmd                       Vimスクリプトを読み込むとき。|:source|
715                                 <afile>は読み込まれるファイルの名前となる。こ
716                                 の自動コマンドはこのファイルを読み込まねばなら
717                                 ない。
718                                                         *SpellFileMissing*
719 SpellFileMissing                スペルチェックファイルを読み込もうとしたが、見
720                                 つからなかったとき。パターンは言語に対して照合
721                                 される。<amatch>は言語。'encoding'も関係する。
722                                 |spell-SpellFileMissing|を参照。
723                                                         *StdinReadPost*
724 StdinReadPost                   標準入力からバッファへ読み込んだ後で、モードラ
725                                 インを実行する前。Vimを開始したときに引数 "-"
726                                 が使われた場合のみ使われる (|--| 参照)。
727                                                         *StdinReadPre*
728 StdinReadPre                    標準入力からバッファへ読み込む前。Vimを開始し
729                                 たときに引数 "-" が指定された場合のみ使われる
730                                 (|--| 参照)。
731                                                         *SwapExists*
732 SwapExists                      ファイルの編集を始めようとしてスワップファイル
733                                 が存在することを検出したとき。この状況に対応す
734                                 る方法を選択できるときだけユーザにどうするか問
735                                 い合わせる。
736                                 変数|v:swapname|が見つかったスワップファイルの
737                                 名前を保持する。<afile>は編集しようとしている
738                                 ファイルである。|v:swapcommand|が開かれたファ
739                                 イルで実行するコマンドを含んでいるかもしれな
740                                 い。
741                                 このコマンドは変数|v:swapchoice|をVimが次にど
742                                 うするべきかを示す1文字の文字列にセットしなけ
743                                 ればならない:
744                                         'o'     読み込み専用で開く
745                                         'e'     とにかくファイルを編集する
746                                         'r'     復元する
747                                         'd'     スワップファイルを削除する
748                                         'q'     ファイルを編集せずに終了する
749                                         'a'     CTRL-Cを押したのと同様に強制終
750                                                 了する
751                                 これが空文字列にセットされると、自動コマンド
752                                 SwapExistsが存在しないときと同様にユーザに問い
753                                 合わせをする。
754                                 注意: バッファを変更しようとしてはならない。そ
755                                 うすると予測できない結果になる。
756                                                         *E812*
757                                 ここでは他のバッファに切り替えること、バッファ
758                                 名を変更すること、ディレクトリを変更することは
759                                 許可されていない。
760                                                         *Syntax*
761 Syntax                          オプション 'syntax' が設定されたとき。
762                                 パターンは構文名に対して照合される。
763                                 <afile> は 'syntax' が設定されたファイルの名前
764                                 として使える。<amatch> は 'syntax' の新しい値
765                                 として使える。
766                                 |:syn-on| を参照。
767                                                         *TabEnter*
768 TabEnter                        タブページに入った直後 |tab-page|。WinEnterが
769                                 発生した後、BufEnterが発生する前。
770                                                         *TabLeave*
771 TabLeave                        タブページを離れる直前 |tab-page|。最初に
772                                 WinLeaveが発生する。
773                                                         *TermChanged*
774 TermChanged                     オプション 'term' を変更した後。色やフォント等、
775                                 ターミナル依存の設定を更新するために構文定義ファ
776                                 イルを再読み込みするのに便利である。読み込まれ
777                                 たバッファ全てで発生する。
778                                                         *TermResponse*
779 TermResponse                    |t_RV| に対する応答をターミナルから受け取った
780                                 とき。Vim変数 |v:termresponse| の値を使って、
781                                 ターミナルのヴァージョンに応じた処理ができる。
782                                                         *User*
783 User                            自動的に実行されることはない。コマンド
784                                 ":doautocmd" によってのみ実行される
785                                 自動コマンドのために使用される。
786                                                         *UserGettingBored*
787 UserGettingBored                ユーザが CTRL-C を打ち込んだとき。
788                                 ただの冗談! :-)
789                                                         *VimEnter*
790 VimEnter                        ファイル .vimrc の読み込みを含む、全てのスター
791                                 トアップ処理を行い、"-c cmd" の引数を実行し、
792                                 全てのウィンドウを構築し、それらにバッファを読
793                                 み込んだ後。
794                                                         *VimLeave*
795 VimLeave                        Vim を終了する前で、ファイル .viminfo を書き込
796                                 んだ後。VimLeavePre のように、ただ1度だけ実行
797                                 される。
798                                 異常終了の検出には |v:dying| を使うこと。
799                                                         *VimLeavePre*
800 VimLeavePre                     Vim を終了する前で、ファイル .viminfo を書き込
801                                 む直前。これは終了時にたまたまカレントバッファ
802                                 になったバッファの名前とマッチしたときに、ただ
803                                 1度だけ実行される。 大抵、パターンには "*" を
804                                 使うと便利である。 >
805         :autocmd VimLeavePre * call CleanupStuff()
806 <                               異常終了の検出には |v:dying| を使うこと。
807                                                         *VimResized*
808 VimResized                      Vimウィンドウのサイズが変わったとき。よって
809                                 'lines'と'columns'が変更される。しかし開始時
810                                 には発生しない。
811                                                         *WinEnter*
812 WinEnter                        別のウィンドウに入った後。Vimの開始直後、1個目
813                                 のウィンドウに入ったときは発生しない。ウィンド
814                                 ウの高さを設定するのに便利である。
815                                 そのウィンドウで他のバッファを開いていたときは、
816                                 イベント Winenter の後に BufEnter が発生する。
817                                 Note: ":split fname" を実行したとき、WinEnter
818                                 が発生するのは、ウィンドウ分割の後だがファイル
819                                 "fname" が読み込まれる前の時点である。
820                                                         *WinLeave*
821 WinLeave                        ウィンドウを離れる前。次に入るウィンドウで他の
822                                 バッファを開いていたときは、イベント WinLeave
823                                 の前に BufLeave が発生する (ただし ":new" を使っ
824                                 たときはそうならない)。
825                                 ":qa" や"q" でVimを終了するときには発生しない。
827 ==============================================================================
828 6. パターン                                 *autocmd-patterns* *{pat}*
830 ファイルパターン {pat} がファイル名とマッチするかどうかは、2通りの方法で調べら
831 れる。
832 1. パターンに '/' が含まれないとき: Vimはファイル名の後ろの部分からのみマッチ
833    を調べる (ファイル名の前につくディレクトリパスは除く)。
834 2. パターンに '/' が含まれるとき: Vimは短いファイル名 (ユーザが打ち込んだもの)
835    と長いファイル名 (短いファイル名をフルパスに展開し、シンボリックリンクなら
836    その実体を探したもの) との両方から一致を調べる。
838 例: >
839         :autocmd BufRead *.txt          set et
840 全てのテキストファイルに対しオプション 'expandtab' をオンにする。 >
842         :autocmd BufRead /vim/src/*.c   set cindent
843 ディレクトリ /vim/src 内のC言語ファイルに対しオプション 'cindent' をオンにす
844 る。 >
846         :autocmd BufRead /tmp/*.c       set ts=5
847 "/tmp/test.c" から "/home/nobody/vim/src/test.c" にリンクを張っていると、
848 "/tmp/test.c" の編集を始めたとき、この自動コマンドは実行される。
850 Note: パスの途中だけにマッチさせ、ルートディレクトリにマッチさせたくないとき
851 は、最初の1文字目に '*' を使う。例: >
852         :autocmd BufRead */doc/*.txt    set tw=78
853 この自動コマンドは、例えば "/tmp/doc/xx.txt" や "/usr/home/piet/doc/yy.txt"
854 にマッチする。ここで、ディレクトリの深さは関係ない。
857 パターンがマッチするファイル名は、ワイルドカードを展開した後のものである。その
858 ため、次のコマンドを実行すると >
859         :e $ROOTDIR/main.$EXT
860 まずコマンドの引数は、ファイル名が自動コマンドのパターンにマッチする前に、次
861 のように展開される。 >
862         /usr/root/main.py
863 イベント FileReadCmd 等を使うときにはこれに注意すること。<amatch> の値が、ユー
864 ザの予期するものと違うかもしれない。
867 パターンの中で環境変数を使うこともできる。 >
868         :autocmd BufRead $VIMRUNTIME/doc/*.txt  set expandtab
869 環境変数 $HOME が定義されているなら、~ をホームディレクトリとして使うこともで
870 きる。 >
871         :autocmd BufWritePost ~/.vimrc   so ~/.vimrc
872         :autocmd BufRead ~archive/*      set readonly
873 環境変数は、自動コマンドが定義されるときに展開される。自動コマンドが実行される
874 ときではない。これは command とは違っている!
876                                                         *file-pattern*
877 パターンの解釈方法は、ファイル名の解釈方法と大体同じである。
878         *       はあらゆる文字の列にマッチ
879         ?       はあらゆる1文字にマッチ
880         \?      は '?' にマッチ
881         .       は '.' にマッチ
882         ~       は '~' にマッチ
883         ,       はパターンを分割する
884         \,      は ',' にマッチ
885         { }     は |pattern| の \( \) と同様
886         ,       ('{' '}' の内側では) |pattern| の \| と同様
887         \       は |pattern| で使われるものと同様の特別な意味を持つ
888         [ch]    は 'c' または 'h' にマッチ
889         [^ch]   は 'c' と 'h' 以外の文字にマッチ
891 '/' という文字は、全てのシステムでパスの区切り文字に使われることに注意すること
892 (MS-DOSとOS/2でさえも)。これは、パターン内でバックスラッシュを使うことが難しい
893 上に、別々のシステムでも自動コマンドが動作するようにするためである。
895                                                         *autocmd-changes*
896 パターンマッチの検索は、イベントの発生時に行われる。自動コマンドのどれかでバッ
897 ファ名を変更しても、それどころかバッファを削除しても、実行される 自動コマンド
898 は変わらない。例: >
900         au BufEnter *.foo  bdel
901         au BufEnter *.foo  set modified
903 これはカレントバッファを削除し、代わりにカレントバッファになったバッファ内でオ
904 プション 'modified' をオンにする。Vimは "*.foo" が新しいカレントバッファのバッ
905 ファ名にマッチしなくとも気にしない。"*.foo" はイベントが発生した時点でのバッファ
906 名にマッチする。
908 しかし、|:bwipe|でワイプアウトされたバッファに対しては、バッファローカルな
909 自動コマンドは実行されない。|:bdel|で削除されたバッファは実際にはまだ存在して
910 いる(リストされなくなっただけ)なので、自動コマンドは実行される。
912 ==============================================================================
913 7. バッファローカルな自動コマンド      *autocmd-buflocal*
914                                         *autocmd-buffer-local*
915                                         *<buffer=N>* *<buffer=abuf>* *E680*
917 バッファローカルな自動コマンドは特定のバッファに結びつけられている。これは名前
918 を持たないバッファや特定のパターンにマッチしない名前のバッファに使うと便利であ
919 る。しかしそれぞれのバッファに明示的に追加する必要がある。
921 バッファローカルな自動コマンドはパターンの代わりに以下の形式のどれかを使う:
922         <buffer>        カレントバッファ
923         <buffer=99>     バッファ番号99
924         <buffer=abuf>   <abuf> の使用(自動コマンドを実行するときのみ)
925                         |<abuf>|
927 例: >
928     :au CursorHold <buffer>  echo 'hold'
929     :au CursorHold <buffer=33>  echo 'hold'
930     :au CursorHold <buffer=abuf>  echo 'hold'
932 自動コマンドに対するコマンドは全てバッファローカルな自動コマンドに対しても機能
933 する。パターンの代わりに特別な文字列を使う。例: >
934     :au! * <buffer>                  " カレントバッファのバッファローカル自動
935                                      " コマンドを削除する
936     :au! * <buffer=33>               " バッファ#33のバッファローカル自動コマン
937                                      " ドを削除する。
938     :bufdo :au! CursorHold <buffer>  " 全バッファから指定されたイベントに対す
939                                      " る自動コマンドを削除する
940     :au * <buffer>                   " カレントバッファのバッファローカル自動
941                                      " コマンドをリストする
943 カレントバッファに対して自動コマンドを定義するとき、それがバッファ番号とともに
944 保存されることに注意。つまりカレントバッファ番号が12なら"<buffer=12>"という形
945 になる。例えば自動コマンドをリストするときこの形式で表示される。
947 バッファローカル自動コマンドが存在するかを判定するには関数|exists()|を次のよう
948 に使う: >
949     :if exists("#CursorHold#<buffer=12>") | ... | endif
950     :if exists("#CursorHold#<buffer>") | ... | endif    " for current buffer
952 バッファがワイプアウトされると当然バッファローカル自動コマンドも失われる。
953 ":bdel"などでバッファを削除するときは、それがリストからなくなるだけで、自動コ
954 マンドはまだ存在していることに注意。バッファローカル自動コマンドの削除を表示さ
955 せるにはこうする: >
956     :set verbose=6
958 存在しないバッファに対してバッファローカル自動コマンドを定義することはできな
959 い。
961 ==============================================================================
962 8. グループ                                         *autocmd-groups*
964 自動コマンドはグループにまとめることができる。これは一連の自動コマンドを取り
965 除いたり実行したりする際に便利である。例えば、構文強調表示のための全ての
966 自動コマンドはグループ "highlight" に入っていて、GUIの開始時に
967 ":doautoall highlight BufRead" で実行できる。
969 特定のグループが選択されないとき、既定のグループが使われる。既定のグループには
970 名前がない。既定のグループから個別に自動コマンドを実行することはできない。そ
971 れらを実行できるのは、全てのグループに対する自動コマンドを実行するときのみで
972 ある。
974 普通、自動コマンドを自動的に実行するときは、全てのグループに対する 自動コマンド
975 が使われる。グループが問題になってくるのは、":doautocmd" や ":doautoall" によっ
976 て自動コマンドを実行するときと、自動コマンドを定義したり削除するときである。
978 グループ名には空白を除く全ての文字が使える。"end" というグループ名は予約語になっ
979 ている (大文字も)。
981 グループ名では大文字と小文字を区別して扱う。イベントの名前とは違うことに注意し
982 てください。
984                                                         *:aug* *:augroup*
985 :aug[roup] {name}               後に続くコマンド ":autocmd" のためのグループ名
986                                 を定義する。{name} を "end" や "END" にすると
987                                 既定のグループが選ばれる。
989                                                 *:augroup-delete* *E367*
990 :aug[roup]! {name}              自動コマンドのグループ {name} を削除する。その
991                                 グループを使っている自動コマンドがまだあるな
992                                 ら、これは使わないこと!その点はチェックされな
993                                 い。
995 特定のグループとして自動コマンドを定義するには、次の手順に従うこと。
996 1. ":augroup {name}" によってグループを選択する。
997 2. ":au!" によって古い自動コマンドを全て消去する。
998 3.自動コマンドを定義する。
999 4. ":augroup END" によって既定のグループに戻る。
1001 例: >
1002         :augroup uncompress
1003         :  au!
1004         :  au BufEnter *.gz     %!gunzip
1005         :augroup END
1007 これで自動コマンドを (例えばファイル .vimrc を再び読み込んだ後) 2回定義するこ
1008 とが防げる。
1010 ==============================================================================
1011 9. 自動コマンドの実行                            *autocmd-execute*
1013 自動コマンドは「自動的」でなくとも実行できる。これはあなたが自動コマンドを変
1014 更したときや、間違った自動コマンドが実行されたとき (つまりファイルパターンの
1015 マッチングが間違っていたとき) に便利である。
1017 NOTE オプション 'eventignore' はここにも適用されることに注意。ここに列挙された
1018 イベントでは、どんな自動コマンドも実行されない。
1020                                         *:do* *:doau* *:doautocmd* *E217*
1021 :do[autocmd] [group] {event} [fname]
1022                         [fname] (省略するとカレントファイルの名前) にマッチす
1023                         る、{event} のための自動コマンドをカレントバッファに
1024                         適用する。カレントファイル名が正しいファイルパターンに
1025                         マッチしないときや設定を変えた後、またはあるイベントの
1026                         ために自動コマンドを実行するために使用できる。
1027                         これを自動コマンドの内部で実行することも可能である。
1028                         だから、ある拡張子用の自動コマンドを元にして別の拡張
1029                         子用のものを作ることができる。例: >
1030                                 :au Bufenter *.cpp so ~/.vimrc_cpp
1031                                 :au Bufenter *.cpp doau BufEnter x.c
1032 <                       無限の循環に陥らないよう注意すること。また
1033                         |autocmd-nested| を参照すること。
1035                         引数 [group] が省かれると、全てのグループの
1036                         自動コマンドが実行される。 [group] が指定されると、そ
1037                         れにマッチするグループの自動コマンドのみが実行される。
1038                         NOTE 定義されていないグループ名を使うと、エラーメッセー
1039                         ジが表示される。
1041                         自動コマンドを適用した後にモードラインが処理される。ファ
1042                         イルを編集するときと同じように、自動コマンドでなされた
1043                         設定を上書きするためである。
1045                                                 *:doautoa* *:doautoall*
1046 :doautoa[ll] [group] {event} [fname]
1047                         ":doautocmd" と似ているが、読み込まれたバッファそれぞ
1048                         れに自動コマンドを適用する。[fname]は自動コマンドを選
1049                         択するのに使われます。コマンドを適用するバッファではあ
1050                         りません。(訳注: |:autocmd|の{pat}に使う?)
1051                         注意: このコマンドで、バッファを削除したり、バッファを
1052                         変えたり、バッファの内容を変えるような自動コマンドを
1053                         実行しないこと。結果は予期できない。このコマンドは、オ
1054                         プションを設定したり、構文強調表示を変えたりする
1055                         自動コマンドのためのものである。
1057 ==============================================================================
1058 10. 自動コマンドを使う                                   *autocmd-use*
1060 「ファイルの書き込み」には、4組のイベントが起こりうる。1回の書き込みコマンドで
1061 は、これらのうち1組しか使われない。
1063 BufWriteCmd     BufWritePre     BufWritePost    バッファ全体を書き込む
1064                 FilterWritePre  FilterWritePost フィルタ用一時ファイルに書込む
1065 FileAppendCmd   FileAppendPre   FileAppendPost  ファイルに追加する
1066 FileWriteCmd    FileWritePre    FileWritePost   その他の書き込み
1068 "*Cmd" にマッチする自動コマンドがあるときは、それが書き込み作業を行うものと想
1069 定される。書き込みはそれ以上行われず、他のイベントも発生しない。 |Cmd-event|
1071 Note イベント *WritePost による自動コマンドは、イベント *WritePre による
1072 自動コマンドの引き起こしたバッファに対する変化を、どのようなものでもアンドゥす
1073 べきであることに注意。さもないと、ファイルの書き込みがバッファを変更するという
1074 副作用を持ってしまう。
1076 あるバッファの中の行をファイルに書き込むとき、自動コマンドを実行する前にそのバッ
1077 ファが一時的にカレントバッファになる。自動コマンドがカレントバッファを変更した
1078 り、元のカレントバッファを消去しない限り、カレントバッファは再び元に戻る。
1080 イベント *WritePre や *AppendPre による自動コマンドは、書き込み元のバッファを
1081 削除してはならない。
1083 マーク '[ と '] は特別な位置を記憶している。
1084 - イベント *ReadPre の前に、新しい行が挿入される所の上の行にマーク '[ が設定
1085   される。
1086 - イベント *ReadPost の前に、読み込まれた最初の行にマーク '[ が、最後の行にマー
1087   ク '] が設定される。
1088 - イベント *WriteCmd, *WritePre と *AppendPre による自動コマンドが実行される前
1089   に、書き込まれる最初の行にマーク '[ が、最後の行にマーク '] が設定される。
1090 注意: バッファを変更するコマンドを使うと、'[ と '] の場所も変更される。
1092 ファイル名を必要とするコマンドでは、読み込まれるファイル名に "<afile>" を使う
1093 ことができる (カレントファイル名に "%" を使うこともできる) |:<afile>|。現在有
1094 効なバッファ番号には "<abuf>" を使うことができる。これは名前を持たないバッファ
1095 に対しても有効だが、バッファを持たないファイルには使えない (例えば、":r file"
1096 で読み込まれたファイル)。
1098                                                         *gzip-example*
1099 圧縮されたファイルを読み書きする例: >
1100   :augroup gzip
1101   :  autocmd!
1102   :  autocmd BufReadPre,FileReadPre     *.gz set bin
1103   :  autocmd BufReadPost,FileReadPost   *.gz '[,']!gunzip
1104   :  autocmd BufReadPost,FileReadPost   *.gz set nobin
1105   :  autocmd BufReadPost,FileReadPost   *.gz execute ":doautocmd BufReadPost " . expand("%:r")
1106   :  autocmd BufWritePost,FileWritePost *.gz !mv <afile> <afile>:r
1107   :  autocmd BufWritePost,FileWritePost *.gz !gzip <afile>:r
1109   :  autocmd FileAppendPre              *.gz !gunzip <afile>
1110   :  autocmd FileAppendPre              *.gz !mv <afile>:r <afile>
1111   :  autocmd FileAppendPost             *.gz !mv <afile> <afile>:r
1112   :  autocmd FileAppendPost             *.gz !gzip <afile>:r
1113   :augroup END
1115 グループ "gzip" は、":autocmd!" で既存の自動コマンドを全て削除できるようにす
1116 るために使われている。これはスクリプトファイルが2回読み込まれたときのためであ
1117 る。
1119 ("<afile>:r" は拡張子のないファイル名である。|:_%:| を参照)
1121 イベント BufNewFile, BufRead/BufReadPost, BufWritePost, FileAppendPost,
1122 VimLeave によって実行された自動コマンドは、バッファの被修正フラグを切り替えな
1123 い。BufReadPost による自動コマンドで、圧縮されているバッファを解凍したときは、
1124 ":q" でVimを終了することができる。BufWritePre による自動コマンドの起こした変
1125 更を戻すために BufWritePost で ":undo" を使ったときも、":q" を使うことができる
1126 ("ZZ" も可)。バッファが変更されたことにしたいなら、":set modified" とすること。
1128 自動コマンドからノーマルモードのコマンドを実行したいときは、コマンド ":normal"
1129 を使うこと。使うときは注意!ノーマルモードのコマンドが完結していないと、ユーザ
1130 が文字を打ち込まないといけない (例えば、":normal m" の後にはマーク名を打ち込ま
1131 ないといけない)。
1133 バッファの内容を変更した後に、変更されていないことにしたいなら、オプション
1134 'modified' をオフにすること。こうすると ":q!" ではなく ":q" でもVimを終了でき
1135 る。
1137                                                 *autocmd-nested* *E218*
1138 既定では、自動コマンドはネストしない (入れ子にならない)。自動コマンド内で ":e"
1139 や ":w" を使っても、これらに対してはイベント BufRead や BufWrite による
1140 自動コマンドは実行されない。もしこれを実行してほしいなら、ネストしてほしいコマ
1141 ンド内でフラグ "nested" を使うこと。例: >
1142         :autocmd FileChangedShell *.c nested e!
1143 再帰的ループを避けるために、ネストは10段階までに制限されている。
1145 自動コマンドの中でコマンド ":au" を使うこともできる。これは自己修正的 (訳注:
1146 原文 "self-modifying") なコマンドになりうる! これは1回だけ実行すべき
1147 自動コマンドに便利である。
1149 あるコマンドを実行するときだけ自動コマンドをスキップしたい場合は、修飾子
1150 |:noautocmd|を使うかオプション'eventignore'を使う。
1152 Note (":read file" やフィルタコマンドで) 読み込んだファイルの最後の行に <EOL>
1153 がないとき、Vimはこのことを記憶する。その次の (":write file" やフィルタコマン
1154 ドでの) 書き込みで、先ほどの最後の行が再び最後の行として書き込まれ、かつオプショ
1155 ン 'binary' がオンになっていると、<EOL> は付け足されない。これにより、読み込ま
1156 れた行に対するフィルタコマンドで、読み込まれた通りに書き出すことができる。また、
1157 フィルタ処理された行に対する書き込みのコマンドで、フィルタが出力した通りに書き
1158 出すことができる。例えば、圧縮されたファイルを書き込むもう一つの例は以下のよう
1159 になる。 >
1161   :autocmd FileWritePre *.gz   set bin|'[,']!gzip
1162   :autocmd FileWritePost *.gz  undo|set nobin
1164                                                         *autocommand-pattern*
1165 コンマで区切られた複数のパターンを指定することもできる。以下にいくつか例を挙げ
1166 る。 >
1168   :autocmd BufRead   *          set tw=79 nocin ic infercase fo=2croq
1169   :autocmd BufRead   .letter    set tw=72 fo=2tcrq
1170   :autocmd BufEnter  .letter    set dict=/usr/lib/dict/words
1171   :autocmd BufLeave  .letter    set dict=
1172   :autocmd BufRead,BufNewFile   *.c,*.h set tw=0 cin noic
1173   :autocmd BufEnter  *.c,*.h    abbr FOR for (i = 0; i < 3; ++i)<CR>{<CR>}<Esc>O
1174   :autocmd BufLeave  *.c,*.h    unabbr FOR
1176 Makefile (makefile, Makefile, imakefile, makefile.unix 等) にマッチさせるには
1177 こうする。 >
1179   :autocmd BufEnter  ?akefile*  set include=^s\=include
1180   :autocmd BufLeave  ?akefile*  set include&
1182 Cソースファイルを編集するとき、常に最初の関数から始めるにはこうする。 >
1184   :autocmd BufRead   *.c,*.h    1;/^{
1186 上の "1;" がないと、検索が始まる場所はファイルの最初ではなく、ファイルの挿入さ
1187 れた場所になる。
1189                                                 *skeleton* *template*
1190 新しいファイルを作るときにスケルトン (テンプレート) ファイルを読み込むにはこう
1191 する。 >
1193   autocmd BufNewFile  *.c       0r ~/vim/skeleton.c
1194   autocmd BufNewFile  *.h       0r ~/vim/skeleton.h
1195   autocmd BufNewFile  *.java    0r ~/vim/skeleton.java
1197 HTMLファイルを書き込むときに現在の日付と時刻を挿入したいならこうする (訳注:
1198 KoRoN氏作成のautodate.vimを使った方がよい) >
1200   :autocmd BufWritePre,FileWritePre *.html   ks|call LastMod()|'s
1201   :fun LastMod()
1202   :  if line("$") > 20
1203   :    let l = 20
1204   :  else
1205   :    let l = line("$")
1206   :  endif
1207   :  exe "1," . l . "g/Last modified: /s/Last modified: .*/Last modified: " .
1208   :  \ strftime("%Y %b %d")
1209   :endfun
1211 これを機能させるためには、ファイルの先頭から20行以内に"Last modified: <date
1212 time>" という行を入れる必要がある。Vimは <date time> (とその行内のそれ以後を)
1213 を現在の日付と時刻に置き換える。説明:
1214         ks              現在の位置をマーク 's' に設定する
1215         call LastMod()  関数 LastMod() を呼び出して実際の作業を行う
1216         's              カーソルを元の位置に戻す
1217 関数 LastMod() はファイルの長さが20行以下であるかを調べ、キーワード
1218 "Last modified: " の含まれる行を探すためにコマンド ":g" を実行する。キーワード
1219 の含まれる行に対しては ":s" が実行され、既存の日付を現在のものに置き換える。
1220 ":execute" は ":g" や ":s" で expression を使えるようにするためのものである。
1221 日付は関数 strftime() から得られる。 strftime() の引数を変更して、別の形の日付
1222 を得ることもできる。
1224 コマンドラインから自動コマンドを入力すると、(<Tab> や CTRL-D などで) イベント
1225 とコマンド名が適切に補完される。
1227 Vimはマッチする全ての自動コマンドをユーザの指定した順に実行する。ユーザが実行
1228 させる最初の自動コマンドにはファイルパターンに "*" を使い、全てのファイルに適
1229 用されるようにするとよい。これはつまり、あらゆる設定のための既定を好きなように
1230 定義することができ、もしマッチする自動コマンドが別にあれば、そちらの方が設定
1231 を上書きできるということである。しかしマッチする自動コマンドが他になければ、
1232 少なくともあなたの設定した既定は回復される (もし自動コマンドがマッチした別の
1233 ファイルから、マッチしなかったファイルに移っても)。 Note Unixのシェルと違い、
1234 "*" は"." で始まるファイルにもマッチすることに注意。
1236                                                     *autocmd-searchpat*
1237 自動コマンドは現在の検索パターンを変更しない。Vimは自動コマンドの実行前に現在
1238 の検索パターンを保存し、自動コマンドが終了してから復元する。つまり 自動コマンド
1239 はオプション 'hlsearch' で強調表示されている文字列に影響しないということである。
1240 自動コマンド内でも、例えばコマンド "n" 等で、検索パターンは普通に使用できる。
1241 もし自動コマンドの中で終了後に使う検索パターンを設定したいなら、 ":let @/ ="
1242 とすること。
1243 自動コマンドの中で ":nohlsearch" を使って、検索語の強調表示を無効にすることは
1244 できない。Vimの開始時に検索語の強調表示を行わないためには、'viminfo' のフラグ
1245 'h' を使うこと。
1247                                                         *Cmd-event*
1248 イベント "*Cmd" のうちどれかを使うと、それによる自動コマンドが読み込み、書き
1249 込み、またはsourceを行うものと想定される。これは特殊なファイル、例えばリモート
1250 システム上のファイルに作業をするときに使える。
1251 注意: これらのイベントを誤った方法で使うと、そのイベントが発生するファイルの読
1252 み書きが不可能になってしまう。自分の自動コマンドをしっかりテストすること。最
1253 良の方法は、普通のファイル名には決してマッチしないパターン (例えば "ftp://*")
1254 を使うことである。
1256 BufReadCmd に対して自動コマンドを定義すると、クラッシュしたセッションの復旧が
1257 難しくなる。元のファイルから復旧するとき、Vimはスワップファイル内に見つからな
1258 かった部分のみを読み込む。それは BufReadCmd の自動コマンドを使ったときは不可
1259 能なので、コマンド |:preserve| を使って元のファイルが復旧に必要ないようにする
1260 こと。そうするのはファイルが変更を受けたと判断したときのみでもよい。
1262 読み込みと書き込みのコマンドの場合、Vim変数 |v:cmdarg| は引数 "++enc=" と
1263 "++ff=" の、有効だったものを保持している。これらはファイルを読み書きするコマン
1264 ドで使われるべきである。Vim変数 |v:cmdbang|はコマンドに"!"が使われたときに 1。
1265 そうでないときに 0 が設定される。
1267 例は標準プラグイン $VIMRUNTIME/plugin/netrw.vim を参照。
1269 ==============================================================================
1270 11. 自動コマンドを無効にする                                *autocmd-disable*
1272 一時的に自動コマンドを無効にするにはオプション'eventignore'を使う。これは予期
1273 しない振るまいを引き起こす可能性がある。|:finally|つきの|:try|ブロックを使って
1274 後で'eventignore'を元に戻すようにすること。
1276                                                         *:noautocmd* *:noa*
1277 1つのコマンドを実行する間だけ自動コマンドを無効にするには修飾子":noautocmd"を
1278 使う。これは後に続くコマンドを実行する間だけ、'eventignore'を"all"にセットす
1279 る。例: >
1281         :noautocmd w fname.gz
1283 これはgzipプラグインで定義された自動コマンドを発生させずにファイルを書き込む。
1286  vim:tw=78:ts=8:ft=help:norl: