2010-08-15 46 views
6

我試圖讓Vim在新文件寫入時運行命令'CommandTFlush'。對於那些不使用Command-T插件的用戶,「CommandTFlush」命令用於重建當前目錄中的文件索引。當寫入新文件時運行CommandTFlush命令

我想要做的是將文件寫入磁盤後運行命令,以便CommandTFlush將找到該文件並將其添加到它的索引。

我試着寫一個函數自己,但要麼不火也太快火災(該文件被寫入之前,整個的一點是添加的文件索引):

au! BufWritePre * ks| call NewFilesUpdatesCommandT() 
function! NewFilesUpdatesCommandT() 
    let [email protected]% 
    if !filereadable(filename) 
     CommandTFlush 
    endif 
endfunction 

我懷疑它可以通過在BufWritePre中設置一些布爾型var(isTheFileNew)來解決,然後在BufWritePost中執行CommandTFlush命令(如果該文件剛剛創建),但我無法弄清楚語法。另一種解決方案可以設置/取消BufWritePre回調中的BufWritePre回調,如果可能的話...

有人能幫我一下嗎? ;)

+0

在你的自動命令開始時有什麼'ks |'在做什麼?無法在vim幫助中找到它。 – ZyX 2010-08-15 10:01:10

+0

找到了。爲什麼你要標記你的位置,如果你的功能不移動光標? – ZyX 2010-08-15 10:05:37

+0

真的不知道。這只是一個糟糕的複製/粘貼作業,基於我在#[email protected]獲得的一些指針。還沒有弄清楚如何從幫助文件中獲得幫助。我在Vim的第三天在這裏;) – peterfarsinsen 2010-08-15 10:08:25

回答

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 

這是您的第二個建議的實現。

+0

謝謝!似乎正在按照我想要的那樣工作。 – peterfarsinsen 2010-08-15 10:05:48

17

這是我的解決方案。無論何時寫入文件以及Vim窗口獲得焦點時,它都會觸發CommandTFlush。在vim之外創建文件時這很有用 - 例如,通過在版本控制系統中的分支之間切換。重新進入Vim後,新文件將在CommandT中立即可用。

augroup CommandTExtension 
    autocmd! 
    autocmd FocusGained * CommandTFlush 
    autocmd BufWritePost * CommandTFlush 
augroup END 
+0

這工作得很好。我只是堅持在我的.vimrc中,現在CommandT按照我所期望的那樣工作。謝謝。 – 2011-05-23 21:55:44

+0

這很好,謝謝。 – jpc 2011-08-27 10:44:49

+0

完美 - 謝謝! – Skilldrick 2012-02-26 05:11:49

相關問題