2013-10-06 56 views
2

我试图使用下面的vim函数来在Windows上运行我的sas,但我总是收到错误消息,说系统的参数是无效的。vim函数系统无效的参数

有些vim专家能帮我吗?

MYY SAS被安装在:

C:\ Program Files文件\ SAS \​​ SAS \​​ 9.1 \ sas.exe

function! RunSASonCurrentFile() 
    " Make sure this is a SAS program file (ends with .sas) so that 
    " we don't run SAS on a log file or similar. 
    :let checkSASpgm=match(expand("%"),"\.sas") 

    " If we did not match .sas in the file name, end this function with 
    " a warning msg 
    if checkSASpgm==-1 
     :echo "*** Current file is not a SAS program. SAS run has been canceled." 
     :return 
    endif 

    " Ask user if we want to run SAS so we don't accidentally run it. 
    :let l:answer = input("Run SAS? Y/N ") 
    :if (l:answer == "Y" || l:answer == "y") 

    " If file has been modified, save it before running 
    if exists(&modified) 
     :echo "*** Saving modified file before SAS run..." 
     :w 
    endif 

    " Run SAS on path/file name (modify to your location of sas) 
    :echo "*** Running SAS..." 
    "let returntxt = system("/usr/local/bin/sas -nodms " . shellescape(expand("%:p"))) 
    " The following may work for your Windows system. Comment the line above and uncomment 
    " the two lines below and make them one long line. 
    let returntxt = system("\"" . shellescape("C:\\Program\ Files\\SAS\\SAS\9.1\\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 

    :call LoadSASLogList() 

    :else 
    :echo "SAS Run cancelled." 

    " endif for the Run SAS? check 
    :endif 
    endfunction 

回答

4

Vim补丁7.3.443改变了shell转义的行为(由于神秘的Windows shell转义规则,它仍然是一个麻烦点)。而之前,如果它包含一个带有空格的(本身带引号的)可执行文件,则必须将整个命令行用双引号括起来,现在必须将其删除。请尝试以下操作:

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

这也避免了使用单引号字符串进行一些额外的转义。

0

如果这是你的函数的确切文字,我觉得你SAS和9.1在行let returntxt = system("\"" . shellescape("C:\\Program\ Files\\SAS\\SAS\9.1\\sas.exe")之间缺少第二个\。

+0

我试图纠正它。不起作用。谢谢你回答我。 – john

+0

它说系统(....)的无效argagument。我怕我通过了一个错误的字符串。 – john