0

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

“无法打开文件..path../AppData/Local/Temp/..临时文件..”

这是 :tempname() 返回的路径和文件名

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

我尝试使用 set 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
4

1 回答 1

2

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

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

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

请注意,您的system()调用相当奇怪:shellescape()应该已经添加了所有需要的引号,以便不需要环绕"\""(如果不需要,您应该正确配置 'shell*' 选项)。您也不需要转义空格:"\ "并且" "是完全相同的字符串。

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

于 2012-05-17T01:21:39.960 回答