どれどれ。私はgvim
走っているので、ファイルを開いて、autocmd
sを尊重します(これは除外されます--remote-tab
)。
今、私はできることを知っています(基本的に、いくつかの微調整を行います):
gvim --remote-send ":tabe my_file<CR>"
動作します。しかし、ファイルにスペースや奇妙な文字が含まれている場合は、次のことを行う必要があります。
gvim --remote-send ":tabe my\\ file<CR>"
(ダブル\\
は、そのうちの1つがシェルに食べられるためです。これは、手動で入力するのと同じです。
`:tabe my\ file`
でvim
動作します)。これで、シェルなどでその文字列を作成する方法を見つけることができますが、次のように、「:tabe」コマンドで文字列を「グローバルに引用」できるといいのですが
gvim --remote-send ":tabe 'my file'<CR>"
または
gvim --remote-send ":tabe \"my file\"<CR>"
---これは、vimコマンドラインに直接書き込むのと同じ:tabe "my file"
です。動作していないようです。文字列内のすべてのスペースをシェルで明示的に引用して、次のようなことを行うことができます
# <ESC> because the gvim instance can be in a mode different from normal
# the double CR: do not ask.
# the argument MUST be a full path
file="$(readlink -f "$@")"
fileq="$(echo "$file" | awk '{gsub(/ /,"\\\ ")}1')" # quote spaces FIXME add other chars
exec gvim 2>/dev/null --servername $desktop --remote-send "<ESC>:tabe $fileq <CR><CR>"
しかし、それはスペースに対してのみ機能し、タブやその他の特殊文字には使用できません"
(改行も使用できませんが、ファイル名に改行がある場合は、それに値します!)。
質問:
:-)の後に対処する特定のシェルとは独立して、「奇妙な」文字を1つずつ引用せずに、vim 行に直接入力してtabe:
ファイル名をグローバルに引用する方法はありますか?
うーん...
—
Rmano
gvim --remote-send ":tabe 'f s.txt'<CR>"
私にとってはうまくいかず:tabe 'f s.txt'
、vimで書くこともできませんでしたE77: Too many files names
。
gvim --servername $desktop --remote-send "<ESC>:tabe ${file// /\\ }<CR>"
もっとシンプルになりませんか?
この
—
エバーグリーン
shellescape
機能は役に立ちますか?
ことを覚えておいてください
—
tommcdo
:edit
(およびその変種)が引用されたファイル名を受け付けません。すべての特殊文字は個別にエスケープする必要があります。したがって、:edit "foo bar.txt"
動作しません。あなたが必要:edit foo\ bar.txt
です。そうは言っても、そのようなもの:execute 'tabedit' escape('$file', ' ')
は正しい軌道に乗っているかもしれません。
gvim --remote-send ':tabe foo\ bar.txt<CR>'
bashとzshで私のために働いた。そして、引用符も重要なようです。"
内部で使用した場合、機能しませんでしたが、機能'
しました:gvim --remote-send ":tabe 'foo bar.txt'<CR>"