您可以設置目錄的列表VIM爲交換文件使用(它默認爲第一個能找到)與:如何獲取vimscript中當前交換目錄的值?
set directory=~/tmp,~/var/tmp,/var/tmp,/tmp
我想知道哪個目錄的vim選擇了它的交換文件等等我可以在那裏粘貼一些臨時數據。
解析&directory
並且當vim應該已經知道這些值時,循環遍歷這些值似乎是一種浪費。
您可以設置目錄的列表VIM爲交換文件使用(它默認爲第一個能找到)與:如何獲取vimscript中當前交換目錄的值?
set directory=~/tmp,~/var/tmp,/var/tmp,/tmp
我想知道哪個目錄的vim選擇了它的交換文件等等我可以在那裏粘貼一些臨時數據。
解析&directory
並且當vim應該已經知道這些值時,循環遍歷這些值似乎是一種浪費。
:swapname
命令會告訴你哪個交換文件用於當前緩衝區。您需要使用:redir => varname
來捕獲輸出並將其存儲在一個變量中。
我認爲「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沒有固定到目錄。你應該根據緩衝區/文件來檢查它。
這大概就是這樣,但顯然swapname是每個緩衝值,所以它看起來像'swapdir'(或東西)也應該可用。不得不解析swapname或'&directory'似乎很愚蠢。 – Tyler
如果你這樣做的時候,我建議寫一個函數:
function! SwapDirectoryForCurrentFile()
redir => filename
silent! swapname
redir end
return fnamemodify(filename, ":h")
endfunction
這是我想到的最好的。如果noswapfile所以解析&目錄會更好,它會(當然)失敗。 – Tyler
然後它說'沒有交換文件',無論如何,你可以在之前檢查''noswapfile'',所以我沒有看到如何解析''目錄''更好。特別是因爲swap擴展不一定是'.swp';它也可以是'.swo'等。 –