Vim tempname()未创建目录

Vim tempname()未创建目录,vim,Vim,我遇到了一个Vim插件的问题,它试图获取一个临时文件,但无法创建目录 因此,当它被使用时,插件会失败,因为从未创建过目录,因此它会抛出一个错误,因为该文件从未写入 我只能在Gentoo上复制: :let temp_file = tempname() :echo temp_file /tmp/vhISQyY/3 Press ENTER or type command to continue :!ls /tmp/ pathogen pip_build_vagrant solarized Pre

我遇到了一个Vim插件的问题,它试图获取一个临时文件,但无法创建目录

因此,当它被使用时,插件会失败,因为从未创建过目录,因此它会抛出一个错误,因为该文件从未写入

我只能在Gentoo上复制:

:let temp_file = tempname()
:echo temp_file
/tmp/vhISQyY/3
Press ENTER or type command to continue
:!ls /tmp/
pathogen  pip_build_vagrant  solarized

Press ENTER or type command to continue
该插件遵循
:help tempname()
中给出的相同示例,用于重定向命令

我知道该文件将不存在,但没有目录中断。其他使用
tempname()
的插件从不检查包含的目录是否存在,只对其进行写入,因此我想知道这是否是Vim错误,或者我是否真的在插件中做错了什么

这是从tpope的
transmission
插件中摘录的,该插件以相同的方式使用
tempname()
(不检查目录):

失败的插件是这样使用的:

let tmp_path = tempname()
silent! execute "keepalt w " . tmp_path

有东西正在删除或清理您的/tmp目录。我曾经提出过一个解决这个问题的方法,但是Bram不想包括它。从那时起,我的
.vimrc

"In case /tmp get's clean out, make a new tmp directory for vim:               
:command! Mktmpdir call mkdir(fnamemodify(tempname(),":p:h"),"",0700)  

非常确定现有的“/tmp”是POSIX需求。它是用stdio.h硬编码的。所以它永远不需要被创建。@stark缺少的不是
/tmp/
,我列出了该目录(
/tmp/
),以证明Vim所说的目录不存在:
vhISQyY
,在我的示例中。这真的很奇怪,我得到:
E739:无法创建目录:/tmp/vXlIB4W
,但如果我
ls/tmp/
它就在那里。如果临时目录存在,那么Vim访问临时文件应该不会有问题,你的插件也应该可以工作。
"In case /tmp get's clean out, make a new tmp directory for vim:               
:command! Mktmpdir call mkdir(fnamemodify(tempname(),":p:h"),"",0700)