6

新しいファイルが書き込まれるたびに、Vimにコマンド「CommandTFlush」を実行させようとしています。Command-Tプラグインを使用していない場合は、「CommandTFlush」コマンドを使用して、現在のディレクトリ内のファイルのインデックスを再構築します。

私がやりたいのは、ファイルがディスクに書き込まれた後にコマンドを実行することです。これにより、CommandTFlushがファイルを見つけて、そのインデックスに追加します。

自分で関数を書いてみましたが、起動しないか、起動が早すぎます(ファイルが書き込まれる前に、ファイルをインデックスに追加することが重要です)。

au! BufWritePre * ks| call NewFilesUpdatesCommandT()
function! NewFilesUpdatesCommandT()
    let filename=@%
    if !filereadable(filename)
        CommandTFlush
    endif
endfunction

BufWritePreでブール変数(isTheFileNew)を設定し、ファイルが作成されたばかりの場合はBufWritePostでCommandTFlushコマンドを実行することで解決できると思いますが、構文がわかりません。別の解決策は、可能であれば、BufWritePreコールバック内からBufWritePostコールバックを設定/設定解除することです...

誰かがここで私を助けてくれますか?;)

4

2 に答える 2

17

これが私の解決策です。ファイルが書き込まれるたびに、またVimのウィンドウがフォーカスを取得するたびにCommandTFlushをトリガーします。これは、vimの外部でファイルを作成する場合、たとえばバージョン管理システムのブランチを切り替える場合に便利です。新しいファイルは、Vimを再入力した直後にCommandTで利用できるようになります。

augroup CommandTExtension
  autocmd!
  autocmd FocusGained * CommandTFlush
  autocmd BufWritePost * CommandTFlush
augroup END
于 2011-04-26T14:19:26.063 に答える
2
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番目の提案の実現です。

于 2010-08-15T09:59:14.780 に答える