2013-10-31 57 views
5

的Gentoo,VIM版本中打開文件/tmp/.* 7.3.762Vim的錯誤:不能當運行一些命令需要臨時文件

問題:
ONLY發生時vim的實例已經跑了很長一段時間(如2小時)。然後我跑這需要在插件fugitive:Gstatus的臨時文件的命令,我會得到一個錯誤:

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 
+0

可能/ tmp目錄是填補了? – user2864740

+0

我遇到這樣一個虛擬文件系統在vim會話中它似乎有些不可思議的狀態,它總是會在vim重啓時消失,並且不會影響其他vim sessi同時運行。 'system()'本身有問題。當它發生時,我可以用':echo system('ls')'重現錯誤。 –

回答

8

我遇到了這個問題,因爲我最近把我的shell從fish更改爲bash。改變我的殼在我vimrc解決了這一問題:

set shell=/bin/bash

2

我知道fugutive插件利用tempname的()內vim的函數。此函數返回Unix風格系統上/ tmp目錄中唯一文件名的文件路徑。如果該目錄不再存在,則可能會發生此錯誤。我不知道這是你所遇到的情況,但這是需要檢查的。

如果輸入:echo isdirectory(fnamemodify(tempname(), ":p:h"))且返回0,請參閱:call mkdir(fnamemodify(tempname(), ":p:h"))是否導致問題消失。

+0

不幸的是,我最近沒有看到這個問題再次發生〜(以及我已經將我的linux內核從3.8升級到了3.10.7)。我想知道在vim還在使用的時候是否有任何操作系統清理臨時文件的可能性。 –

+0

有趣。我沒想到它會有所幫助,但':call mkdir(fnamemodify(tempname(),「:p:h」))'修復了這個問題。看起來你也可以通過使用':call system('rm -rf'.fnamemodify(tempname(),':p:h'))'從vim下刪除一個tmp路徑來使vim進入這個壞的狀態。 –

1

我知道這是一個古老的線程。仍然張貼萬一它有助於某人。

我最近在我的系統上遇到這個錯誤。文件名的格式爲「/ tmp //原來,在啓動我的vim實例後,已經清理了/ tmp /目錄,該實例已運行了幾天。

快速mkdir /tmp/<random-dir-name>修復了問題,而不必重新啓動VIM。

0

這在您的家添加到您的配置文件,實際上和創建文件夾的.tmp foler

let $TMPDIR = $HOME."/tmp"