2013-06-01 60 views
0

您可以設置目錄的列表VIM爲交換文件使用(它默認爲第一個能找到)與:如何獲取vimscript中當前交換目錄的值?

set directory=~/tmp,~/var/tmp,/var/tmp,/tmp 

我想知道哪個目錄的vim選擇了它的交換文件等等我可以在那裏粘貼一些臨時數據。

解析&directory並且當vim應該已經知道這些值時,循環遍歷這些值似乎是一種浪費。

回答

3

:swapname命令會告訴你哪個交換文件用於當前緩衝區。您需要使用:redir => varname來捕獲輸出並將其存儲在一個變量中。

+0

這是我想到的最好的。如果noswapfile所以解析&目錄會更好,它會(當然)失敗。 – Tyler

+1

然後它說'沒有交換文件',無論如何,你可以在之前檢查''noswapfile'',所以我沒有看到如何解析''目錄''更好。特別是因爲swap擴展不一定是'.swp';它也可以是'.swo'等。 –

0

我認爲「used」目錄沒有保存在vim的某個地方,就像變量或其他東西一樣。它可能不同於緩衝區到緩衝區。 (從文件到文件)。

例如

你有一個非root用戶。說kent,他的目錄設置爲:

set directory=.,~/tmp,/var/tmp,/tmp 

現在肯特在他的VIM,和編輯打開/etc/host.conf。第一個.(dot)表示當前目錄。顯然肯定不能寫文件到/etc,所以拿第2個~/tmp,但肯特在他家下面沒有tmp,所以接下來,使用/var/tmp

如果kent在他的HOME下或在/tmp下打開文件,例如將使用.(dot)。並注意不同文件的dot是不同的。

肯特可以在緩衝區中打開許多文件,所以很難說,哪個目錄將用於交換文件。

所以swapfile-dir沒有固定到目錄。你應該根據緩衝區/文件來檢查它。

+0

這大概就是這樣,但顯然swapname是每個緩衝值,所以它看起來像'swapdir'(或東西)也應該可用。不得不解析swapname或'&directory'似乎很愚蠢。 – Tyler

0

如果你這樣做的時候,我建議寫一個函數:

function! SwapDirectoryForCurrentFile() 
    redir => filename 
    silent! swapname 
    redir end 
    return fnamemodify(filename, ":h") 
endfunction 
相關問題