0

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

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

我想知道 vim 为其交换文件选择了哪个目录,以便我可以在其中粘贴一些临时数据。

&directory当 vim 应该已经知道这一点时,解析和循环遍历这些值似乎是一种浪费。

4

3 回答 3

3

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

于 2013-06-01T12:40:31.700 回答
0

我认为“使用”目录没有被 vim 保存在某个地方,比如变量或其他东西。它可能因缓冲区而异。(从文件到文件)。

例如

你有一个非root用户。比如说kent,他的目录设置是:

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

现在 kent /etc/host.conf在他的 vim 中打开并进行编辑。第一个.(dot)表示当前目录。很明显kent不能写文件/etc,所以取2nd ~/tmp,但是kent他家下没有tmp,所以next,/var/tmp就用了。

例如,如果 kent 在他的 HOME 或 HOME 下打开一个文件/tmp.(dot)就会使用 。并注意dot对于不同的文件是不同的。

kent 可以在缓冲区中打开许多文件,因此很难说哪个目录将用于交换文件。

所以交换文件 - 目录不固定到一个目录。您应该根据缓冲区/文件检查它。

于 2013-06-01T00:35:09.260 回答
0

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

function! SwapDirectoryForCurrentFile()
    redir => filename
    silent! swapname
    redir end
    return fnamemodify(filename, ":h")
endfunction
于 2013-06-01T15:12:19.730 回答