2012-05-16 41 views
0

我試圖用VIM腳本當我嘗試運行我收到一條錯誤gvim的在Windows上:指向的文件tempname()不存在

「燦腳本發出到SAS, 命令「T打開文件..path .. /應用程序數據/本地/溫度/ ..臨時文件。「

這是返回的路徑和文件名:()tempname

導航到應用程序數據後溫度文件目錄,臨時文件不存在。

我已經試過手動更改設置與= BACKUPDIR〜\ tmp目錄 (目錄我創建) 備份目錄,但不改變的返回值:tempname()也沒有在臨時文件實際存在。

兩個問題, 1.有沒有辦法確保vim正在編寫腳本似乎需要的文件 2.我可以重寫腳本以避免需要臨時文件嗎? (只是傳遞的路徑,實際的文件到SAS?)

腳本的相關部分是

let returntxt = system("\"" . 
    \ shellescape("C:\\Program\ Files\\SAS\\SASFoundation\\9.2\\sas.exe") . 
    \ "\ -nosplash" . "\ -sysin" . "\ " . 
    \ shellescape(expand("%:p")) . "\"") 

" Shows the return messages from the SAS commandline (may be useful 
" if no log produced) 
:echo "*** SAS commandline: " . returntxt 

回答

2

選項「BACKUPDIR」包含其中的備份文件生成的目錄列表,它沒有任何關係使用臨時目錄(除了它取決於它位於的位置,相反是不正確的)。你應該使用

let $TMP=expand('~/tmp') 

嘗試使用%TMP%%TEMP%環境變量,無論是從VIM或啓動VIM之前(不知道如何做到這一點在Windows上)。使用let $TMP在wine下適用於我,但僅適用於現有的臨時目錄。

請注意,您的通話system()比較奇怪:shellescape()應該已經添加所有需要的報價讓周圍"\""不需要(如果沒有,你應該正確配置「殼*」選項)。您也不需要轉義空格:"\ "" "是完全相同的字符串。

關於第二個問題:您可以嘗試將文件內容作爲第二個參數傳遞給system(),但是如果文件可能包含NULL,它將無法工作。

+0

我認爲PowerShell(Windows 7)和shell轉義有問題嗎? 「無法識別術語'C:\ Program'作爲cmdlet,函數,腳本文件或可操作程序的名稱」無論如何返回到system() –

+0

,修復shell問題並正確設置臨時目錄doesn'解決問題。現在vim抱怨臨時文件不存在於我的新目錄中。導航到該目錄我找到一個文件是文件名〜但vim正在尋找一個名稱爲'VIo5B24.tmp'的臨時文件 –

+0

@justincress如果'shellescape('C:\ Program Files \ ...')如果不使用''''''''''這意味着你應該1.更新vim到最新版本(如果不是)2.如果問題仍然存在,後者,也許有一個powershell用戶那裏) – ZyX

相關問題