如何在vimscript中获取当前交换目录的值?

时间:2013-06-01 00:14:51

标签: vim

您可以设置vim用于交换文件的目录列表(默认为它可以找到的第一个目录):

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

我想知道vim为其交换文件选择了哪个目录,所以我可以在那里添加一些临时数据。

解析&directory并循环显示值似乎是浪费,当vim应该已经知道了。

3 个答案:

答案 0 :(得分:3)

:swapname命令将告诉您哪个交换文件用于当前缓冲区。您需要使用:redir => varname来捕获输出并将其存储在变量中。

答案 1 :(得分:0)

我认为“used”目录不会被vim保存在某个地方,比如变量或其他东西。从缓冲区到缓冲区可能有所不同。 (从文件到文件)。

e.g。

您拥有非root用户。说kent,他的目录设置是:

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

现在kent在他的vim中打开/etc/host.conf并进行编辑。第一个.(dot)表示当前目录。显然kent无法将文件写入/etc,因此请选择第二个~/tmp,但肯特在其家中没有tmp,因此接下来使用/var/tmp

如果肯特在他的HOME下打开文件,或者在/tmp下打开文件,则会使用.(dot)。请注意,不同文件的dot不同。

肯特可以在缓冲区中打开很多文件,所以很难说,哪个目录会用于交换文件。

所以swapfile -dir没有固定到目录。你应该根据缓冲区/文件来检查它。

答案 2 :(得分:0)

如果你经常这样做,我建议写一个函数:

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