SourcePost ハック
自動コマンドイベント SourcePre は存在するのに SourcePost はないので作ってみた。
diff -u ../src.orig/ex_cmds2.c ./ex_cmds2.c --- ../src.orig/ex_cmds2.c Mon Apr 17 19:19:07 2006 +++ ./ex_cmds2.c Sun Dec 31 23:47:14 2006 @@ -3093,6 +3093,9 @@ #endif theend: +#ifdef FEAT_AUTOCMD + apply_autocmds(EVENT_SOURCEPOST, fname_exp, fname_exp, FALSE, curbuf); +#endif vim_free(fname_exp); return retval; } diff -u ../src.orig/fileio.c ./fileio.c --- ../src.orig/fileio.c Mon May 1 00:28:57 2006 +++ ./fileio.c Sun Dec 31 23:47:14 2006 @@ -7003,6 +7003,7 @@ {"ShellCmdPost", EVENT_SHELLCMDPOST}, {"ShellFilterPost", EVENT_SHELLFILTERPOST}, {"SourcePre", EVENT_SOURCEPRE}, + {"SourcePost", EVENT_SOURCEPOST}, {"SpellFileMissing",EVENT_SPELLFILEMISSING}, {"StdinReadPost", EVENT_STDINREADPOST}, {"StdinReadPre", EVENT_STDINREADPRE}, diff -u ../src.orig/vim.h ./vim.h --- ../src.orig/vim.h Mon May 1 00:32:38 2006 +++ ./vim.h Sun Dec 31 23:47:30 2006 @@ -1144,6 +1145,7 @@ EVENT_REMOTEREPLY, /* upon string reception from a remote vim */ EVENT_SWAPEXISTS, /* found existing swap file */ EVENT_SOURCEPRE, /* before sourcing a Vim script */ + EVENT_SOURCEPOST, /* after sourcing a Vim script */ EVENT_SPELLFILEMISSING, /* spell file missing */ EVENT_CURSORMOVED, /* cursor was moved */ EVENT_CURSORMOVEDI, /* cursor was moved in Insert mode */
自動コマンドイベントを追加するのは、発動させるタイミングさえ間違えなければ簡単。
イベント名と enum 値の対応が fileio.c にあるのはちょっと謎だが。