1 *autocmd.txt* For Vim バージョン 7.2. Last change: 2009 Nov 25
4 VIM REFERENCE MANUAL by Bram Moolenaar
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 に書き込む。
37 注意:自動コマンドは大変強力であるので、思いも寄らない副作用をもたらすことがあ
38 る。テキストを壊さないように注意しなければならない。
39 - 捨ててもよいようなファイルのコピーに対して、最初にテストしておくのがよい。例
40 えば、ファイルの編集開始時にファイルを解凍する自動コマンドを使うときには、
41 書き込みするときに圧縮を行う自動コマンドが正しく働くか確かめること。
42 - 実行中のエラー (例えばディスクが満杯になる) に対して、対処の準備をしておかな
43 ければならない。バッファへの変更に対しては大抵アンドゥができるが、他のファイ
44 ルへの変更は、自分で処理しなければならないかもしれない (例えば、解凍されたファ
46 - もしイベント BufRead* の自動コマンドによって圧縮ファイルを編集できるなら、
47 FileRead* でも同じ事ができるようにするべきである (こうすることで復旧可能にな
48 る場合がたまにある)。可能であれば、イベント File* や Buf* には同じ自動コマン
51 ==============================================================================
52 2. 自動コマンドの定義 *autocmd-define*
54 Note: コマンド ":autocmd" には他のコマンドを続けることはできない。'|' はみなコ
58 :au[tocmd] [group] {event} {pat} [nested] {cmd}
59 {pat} |autocmd-patterns| に一致するファイルで、{event}
60 のときに自動的に実行するコマンドのリストに、{cmd} を加
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 の自動コマンドを定義する所の前に入れてお
82 :autocmd! " 現在のグループに対する「全て」の自動コマンドを削除。
84 もし全ての自動コマンドを消去したくなかったら、代わりに変数を使って
85 自動コマンドを読み込むのがただ1度だけにすることができる。 >
87 :if !exists("autocommands_loaded")
88 : let autocommands_loaded = 1
92 引数 [group] が指定されないと、現在のグループが使われる (":augroup" で定義さ
93 れたもの)。そうでなければ、Vimは [group] で定義されたグループを使う。
94 Note [group] はあらかじめ定義されていなければならないことに注意。
95 ":au group ..." で新しいグループを定義することはできない。それには ":augroup"
98 自動コマンドをテストするとき、オプション 'verbose' が便利かもしれない。 >
100 この設定により、Vimは自動コマンドが実行されるとそれらを表示するようになる。
102 スクリプト内で自動コマンドを定義するときには、スクリプト内でのみ有効なローカ
103 ル関数とローカルキーマップを利用できる。イベントが発生してコマンドが実行される
104 とき、コマンドは自分の定義されたスクリプト内での設定に従って働く。これはコマン
105 ドに |<SID>| が使われているときに問題になる。
107 コマンドを実行するとき、あるコマンドからのメッセージは前のメッセージを上書きし
108 てしまう。これはコマンドを手動で実行するときとは違う動作である。大抵、メッセー
109 ジスクリーンはスクロールしないので、「続けるには」というプロンプトは現れない。
110 また1個のコマンドが2つのメッセージを出すときには、何にせよメッセージは上書きさ
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} に関連づけられた全ての自動コマンドを
125 :au[tocmd]! [group] * {pat}
126 {pat} に関連づけられた、全てのイベントに関する
129 :au[tocmd]! [group] {event}
130 {event} に関連づけられた「全ての」自動コマンドを除去す
133 :au[tocmd]! [group] 「全ての」自動コマンドを除去する。
135 引数 [group] が指定されないと、現在のグループが使われる (":augroup" で定義され
136 たもの)。そうでなければ、 [group] で定義されたグループが使われる。
138 ==============================================================================
139 4. 自動コマンドの列挙 *autocmd-list*
141 :au[tocmd] [group] {event} {pat}
142 {event} と {pat} に関連づけられた全ての自動コマンドを
145 :au[tocmd] [group] * {pat}
146 {pat} に関連づけられた、全てのイベントに関する
149 :au[tocmd] [group] {event}
150 {event} に関連づけられた全ての自動コマンドを表示する。
152 :au[tocmd] [group] 全ての自動コマンドを表示する。
154 引数 [group] を指定すると、 [group] に関する自動コマンドのみが列挙される。そ
155 うでなければ、「全ての」グループに関する自動コマンドが表示される。Note ここで
156 の引数による動作の違いは、自動コマンドを定義したり除去するときとは違うことに注
159 バッファローカルな自動コマンドを列挙するには、<buffer>または<buffer=N>という形
160 のパターンを使う。|autocmd-buflocal|を参照。
163 'verbose'がゼロでないならば、自動コマンドを列挙するときに、それが最後にどこで
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 トにはスペースを含めてはいけません。そのコマンドは指定したリストにある全てのイ
180 「ファイル読み込み」には次の4種類のイベントが発生しうる。
181 BufNewFile 存在しないファイルの編集を開始する。
182 BufReadPre BufReadPost 既存のファイルの編集を開始する。
183 FilterReadPre FilterReadPost フィルタの出力による一時ファイルを読み
185 FileReadPre FileReadPost その他のファイルを読み込む。
186 Vimはファイルを読み込むときにこの4種類のうちどれか1つを利用する。"Pre"と"Post"
187 のイベントは、ファイル読み込みの前後で両方とも起動される。
189 Note イベント *ReadPre や、全てのイベント Filter に関する自動コマンドは、カレ
190 ントバッファを変更してはならないことに注意 (これが起きると、エラーメッセージが
191 表示される)。これは、間違ったバッファにファイルを読み込むのを防ぐためである。
193 Note オプション 'modified' は、BufReadPost と BufNewFile の自動コマンドを実行
194 した「後に」オフに設定されることに注意。しかし 'modified' が自動コマンドから
197 'eventignore' は、いくつかあるいは全てのイベントを無視するために使える。
200 *autocommand-events* *{event}*
201 Vimは以下のイベントを認識する。イベント名が大文字か小文字かは無視される (例え
202 ば "BufRead" の代わりに "BUFread" や "bufread" が使える)。
204 まず機能ごとに短い説明とともに概要を解説する。それから完全な説明とともにアルフ
205 ァベット順のリストを載せる |autocmd-events-abc|。
210 |BufNewFile| 存在しないファイルの編集を始めたとき
211 |BufReadPre| 新しいバッファの編集を始めたとき。ファイルを読み込む前
212 |BufRead| 新しいバッファの編集を始めたとき。
214 |BufReadPost| 新しいバッファの編集を始めたとき。
216 |BufReadCmd| 新しいバッファの編集を始める前 |Cmd-event|
218 |FileReadPre| ":read"でファイルを読み込む前
219 |FileReadPost| ":read"でファイルを読み込んだ後
220 |FileReadCmd| ":read"でファイルを読み込む前 |Cmd-event|
222 |FilterReadPre| フィルタコマンドでファイルを読み込む前
223 |FilterReadPost| フィルタコマンドでファイルを読み込んだ後
225 |StdinReadPre| 標準入力からバッファに読み込む前
226 |StdinReadPost| 標準入力からバッファに読み込んだ後
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用にファイルを書き込んだ後
246 |BufAdd| バッファリストにバッファを追加した直後
247 |BufCreate| バッファリストにバッファを追加した直後
248 |BufDelete| バッファリストからバッファを削除する前
249 |BufWipeout| 完全にバッファを削除する前
251 |BufFilePre| カレントバッファの名前を変える前
252 |BufFilePost| カレントバッファの名前を変えた後
255 |BufLeave| 別のバッファへ移る前
256 |BufWinEnter| バッファがウィンドウに表示された後
257 |BufWinLeave| バッファがウィンドウから削除される前
259 |BufUnload| バッファをアンロードする前
260 |BufHidden| バッファが隠れバッファになった直後
261 |BufNew| 新規バッファを作成した直後
263 |SwapExists| 既存のスワップファイルを検出したとき
266 |FileType| オプション'filetype'がセットされたとき
267 |Syntax| オプション'syntax'がセットされたとき
268 |EncodingChanged| オプション'encoding'が変更された後
269 |TermChanged| オプション'term'が変更された後
272 |VimEnter| 全ての起動処理が終わった後
273 |GUIEnter| GUIの起動が成功した後
274 |TermResponse| |t_RV|に対する端末の反応を受け取った後
276 |VimLeavePre| Vimを終了する前、viminfoファイルを書き出す前
277 |VimLeave| Vimを終了する前、viminfoファイルを書き出した後
280 |FileChangedShell| 編集を始めた後にファイルが変更されたことを検出したとき
281 |FileChangedShellPost| 編集を始めた後にファイルが変更されたことに対処した後
282 |FileChangedRO| 読み込み専用ファイルに対して最初に変更を加える前
284 |ShellCmdPost| シェルコマンドを実行した後
285 |ShellFilterPost| シェルコマンドでフィルタをかけた後
287 |FuncUndefined| 呼び出そうとしたユーザ定義コマンドが定義されていなかっ
289 |SpellFileMissing| スペリングファイルを使おうとしたが見つからなかったとき
290 |SourcePre| Vimスクリプトを読み込む前
291 |SourceCmd| Vimスクリプトを読み込む前 |Cmd-event|
293 |VimResized| Vimのウィンドウサイズが変わったとき
294 |FocusGained| Vimが入力フォーカスを得たとき
295 |FocusLost| Vimが入力フォーカスを失ったとき
296 |CursorHold| ユーザが一定時間キーを押さなかったとき
297 |CursorHoldI| インサートモードでユーザが一定時間キーを押さなかった
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*
329 BufAdd or BufCreate バッファリストに追加されるバッファを作った直後
330 か、バッファをバッファリストに追加した直後。
331 バッファリスト内のバッファがリネームされた直後
333 イベント BufCreate は歴史上の理由で存在してい
335 NOTE: このイベントで自動コマンドが実行された
336 ときは、"%" で表されるカレントバッファと
337 "<afile>" で表される作成されたバッファは異なる
340 BufDelete バッファリストからバッファを削除する前。(バッ
341 ファが読み込まれているなら) BufUnload が最初に
343 また、バッファリスト内のバッファがリネームされ
345 NOTE: このイベントで自動コマンドが実行された
346 ときは、"%" で表されるカレントバッファと
347 "<afile>" と "<abuf>" で表される解放されるバッ
349 他のバッファに切り替えないこと。もしすると問題
352 BufEnter バッファに入った後。ファイルタイプに関するオプ
353 ションの設定に便利である。バッファの編集を始め
354 るときにも、BufReadPost の自動コマンドの後に
357 BufFilePost 現在のバッファの名前をコマンド ":file" または
360 BufFilePre 現在のバッファの名前をコマンド ":file" または
363 BufHidden バッファが隠れ状態 (hidden) になった直後。つま
364 りそのバッファを表示するウィンドウがもう存在し
365 ないのに、バッファが解放されなかったり、削除さ
366 れないとき。":qa" や "q" でVimを終了するときに
368 NOTE: このイベントで自動コマンドが実行された
369 ときは、"%" で表されるカレントバッファと
370 "<afile>" で表される解放されるバッファとは異な
373 BufLeave 他のバッファに移る前。カレントウィンドウを離れ
374 たり、閉じたりするときで、新しいカレントウィン
375 ドウが同じバッファを開いていないとき。":qa" や
376 "q" でVimを閉じるときには使われない。
378 BufNew 新しいバッファを作った直後。バッファがリネーム
379 された直後にも発生する。バッファがバッファリス
380 トに追加されると、イベント BufAdd も発生する。
381 NOTE: このイベントで自動コマンドが実行された
382 ときは、"%" で表されるカレントバッファと
383 "<afile>" で表される解放されるバッファとは異な
386 BufNewFile 存在しないファイルの編集を始めたとき。スケルト
387 ンファイル (訳注: テンプレートファイルともいう)
389 *BufRead* *BufReadPost*
390 BufRead or BufReadPost 新しいバッファの編集を始めたときの、ファイルを
391 バッファに読み込んだ後で、モードラインを実行す
392 る前。モードラインを実行した後に何かするには
393 |BufWinEnter|を参照してください。これは ":r
394 file" には「動作しない」。ファイルが存在しない
395 ときも使えない。またファイルの復旧に成功したと
398 BufReadCmd 新しいバッファの編集を始める前。ファイルをバッ
399 ファ内に読み込む役目を負う。 |Cmd-event|
400 *BufReadPre* *E200* *E201*
401 BufReadPre 新しいバッファの編集を始めたときの、ファイルを
402 バッファに読み込む前。読み込むファイルが存在し
405 BufUnload バッファを解放する前。これは、バッファ内のテキ
406 ストが解放されるときである。BufWritePost の後
407 で、BufDelete の前かもしれない。Vimが終了しよ
408 うとしているとき、読み込まれた全てのバッファに
410 NOTE: このイベントで自動コマンドが実行された
411 ときは、"%" で表されるカレントバッファと
412 "<afile>" で表される解放されるバッファとは異な
414 他のバッファに切り替えないこと。もしすると問題
417 BufWinEnter バッファがウィンドウ内に表示された後。これはバッ
418 ファが読み込まれたとき (モードラインの処理後)
419 か、隠れ (hidden) バッファがウィンドウ内に表示
420 されたとき (もう隠れバッファでなくなったとき)。
421 引数なしで |:split| をしたときや、既にウィンド
422 ウに表示されているバッファを指定して ":split"
423 をしたときは、同じバッファを開いたままなので、
424 このイベントは発生しない。既存のバッファがその
425 まま使われるためである。しかし、カレントバッファ
426 の名前を指定して":split" をすると、そのバッファ
427 を再読み込みすることになるので、発生する。
429 BufWinLeave バッファがウィンドウから取り除かれる前。そのバッ
430 ファが別のウィンドウ内で表示中ならば発生しない。
431 Vimの終了時にも発生する。イベント BufUnload や
433 NOTE: このイベントで自動コマンドが実行された
434 ときは、"%" で表されるカレントバッファと
435 "<afile>" で表される解放されるバッファとは異な
437 他のバッファに切り替えないこと。もしすると問題
440 BufWipeout バッファを完全に削除する前。イベント BufUnload
441 と BufDelete が先に発生するかもしれない (バッ
442 ファが読み込まれていて、バッファリスト内に存在
443 するなら)。バッファがリネームされる直前にも発
444 生する (そのバッファがバッファリスト内になくと
446 NOTE: このイベントで自動コマンドが実行された
447 ときは、"%" で表されるカレントバッファと
448 "<afile>" で表される解放されるバッファとは異な
450 *BufWrite* *BufWritePre*
451 BufWrite or BufWritePre バッファ全体をファイルに書き込む前。
453 BufWriteCmd バッファ全体をファイルに書き込む前。ファイルへ
454 の書き込みの役目を負い、成功したときはオプショ
455 ン 'modified' をオフにする。バッファの内容を変
456 更すべきではない。 |Cmd-event|
458 BufWritePost バッファ全体をファイルに書き込んだ後 (イベント
459 BufWritePre によるコマンドをアンドゥする役目を
462 CmdwinEnter Command-lineウィンドウに入った後。この特殊なウィ
463 ンドウに対してのみオプションを設定するのに便利
464 である。このイベントはイベント BufEnter や
465 WinEnter の「代わりに」発生する。
466 <afile> は、command-lineの種類を示す1文字に設
469 CmdwinLeave Command-lineウィンドウから出る前。イベント
470 CmdwinEnter で行ったグローバル設定を消去するの
471 に便利である。このイベントは BufLeave や
472 WinLeave の「代わりに」発生する。
473 <afile> は、command-lineの種類を示す1文字に設
476 ColorScheme カラースキームを読み込んだ後。 |:colorscheme|
478 CursorHold 'updatetime' の時間の間、ユーザがキーを押さな
479 かったとき。ユーザーが何かキーを押すまで、再び
480 発生することはない (例えば、もしあなたがコーヒー
481 を入れるためにVimの前を離れても、その間の
482 'updatetime' ミリ秒ごと発生することはない :-)。
484 |CursorHold-example| を参照。
485 このイベントはノーマルモードのときのみ呼ばれる。
486 コマンドの引数の入力待ち状態、またはオペレータ
487 の後の移動コマンド入力待ち状態のときは発生しな
489 レコーディングの最中にはCursorHoldイベントは発
491 Note: このイベントには対話的なコマンドは使えな
492 いことに注意。「続けるには」プロンプトは現れず、
494 Note: 近いうちに、発生するまでの時間を設定する
496 ヒント: ステータスラインの更新を強制的に行うに
499 < {Vi mのAmiga版、Unix版、Win32版、MSDOS版および
502 CursorHoldI CursorHoldと同様だが、インサートモードのとき発
505 CursorMoved ノーマルモードでカーソルが移動した後。カーソル
507 (例: "x", "rx", "p"などで)。
508 先行入力があったりオペレータが実行待ちになって
511 注意: ユーザが予期しないことや時間のかかる処理
514 CursorMovedI インサートモードでカーソルが移動した後。それ以
517 EncodingChanged オプション 'encoding' が変更されたとき。例えば、
520 FileAppendCmd ファイルに追加する前。ファイルへの追加の役目を
523 FileAppendPost ファイルに追加した後。
525 FileAppendPre ファイルに追加する前。
527 FileChangedRO 読み込み専用ファイルに最初の変更を加える前。ソー
528 ス管理システム (訳注: CVSやRCS) からファイルを
531 このイベントが発生するのは、バッファに最初の変
532 更を行うときや、'readonly'がセットされた後に最
533 初の変更を行うときの、変更が適用される直前であ
535 警告:自動コマンドでカーソルが動かされるときの動作は、
538 ここで他のバッファに変更をしてはならない。バッ
539 ファを再読み込みするとはよいが、他のバッファを
542 FileChangedShell ファイルのタイムスタンプが、ファイルの編集が始
544 ファイルの属性が変更されたときにも使われる。
546 大抵はシェルコマンドの実行後に発生する。またコ
547 マンド |:checktime| の実行後や、Vimが入力フォー
548 カスを一度失い、再び得たときにも発生する。
549 このイベントは変更されたファイルそれぞれに対し
550 て発生する。オプション 'autoread' がオンであり、
551 かつバッファが変更されていないときには使われな
552 い。もし FileChangedShell の自動コマンドが存
553 在しても、警告メッセージやプロンプトは現れない。
554 変数|v:fcs_reason|に何が起こったのかが設定され
555 、|v:fcs_choice|によってVimに次に何をすべきか
557 NOTE: このイベントで自動コマンドが実行された
558 ときは、"%" で表されるカレントバッファと
559 "<afile>" で表される解放されるバッファとは異な
561 NOTE: この自動コマンドはカレントバッファを変
562 更したり、別のバッファにジャンプしたり、バッ
563 ファを消去してはいけない。 *E246* *E811*
564 NOTE: このイベントは、無限ループを避けるために
565 決してネストしてはいけない (入れ子にならない)。
566 つまり、FielChangedShellイベントの処理中は他の
567 FileChangedShellイベントは呼ばれない。
568 *FileChangedShellPost*
569 FileChangedShellPost Vimの外部でファイルが変更されたのを検出・対処
570 した後。ステータスラインを更新するのに使える。
572 FileEncoding 時代遅れである。まだ有効だがイベント
573 |EncodingChanged| と同等である。
575 FileReadCmd コマンド ":read" でファイルを読み込む前。ファ
576 イルを読み込む役目を負う。 |Cmd-event|
578 FileReadPost コマンド ":read" でファイルを読み込んだ後。
579 Note 読み込んだテキストの先頭行と末尾行には、
580 マーク '[ と '] が設定されることに注意。これは、
581 読み込まれた行に対して操作を行うのに使われる。
583 FileReadPre コマンド ":read" でファイルを読み込む前。
585 FileType オプション 'filetype' が設定されたとき。
586 パターンはファイルタイプに対して照合される。
587 <afile> は 'filetype' が設定されたファイルの名
588 前として使える。<amatch> は 'filetype' の新し
592 FileWriteCmd バッファ全体を書き込まない場合の、ファイルに書
593 き込む前。ファイルへの書き込みの役目を負う。バッ
594 ファを変更すべきではない。 |Cmd-event|
596 FileWritePost バッファ全体を書き込まない場合の、ファイルに書
599 FileWritePre バッファ全体を書き込まない場合の、ファイルに書
602 FilterReadPost フィルタコマンドからファイルを読み込んだ後。
603 Vimは FilterReadPre と同様に、現在のバッファの
605 *FilterReadPre* *E135*
606 FilterReadPre フィルタコマンドからファイルを読み込む前。Vim
607 は、フィルタコマンドの出力である一時ファイルの
608 名前ではなく、現在のバッファの名前に対してパター
611 FilterWritePost フィルタコマンド用のファイルを書き込んだり、差
613 Vimは FilterWritePre と同様、現在のバッファの
615 'shelltemp'がオフのときは発生しない。
617 FilterWritePre フィルタコマンド用のファイルを書き込んだり、差
619 Vimはフィルタコマンドの出力である一時ファイル
620 の名前ではなく、現在のバッファの名前に対してパ
622 'shelltemp'がオフのときは発生しない。
624 FocusGained Vimが入力フォーカスを得たとき。GUI版と、入力
625 フォーカスを認識できるいくつかのコンソール版で
628 FocusLost Vimが入力フォーカスを失ったとき。GUI版と、入力
629 フォーカスを認識できるいくつかのコンソール版で
632 FuncUndefined ユーザ定義関数が使われたが、定義されていなかっ
633 たとき。必要なときのみ関数を定義するのに便利で
634 ある。パターンは関数名に対して照合される。
635 <amatch> と <afile> の両方とも関数名に設定され
636 る。|autoload-functions|を参照。
638 GUIEnter GUI の開始に成功し、ウィンドウを開いた後。
639 gvim を使ったときは、VimEnter の前に発生する。
640 ファイル .gvimrc からウィンドウの配置場所を設
642 :autocmd GUIEnter * winpos 100 50
644 GUIFailed GUIの開始に失敗した後。可能ならば、Vimはターミ
645 ナル内で実行を継続する(Unix系のみ。Xサーバへ接
646 続が失敗したとき)。ここでVimを終了させるには、
648 :autocmd GUIFailed * qall
650 InsertChange インサート・上書きモードで<Insert>をタイプした
651 とき。変数|v:insertmode|が新しいモードを示す。
652 カーソルを移動したりなどユーザが予期しないこと
655 InsertEnter インサートモード・上書きモード・Virtual上書き
656 モードを開始する直前。変数|v:insertmode|がモー
657 ドを示す。カーソルを移動したりなどユーザが予期
660 InsertLeave インサートモードを抜けるとき。CTRL-O
661 |i_CTRL-O|を使ったときにも発生する。|i_CTRL-C|
664 MenuPopup (マウス右ボタンで)ポップアップメニューを表示す
665 る直前。カーソル下やマウスポインタの下にあるも
674 QuickFixCmdPre QuickFixコマンドが実行される前 (|:make|,
675 |:lmake|, |:grep|, |:lgrep|, |:grepadd|,
676 |:lgrepadd|, |:vimgrep|, |:lvimgrep|,
677 |:vimgrepadd|, |:lvimgrepadd|)。パターンには実
678 行されるコマンドを記述する。|:grep|が書かれて
679 いると、'grepprg'が"internal"にセットされてい
681 'makeprg'と'grepprg'を設定することはできない。
682 このコマンドでエラーになるとQuickFixコマンドは
685 QuickFixCmdPost QuickFixCmdPreと同様だが、QuickFixコマンドが実
686 行された後、最初の位置にジャンプする前に発生す
687 る。|QuickFixCmdPost-example| を参照。
689 RemoteReply サーバとして働くVimからの応答を受け取ったとき
690 |server2client()|。パターンは{serverid}に対し
692 <amatch> は応答が送られてきたサーバの
693 {serverid} になり、<afile> は応答の実際の内容
695 Note これに自動コマンドを定義したときも、応答
696 を読み込むのには、読み込んだ応答を処理できるよ
697 うに関数 |remote_read()| を使うべきであること
700 SessionLoadPost |:mksession|で作られたセッションファイルを読み
703 ShellCmdPost |:!cmd|, |:shell|, |:make|, |:grep|を使って
704 シェルコマンドを実行した後。変更されたファイル
707 ShellFilterPost ":{range}!cmd", ":w !cmd", ":r !cmd"を使ってシ
708 ェルコマンドを実行した後。変更されたファイルを
711 SourcePre Vimスクリプトを読み込む前。 |:source|
712 <afile>は読み込まれるファイルの名前となる。
714 SourceCmd Vimスクリプトを読み込むとき。|:source|
715 <afile>は読み込まれるファイルの名前となる。こ
716 の自動コマンドはこのファイルを読み込まねばなら
719 SpellFileMissing スペルチェックファイルを読み込もうとしたが、見
720 つからなかったとき。パターンは言語に対して照合
721 される。<amatch>は言語。'encoding'も関係する。
722 |spell-SpellFileMissing|を参照。
724 StdinReadPost 標準入力からバッファへ読み込んだ後で、モードラ
725 インを実行する前。Vimを開始したときに引数 "-"
726 が使われた場合のみ使われる (|--| 参照)。
728 StdinReadPre 標準入力からバッファへ読み込む前。Vimを開始し
729 たときに引数 "-" が指定された場合のみ使われる
732 SwapExists ファイルの編集を始めようとしてスワップファイル
733 が存在することを検出したとき。この状況に対応す
734 る方法を選択できるときだけユーザにどうするか問
736 変数|v:swapname|が見つかったスワップファイルの
737 名前を保持する。<afile>は編集しようとしている
738 ファイルである。|v:swapcommand|が開かれたファ
739 イルで実行するコマンドを含んでいるかもしれな
741 このコマンドは変数|v:swapchoice|をVimが次にど
742 うするべきかを示す1文字の文字列にセットしなけ
749 'a' CTRL-Cを押したのと同様に強制終
751 これが空文字列にセットされると、自動コマンド
752 SwapExistsが存在しないときと同様にユーザに問い
754 注意: バッファを変更しようとしてはならない。そ
757 ここでは他のバッファに切り替えること、バッファ
758 名を変更すること、ディレクトリを変更することは
761 Syntax オプション 'syntax' が設定されたとき。
763 <afile> は 'syntax' が設定されたファイルの名前
764 として使える。<amatch> は 'syntax' の新しい値
768 TabEnter タブページに入った直後 |tab-page|。WinEnterが
769 発生した後、BufEnterが発生する前。
771 TabLeave タブページを離れる直前 |tab-page|。最初に
774 TermChanged オプション 'term' を変更した後。色やフォント等、
775 ターミナル依存の設定を更新するために構文定義ファ
776 イルを再読み込みするのに便利である。読み込まれ
779 TermResponse |t_RV| に対する応答をターミナルから受け取った
780 とき。Vim変数 |v:termresponse| の値を使って、
781 ターミナルのヴァージョンに応じた処理ができる。
783 User 自動的に実行されることはない。コマンド
784 ":doautocmd" によってのみ実行される
787 UserGettingBored ユーザが CTRL-C を打ち込んだとき。
790 VimEnter ファイル .vimrc の読み込みを含む、全てのスター
791 トアップ処理を行い、"-c cmd" の引数を実行し、
792 全てのウィンドウを構築し、それらにバッファを読
795 VimLeave Vim を終了する前で、ファイル .viminfo を書き込
796 んだ後。VimLeavePre のように、ただ1度だけ実行
798 異常終了の検出には |v:dying| を使うこと。
800 VimLeavePre Vim を終了する前で、ファイル .viminfo を書き込
801 む直前。これは終了時にたまたまカレントバッファ
802 になったバッファの名前とマッチしたときに、ただ
803 1度だけ実行される。 大抵、パターンには "*" を
805 :autocmd VimLeavePre * call CleanupStuff()
806 < 異常終了の検出には |v:dying| を使うこと。
808 VimResized Vimウィンドウのサイズが変わったとき。よって
809 'lines'と'columns'が変更される。しかし開始時
812 WinEnter 別のウィンドウに入った後。Vimの開始直後、1個目
813 のウィンドウに入ったときは発生しない。ウィンド
815 そのウィンドウで他のバッファを開いていたときは、
816 イベント Winenter の後に BufEnter が発生する。
817 Note: ":split fname" を実行したとき、WinEnter
818 が発生するのは、ウィンドウ分割の後だがファイル
819 "fname" が読み込まれる前の時点である。
821 WinLeave ウィンドウを離れる前。次に入るウィンドウで他の
822 バッファを開いていたときは、イベント WinLeave
823 の前に BufLeave が発生する (ただし ":new" を使っ
825 ":qa" や"q" でVimを終了するときには発生しない。
827 ==============================================================================
828 6. パターン *autocmd-patterns* *{pat}*
830 ファイルパターン {pat} がファイル名とマッチするかどうかは、2通りの方法で調べら
832 1. パターンに '/' が含まれないとき: Vimはファイル名の後ろの部分からのみマッチ
833 を調べる (ファイル名の前につくディレクトリパスは除く)。
834 2. パターンに '/' が含まれるとき: Vimは短いファイル名 (ユーザが打ち込んだもの)
835 と長いファイル名 (短いファイル名をフルパスに展開し、シンボリックリンクなら
836 その実体を探したもの) との両方から一致を調べる。
839 :autocmd BufRead *.txt set et
840 全てのテキストファイルに対しオプション 'expandtab' をオンにする。 >
842 :autocmd BufRead /vim/src/*.c set cindent
843 ディレクトリ /vim/src 内のC言語ファイルに対しオプション 'cindent' をオンにす
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 パターンがマッチするファイル名は、ワイルドカードを展開した後のものである。その
859 :e $ROOTDIR/main.$EXT
860 まずコマンドの引数は、ファイル名が自動コマンドのパターンにマッチする前に、次
863 イベント FileReadCmd 等を使うときにはこれに注意すること。<amatch> の値が、ユー
867 パターンの中で環境変数を使うこともできる。 >
868 :autocmd BufRead $VIMRUNTIME/doc/*.txt set expandtab
869 環境変数 $HOME が定義されているなら、~ をホームディレクトリとして使うこともで
871 :autocmd BufWritePost ~/.vimrc so ~/.vimrc
872 :autocmd BufRead ~archive/* set readonly
873 環境変数は、自動コマンドが定義されるときに展開される。自動コマンドが実行される
874 ときではない。これは command とは違っている!
877 パターンの解釈方法は、ファイル名の解釈方法と大体同じである。
885 { } は |pattern| の \( \) と同様
886 , ('{' '}' の内側では) |pattern| の \| と同様
887 \ は |pattern| で使われるものと同様の特別な意味を持つ
888 [ch] は 'c' または 'h' にマッチ
889 [^ch] は 'c' と 'h' 以外の文字にマッチ
891 '/' という文字は、全てのシステムでパスの区切り文字に使われることに注意すること
892 (MS-DOSとOS/2でさえも)。これは、パターン内でバックスラッシュを使うことが難しい
893 上に、別々のシステムでも自動コマンドが動作するようにするためである。
896 パターンマッチの検索は、イベントの発生時に行われる。自動コマンドのどれかでバッ
897 ファ名を変更しても、それどころかバッファを削除しても、実行される 自動コマンド
900 au BufEnter *.foo bdel
901 au BufEnter *.foo set modified
903 これはカレントバッファを削除し、代わりにカレントバッファになったバッファ内でオ
904 プション 'modified' をオンにする。Vimは "*.foo" が新しいカレントバッファのバッ
905 ファ名にマッチしなくとも気にしない。"*.foo" はイベントが発生した時点でのバッファ
908 しかし、|:bwipe|でワイプアウトされたバッファに対しては、バッファローカルな
909 自動コマンドは実行されない。|:bdel|で削除されたバッファは実際にはまだ存在して
910 いる(リストされなくなっただけ)なので、自動コマンドは実行される。
912 ==============================================================================
913 7. バッファローカルな自動コマンド *autocmd-buflocal*
914 *autocmd-buffer-local*
915 *<buffer=N>* *<buffer=abuf>* *E680*
917 バッファローカルな自動コマンドは特定のバッファに結びつけられている。これは名前
918 を持たないバッファや特定のパターンにマッチしない名前のバッファに使うと便利であ
919 る。しかしそれぞれのバッファに明示的に追加する必要がある。
921 バッファローカルな自動コマンドはパターンの代わりに以下の形式のどれかを使う:
924 <buffer=abuf> <abuf> の使用(自動コマンドを実行するときのみ)
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> " カレントバッファのバッファローカル自動
936 :au! * <buffer=33> " バッファ#33のバッファローカル自動コマン
938 :bufdo :au! CursorHold <buffer> " 全バッファから指定されたイベントに対す
940 :au * <buffer> " カレントバッファのバッファローカル自動
943 カレントバッファに対して自動コマンドを定義するとき、それがバッファ番号とともに
944 保存されることに注意。つまりカレントバッファ番号が12なら"<buffer=12>"という形
945 になる。例えば自動コマンドをリストするときこの形式で表示される。
947 バッファローカル自動コマンドが存在するかを判定するには関数|exists()|を次のよう
949 :if exists("#CursorHold#<buffer=12>") | ... | endif
950 :if exists("#CursorHold#<buffer>") | ... | endif " for current buffer
952 バッファがワイプアウトされると当然バッファローカル自動コマンドも失われる。
953 ":bdel"などでバッファを削除するときは、それがリストからなくなるだけで、自動コ
954 マンドはまだ存在していることに注意。バッファローカル自動コマンドの削除を表示さ
958 存在しないバッファに対してバッファローカル自動コマンドを定義することはできな
961 ==============================================================================
962 8. グループ *autocmd-groups*
964 自動コマンドはグループにまとめることができる。これは一連の自動コマンドを取り
965 除いたり実行したりする際に便利である。例えば、構文強調表示のための全ての
966 自動コマンドはグループ "highlight" に入っていて、GUIの開始時に
967 ":doautoall highlight BufRead" で実行できる。
969 特定のグループが選択されないとき、既定のグループが使われる。既定のグループには
970 名前がない。既定のグループから個別に自動コマンドを実行することはできない。そ
971 れらを実行できるのは、全てのグループに対する自動コマンドを実行するときのみで
974 普通、自動コマンドを自動的に実行するときは、全てのグループに対する 自動コマンド
975 が使われる。グループが問題になってくるのは、":doautocmd" や ":doautoall" によっ
976 て自動コマンドを実行するときと、自動コマンドを定義したり削除するときである。
978 グループ名には空白を除く全ての文字が使える。"end" というグループ名は予約語になっ
981 グループ名では大文字と小文字を区別して扱う。イベントの名前とは違うことに注意し
985 :aug[roup] {name} 後に続くコマンド ":autocmd" のためのグループ名
986 を定義する。{name} を "end" や "END" にすると
989 *:augroup-delete* *E367*
990 :aug[roup]! {name} 自動コマンドのグループ {name} を削除する。その
991 グループを使っている自動コマンドがまだあるな
992 ら、これは使わないこと!その点はチェックされな
995 特定のグループとして自動コマンドを定義するには、次の手順に従うこと。
996 1. ":augroup {name}" によってグループを選択する。
997 2. ":au!" によって古い自動コマンドを全て消去する。
999 4. ":augroup END" によって既定のグループに戻る。
1004 : au BufEnter *.gz %!gunzip
1007 これで自動コマンドを (例えばファイル .vimrc を再び読み込んだ後) 2回定義するこ
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 だから、ある拡張子用の自動コマンドを元にして別の拡張
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 定義されていないグループ名を使うと、エラーメッセー
1041 自動コマンドを適用した後にモードラインが処理される。ファ
1042 イルを編集するときと同じように、自動コマンドでなされた
1045 *:doautoa* *:doautoall*
1046 :doautoa[ll] [group] {event} [fname]
1047 ":doautocmd" と似ているが、読み込まれたバッファそれぞ
1048 れに自動コマンドを適用する。[fname]は自動コマンドを選
1049 択するのに使われます。コマンドを適用するバッファではあ
1050 りません。(訳注: |:autocmd|の{pat}に使う?)
1051 注意: このコマンドで、バッファを削除したり、バッファを
1052 変えたり、バッファの内容を変えるような自動コマンドを
1053 実行しないこと。結果は予期できない。このコマンドは、オ
1054 プションを設定したり、構文強調表示を変えたりする
1057 ==============================================================================
1058 10. 自動コマンドを使う *autocmd-use*
1060 「ファイルの書き込み」には、4組のイベントが起こりうる。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 べきであることに注意。さもないと、ファイルの書き込みがバッファを変更するという
1076 あるバッファの中の行をファイルに書き込むとき、自動コマンドを実行する前にそのバッ
1077 ファが一時的にカレントバッファになる。自動コマンドがカレントバッファを変更した
1078 り、元のカレントバッファを消去しない限り、カレントバッファは再び元に戻る。
1080 イベント *WritePre や *AppendPre による自動コマンドは、書き込み元のバッファを
1083 マーク '[ と '] は特別な位置を記憶している。
1084 - イベント *ReadPre の前に、新しい行が挿入される所の上の行にマーク '[ が設定
1086 - イベント *ReadPost の前に、読み込まれた最初の行にマーク '[ が、最後の行にマー
1088 - イベント *WriteCmd, *WritePre と *AppendPre による自動コマンドが実行される前
1089 に、書き込まれる最初の行にマーク '[ が、最後の行にマーク '] が設定される。
1090 注意: バッファを変更するコマンドを使うと、'[ と '] の場所も変更される。
1092 ファイル名を必要とするコマンドでは、読み込まれるファイル名に "<afile>" を使う
1093 ことができる (カレントファイル名に "%" を使うこともできる) |:<afile>|。現在有
1094 効なバッファ番号には "<abuf>" を使うことができる。これは名前を持たないバッファ
1095 に対しても有効だが、バッファを持たないファイルには使えない (例えば、":r file"
1099 圧縮されたファイルを読み書きする例: >
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
1115 グループ "gzip" は、":autocmd!" で既存の自動コマンドを全て削除できるようにす
1116 るために使われている。これはスクリプトファイルが2回読み込まれたときのためであ
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" の後にはマーク名を打ち込ま
1133 バッファの内容を変更した後に、変更されていないことにしたいなら、オプション
1134 'modified' をオフにすること。こうすると ":q!" ではなく ":q" でもVimを終了でき
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回だけ実行すべき
1149 あるコマンドを実行するときだけ自動コマンドをスキップしたい場合は、修飾子
1150 |:noautocmd|を使うかオプション'eventignore'を使う。
1152 Note (":read file" やフィルタコマンドで) 読み込んだファイルの最後の行に <EOL>
1153 がないとき、Vimはこのことを記憶する。その次の (":write file" やフィルタコマン
1154 ドでの) 書き込みで、先ほどの最後の行が再び最後の行として書き込まれ、かつオプショ
1155 ン 'binary' がオンになっていると、<EOL> は付け足されない。これにより、読み込ま
1156 れた行に対するフィルタコマンドで、読み込まれた通りに書き出すことができる。また、
1157 フィルタ処理された行に対する書き込みのコマンドで、フィルタが出力した通りに書き
1158 出すことができる。例えば、圧縮されたファイルを書き込むもう一つの例は以下のよう
1161 :autocmd FileWritePre *.gz set bin|'[,']!gzip
1162 :autocmd FileWritePost *.gz undo|set nobin
1164 *autocommand-pattern*
1165 コンマで区切られた複数のパターンを指定することもできる。以下にいくつか例を挙げ
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 等) にマッチさせるには
1179 :autocmd BufEnter ?akefile* set include=^s\=include
1180 :autocmd BufLeave ?akefile* set include&
1182 Cソースファイルを編集するとき、常に最初の関数から始めるにはこうする。 >
1184 :autocmd BufRead *.c,*.h 1;/^{
1186 上の "1;" がないと、検索が始まる場所はファイルの最初ではなく、ファイルの挿入さ
1189 *skeleton* *template*
1190 新しいファイルを作るときにスケルトン (テンプレート) ファイルを読み込むにはこう
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
1207 : exe "1," . l . "g/Last modified: /s/Last modified: .*/Last modified: " .
1208 : \ strftime("%Y %b %d")
1211 これを機能させるためには、ファイルの先頭から20行以内に"Last modified: <date
1212 time>" という行を入れる必要がある。Vimは <date time> (とその行内のそれ以後を)
1214 ks 現在の位置をマーク 's' に設定する
1215 call LastMod() 関数 LastMod() を呼び出して実際の作業を行う
1217 関数 LastMod() はファイルの長さが20行以下であるかを調べ、キーワード
1218 "Last modified: " の含まれる行を探すためにコマンド ":g" を実行する。キーワード
1219 の含まれる行に対しては ":s" が実行され、既存の日付を現在のものに置き換える。
1220 ":execute" は ":g" や ":s" で expression を使えるようにするためのものである。
1221 日付は関数 strftime() から得られる。 strftime() の引数を変更して、別の形の日付
1224 コマンドラインから自動コマンドを入力すると、(<Tab> や CTRL-D などで) イベント
1227 Vimはマッチする全ての自動コマンドをユーザの指定した順に実行する。ユーザが実行
1228 させる最初の自動コマンドにはファイルパターンに "*" を使い、全てのファイルに適
1229 用されるようにするとよい。これはつまり、あらゆる設定のための既定を好きなように
1230 定義することができ、もしマッチする自動コマンドが別にあれば、そちらの方が設定
1231 を上書きできるということである。しかしマッチする自動コマンドが他になければ、
1232 少なくともあなたの設定した既定は回復される (もし自動コマンドがマッチした別の
1233 ファイルから、マッチしなかったファイルに移っても)。 Note Unixのシェルと違い、
1234 "*" は"." で始まるファイルにもマッチすることに注意。
1237 自動コマンドは現在の検索パターンを変更しない。Vimは自動コマンドの実行前に現在
1238 の検索パターンを保存し、自動コマンドが終了してから復元する。つまり 自動コマンド
1239 はオプション 'hlsearch' で強調表示されている文字列に影響しないということである。
1240 自動コマンド内でも、例えばコマンド "n" 等で、検索パターンは普通に使用できる。
1241 もし自動コマンドの中で終了後に使う検索パターンを設定したいなら、 ":let @/ ="
1243 自動コマンドの中で ":nohlsearch" を使って、検索語の強調表示を無効にすることは
1244 できない。Vimの開始時に検索語の強調表示を行わないためには、'viminfo' のフラグ
1248 イベント "*Cmd" のうちどれかを使うと、それによる自動コマンドが読み込み、書き
1249 込み、またはsourceを行うものと想定される。これは特殊なファイル、例えばリモート
1250 システム上のファイルに作業をするときに使える。
1251 注意: これらのイベントを誤った方法で使うと、そのイベントが発生するファイルの読
1252 み書きが不可能になってしまう。自分の自動コマンドをしっかりテストすること。最
1253 良の方法は、普通のファイル名には決してマッチしないパターン (例えば "ftp://*")
1256 BufReadCmd に対して自動コマンドを定義すると、クラッシュしたセッションの復旧が
1257 難しくなる。元のファイルから復旧するとき、Vimはスワップファイル内に見つからな
1258 かった部分のみを読み込む。それは BufReadCmd の自動コマンドを使ったときは不可
1259 能なので、コマンド |:preserve| を使って元のファイルが復旧に必要ないようにする
1260 こと。そうするのはファイルが変更を受けたと判断したときのみでもよい。
1262 読み込みと書き込みのコマンドの場合、Vim変数 |v:cmdarg| は引数 "++enc=" と
1263 "++ff=" の、有効だったものを保持している。これらはファイルを読み書きするコマン
1264 ドで使われるべきである。Vim変数 |v:cmdbang|はコマンドに"!"が使われたときに 1。
1267 例は標準プラグイン $VIMRUNTIME/plugin/netrw.vim を参照。
1269 ==============================================================================
1270 11. 自動コマンドを無効にする *autocmd-disable*
1272 一時的に自動コマンドを無効にするにはオプション'eventignore'を使う。これは予期
1273 しない振るまいを引き起こす可能性がある。|:finally|つきの|:try|ブロックを使って
1274 後で'eventignore'を元に戻すようにすること。
1277 1つのコマンドを実行する間だけ自動コマンドを無効にするには修飾子":noautocmd"を
1278 使う。これは後に続くコマンドを実行する間だけ、'eventignore'を"all"にセットす
1281 :noautocmd w fname.gz
1283 これはgzipプラグインで定義された自動コマンドを発生させずにファイルを書き込む。
1286 vim:tw=78:ts=8:ft=help:norl: