8

Gentoo,vim 版本 7.3.762

问题:
当 vim 实例运行很长时间(如 2 小时)时才会发生。然后我运行了一些需要临时文件的命令,比如:Gstatus在 plugin 中fugitive,我会得到一个错误:

can't open file /tmp/RANDOM_NAME

我不知道是什么原因造成的。它与操作系统的自动清理策略有关吗?
因为我不仅在运行fugitive命令时遇到了这个问题,而且在下面的函数中也遇到了这个问题:

" Use ranger as vim's file chooser
fun! RangerChooser()
    silent !ranger --choosefile=/tmp/chosenfile $([ -z '%' ] && echo -n . || dirname %)
    if filereadable('/tmp/chosenfile')
        exec 'edit ' . system('cat /tmp/chosenfile')
        call system('rm /tmp/chosenfile')
    endif
    redraw!
endfun
4

4 回答 4

20

我遇到了这个问题,因为我最近将我的 shell 从 更改fishbash. 更改我的外壳vimrc解决了问题:

set shell=/bin/bash

于 2015-06-23T12:26:35.397 回答
2

我知道逃亡插件使用 tempname() 内部 vim 函数。此函数返回一个唯一文件名的文件路径,该文件名位于 Unix 风格系统的 /tmp 目录中。如果目录不再存在,则可能会发生此错误。我不确定这是您遇到的问题,但需要检查。

如果您键入:echo isdirectory(fnamemodify(tempname(), ":p:h"))并且返回 0,请查看是否:call mkdir(fnamemodify(tempname(), ":p:h"))导致问题消失。

于 2013-10-31T10:34:52.043 回答
1

我知道这是一个旧线程。仍然张贴以防它对某人有帮助。

我最近在我的系统上遇到了这个错误。文件名的格式是“/tmp// 原来,/tmp/ 目录在我启动我的 vim 实例后已被清理,该实例已经连续运行了几天。

mkdir /tmp/<random-dir-name>无需重新启动 vim 即可快速解决问题。

于 2016-11-25T09:40:05.793 回答
0

将此添加到您的 vimrc 文件中,并在您的主文件夹中创建文件夹 .tmp

let $TMPDIR = $HOME."/tmp"
于 2017-05-17T12:21:22.903 回答