您可以设置 vim 用于交换文件的目录列表(默认为它可以找到的第一个目录):
set directory=~/tmp,~/var/tmp,/var/tmp,/tmp
我想知道 vim 为其交换文件选择了哪个目录,以便我可以在其中粘贴一些临时数据。
&directory
当 vim 应该已经知道这一点时,解析和循环遍历这些值似乎是一种浪费。
您可以设置 vim 用于交换文件的目录列表(默认为它可以找到的第一个目录):
set directory=~/tmp,~/var/tmp,/var/tmp,/tmp
我想知道 vim 为其交换文件选择了哪个目录,以便我可以在其中粘贴一些临时数据。
&directory
当 vim 应该已经知道这一点时,解析和循环遍历这些值似乎是一种浪费。
该:swapname
命令将告诉您哪个交换文件用于当前缓冲区。您需要用于:redir => varname
捕获输出并将其存储在变量中。
我认为“使用”目录没有被 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 可以在缓冲区中打开许多文件,因此很难说哪个目录将用于交换文件。
所以交换文件 - 目录不固定到一个目录。您应该根据缓冲区/文件检查它。
如果你经常这样做,我建议写一个函数:
function! SwapDirectoryForCurrentFile()
redir => filename
silent! swapname
redir end
return fnamemodify(filename, ":h")
endfunction