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

时间:2012-05-16 19:34:19

标签: windows vim

我正在尝试使用向sas发出命令的vim脚本, 当我尝试运行脚本时收到错误

“无法打开文件..path .. / AppData / Local / Temp / .. temp file ..”

这是由tempname()

返回的路径和文件名

导航到appdata临时文件目录后,临时文件不存在。

我尝试使用set backupdir =〜\ tmpmp手动更改备份目录 (我创建的目录) 但是这不会改变: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

1 个答案:

答案 0 :(得分:2)

选项'backupdir'包含生成备份文件的目录列表,它与临时目录无关(除了它取决于它所在的位置,相反的情况不是这样)。您应该尝试使用来自vim的%TMP%%TEMP%环境变量

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

或启动vim之前(不知道如何在Windows上执行此操作)。使用let $TMP在wine下对我有用,但仅适用于现有的临时目录。

请注意,您的system()电话很奇怪:shellescape()应该已经添加了所有必需的引号,因此不需要周围的"\""(如果不是,则应该正确配置'shell * '选项)。您也不需要转义空格:"\ "" "是完全相同的字符串。

关于第二个问题:您可以尝试将文件内容作为第二个参数传递给system(),但如果文件可能包含NULL,则无法正常工作。