0

SASにコマンドを発行するvimスクリプトを使用しようとしていますが、スクリプトを実行しようとするとエラーが発生します

「ファイル..path../ AppData / Local / Temp/..一時ファイル..を開くことができません。」

これは、:tempname()によって返されるパスとファイル名です。

appdata一時ファイルディレクトリに移動した後、一時ファイルは存在しません。

set backupdir =〜\ tmp(作成したディレクトリ)を使用してバックアップディレクトリを手動で変更しようとしましたが、:tempname()の戻り値は変更されず、一時ファイルも実際には存在しません。

2つの質問、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'には、バックアップファイルが生成されるディレクトリのリストが含まれています。一時ディレクトリとは関係ありません(場所によって異なりますが、逆は当てはまりません)。vimusingのいずれかから%TMP%またはenvironmentvariableを使用してみてください%TEMP%

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

またはvimが起動する前(Windowsでこれを行う方法がわからない)。使用let $TMPはwineの下で機能しますが、既存の一時ディレクトリに対してのみ機能します。

system()呼び出しはかなり奇妙であることに注意してください。shellescape()周囲"\""が不要になるように、必要なすべての引用符をすでに追加する必要があります(そうでない場合は、「shell *」オプションを適切に構成する必要があります)。また、スペースをエスケープする必要はありません。"\ "" "はまったく同じ文字列です。

2番目の質問について:ファイルの内容を2番目の引数としてに渡してみることができますsystem()が、ファイルにNULLが含まれている可能性がある場合は、機能しません。

于 2012-05-17T01:21:39.960 に答える