簡體   English   中英

Windows上的gvim:tempname()指向的文件不存在

[英]gvim on windows: file pointed to by tempname() does not exist

我正在嘗試使用向sas發出命令的vim腳本,當我嘗試運行腳本時,我收到錯誤

“無法打開文件..路徑.. / AppData / Local / Temp / ..臨時文件..”

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

導航到appdata臨時文件目錄后,臨時文件不存在。

我嘗試使用set backupdir =〜\\ tmp(我創建的目錄)手動更改備份目錄,但這不會更改:tempname()的返回值,也不會真正存在tempfile。

兩個問題,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

選項'backupdir'包含生成備份文件的目錄列表,它與臨時目錄無關(除了它取決於它所在的位置,相反的情況不是這樣)。 您應該嘗試使用%TMP%%TEMP%環境變量,來自vim using

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

或者在vim啟動之前(不知道如何在Windows上執行此操作)。 使用let $TMP確實可以在wine下使用,但僅適用於現有的臨時目錄。

請注意,你的system()調用很奇怪: shellescape()應該已經添加了所有需要的引號,因此不需要周圍的"\\"" (如果不是你應該正確配置'shell *'選項)。你也不要需要轉義空格: "\\ "" "是完全相同的字符串。

關於第二個問題:您可以嘗試將文件內容作為第二個參數傳遞給system() ,但是如果文件可能包含NULL,則它不會起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM