新しいファイルが書かれているときにcommandTflushコマンドを実行します
質問
新しいファイルが書かれているときはいつでも、vimに「commandtflush」コマンドを実行させようとしています。 Command-Tプラグインを使用していない場合は、「CommandTflush」コマンドを使用して、現在のディレクトリ内のファイルのインデックスを再構築します。
私がやりたいのは、ファイルがディスクに書き込まれた後にコマンドを実行することです。これにより、CommandTflushがファイルを見つけてインデックスに追加します。
私は自分で関数を書き込んでみましたが、それが発射されないか、それがあまりにも早く発射されないかのいずれかです(ファイルが書かれている前に、そして全体のポイントはインデックスにファイルを追加することです):
au! BufWritePre * ks| call NewFilesUpdatesCommandT()
function! NewFilesUpdatesCommandT()
let filename=@%
if !filereadable(filename)
CommandTFlush
endif
endfunction
bufwritepreにブールvar(isthefilenew)を設定し、ファイルが作成された場合にbufwritepostでcommandtflushコマンドを実行することで解決できると思いますが、構文はわかりません。もう1つのソリューションは、BufwritePreのコールバックからBUFWRITEPOSTコールバックを設定/設定/設定することです。可能であれば...
誰かがここで私を助けてくれますか? ;)
解決
augroup NFUCT
autocmd!
autocmd BufWritePre * call NFUCTset()
augroup END
function NFUCTset()
if !filereadable(expand('%'))
augroup NFUCT
autocmd BufWritePost * call NFUCT()
augroup END
endif
endfunction
function NFUCT()
augroup NFUCT
autocmd!
autocmd BufWritePre * call NFUCTset()
augroup END
CommandTFlush
endfunction
これはあなたの2番目の提案の実現です。
他のヒント
これが私の解決策です。ファイルが書かれているときはいつでも、またVimのウィンドウが焦点を獲得するたびにCommandTflushをトリガーします。これは、VIMの外側にファイルを作成する場合に役立ちます。たとえば、バージョン制御システムのブランチを切り替えることで役立ちます。新しいファイルは、VIMを再入力した直後にCommandTで利用可能になります。
augroup CommandTExtension
autocmd!
autocmd FocusGained * CommandTFlush
autocmd BufWritePost * CommandTFlush
augroup END