4

Win7 で gVim のネイティブ コンパイルを実行すると、vimrc に次のように記述されます。

if has ("win32")
  let $TMP="C:/tmp"
  setlocal equalprg=tidy\ --output-xhtml\ y\ -utf8\ --wrap-attributes\ 1\ --vertical-space\ 1\ --indent\ auto\ --wrap\ 0\ --show-body-only\ auto\ --preserve-entities\ 1\ -q\ -f\ shellpipe=2>
endif

これにより、一時ファイルが作成されます。ただし、コマンドを実行すると、次のように表示されます。

shell returned 1

E485: Can't read file C:\tmp\VIoC935.tmp

私の vimrc スニペットからわかるように、ネイティブ Windows E485 エラーに対する一般的な推奨事項は、私が持っている tmp 変数を設定することです。let ステートメントを削除すると、同様の結果が得られます。

shell returned 1

E485: Can't read file C:\Users\ksk\AppData\Local\Temp\VIfFA01.tmp

両方の場合において; 両方のディレクトリが存在し、gVim はそれらの場所にファイルを書き込むことができます。

:w C:\Users\ksk\AppData\Local\Temp\VIfFA01.tmp

現在のバッファにエラーなしでこのファイルを書き込みます。

興味深いことに、これを書いているときに、新しいバッファーを作成して元のバッファーを削除すると、equalprg 関数がエラーなしで実行されることがわかりました (vimrc の「let」ステートメントの有無にかかわらず)。

4

2 に答える 2

6

これは元の質問には当てはまりませんが、gvim 内の SHELL 変数の設定が原因で、同じ症状に遭遇しました。Cygwin ウィンドウから gvim を起動していたところ、cygwin 内から SHELL 設定が取得されました: /bin/bash. gvim 内から ":set SHELL=C:/cygwin/bin/bash" を実行する必要がありましたが、一時ファイルの問題は解消されました。したがって、この種の問題のトラブルシューティングを試みるときは、gVim 内で (":set shell" を介して) SHELL 変数の設定を確認してください。

于 2013-02-06T19:53:49.510 に答える
3

興味深いことに、これを書いているときに、新しいバッファーを作成して元のバッファーを削除すると、equalprg 関数がエラーなしで実行されることがわかりました (vimrc の「let」ステートメントの有無にかかわらず)。

それはおそらくsetlocalあなたがvimrc

E485: ファイル C:\tmp\VioC935.tmp を読み取れません

理由はわかっていますが、インデント オプションを変更せずに修正する方法がわかりません。この問題は'>'、インデント コマンドのシンボルが原因で発生します。コマンドの最後の部分または'>'シンボルのみを削除すると機能するはずです。これ'>'は、シェル コマンドで特別な意味を持つためです。*nix ではおそらくエスケープできますが、これは Windows では機能しません。

PSこれは完全な答えではないことはわかっていますが、問題の解決に役立つかもしれません.

アップデート。コメントでの小さな議論により、エスケープの正しい方法は、最後の引数を二重引用符で囲むことであることがわかりました (2)以下のバリアント)。したがって、作業コマンドは次のとおりです。

setlocal equalprg=tidy\ --output-xhtml\ y\ -utf8\ --wrap-attributes\ 1\ --vertical-space\ 1\ --indent\ auto\ --wrap\ 0\ --show-body-only\ auto\ --preserve-entities\ 1\ -q\ -f\ "shellpipe=2>"
于 2012-07-24T12:13:08.023 に答える