9

このvimscriptを「/tmp/example.vim」として持っているとしましょう。

let g:input = "START; % END"
exec("! clear && echo " . shellescape(g:input))

そのファイルを開いてで実行すると:so %、出力は次のようになります。

START; /tmp/example.vim END

「%」がバッファ名に展開されるためです。出力を

START; % END

escape()特にパーセント記号をエスケープするためにジェネリックメソッドを使用できます。これは機能します:

let g:input = "START; % END"
exec("! clear && echo " . escape(shellescape(g:input), "%"))

しかし、それは本当に最良の方法ですか?逃げるべきキャラクターはもっとたくさんいると思います。この目的のための特定のエスケープ機能はありますか?または、シェルアウトするためのより良い方法はありますか?

4

3 に答える 3

10

コマンドで使用するには、オプションの引数を:!に渡す必要があります。{special}shellescape()

引数が存在し、{special}それがゼロ以外の数値または空でない文字列 (|non-zero-arg|) の場合、!%#などの特別な項目の<cword>前にバックスラッシュが付きます。このバックスラッシュは | によって再び削除されます。:!| | 指図。

:exec("! clear && echo " . shellescape(g:input, 1))
于 2013-03-14T07:54:03.180 に答える
4

「%」を適切にエスケープする必要があります。したがって、次のようになります。

let g:input = "START; \\% END"
于 2013-03-13T19:42:42.927 に答える
0

これはそれを行うようです:

let g:input = "START; % END"
echo system("echo " . shellescape(g:input))

出力についてはあまり気にしないことに注意してください。silentこれをより大きなスクリプトで使用します。

于 2013-03-13T19:42:58.563 に答える