我正在尝试使用向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
答案 0 :(得分:2)
选项'backupdir'包含生成备份文件的目录列表,它与临时目录无关(除了它取决于它所在的位置,相反的情况不是这样)。您应该尝试使用来自vim的%TMP%
或%TEMP%
环境变量
let $TMP=expand('~/tmp')
或启动vim之前(不知道如何在Windows上执行此操作)。使用let $TMP
在wine下对我有用,但仅适用于现有的临时目录。
请注意,您的system()
电话很奇怪:shellescape()
应该已经添加了所有必需的引号,因此不需要周围的"\""
(如果不是,则应该正确配置'shell * '选项)。您也不需要转义空格:"\ "
和" "
是完全相同的字符串。
关于第二个问题:您可以尝试将文件内容作为第二个参数传递给system()
,但如果文件可能包含NULL,则无法正常工作。