Mal sehen. Ich habe ein gvimRennen und ich möchte eine Datei öffnen, unter Beachtung der autocmds ( was ausschließt--remote-tab ).
Jetzt weiß ich, dass ich Folgendes tun kann (im Grunde genommen mit einigem Aufwand):
gvim --remote-send ":tabe my_file<CR>"
welches funktioniert. Aber wenn eine Datei Leerzeichen oder seltsame Zeichen enthält, muss ich Folgendes tun:
gvim --remote-send ":tabe my\\ file<CR>"
(Das Doppelte \\liegt daran, dass einer von ihnen von der Shell gefressen wird. Dies entspricht der manuellen Eingabe
`:tabe my\ file`
in vimund es funktioniert). Jetzt kann ich einen Weg finden, diese Zeichenkette in der Shell oder was auch immer zu erstellen, aber ich hoffte, ich könnte die Zeichenkette im Befehl ": tabe" wie "global zitieren"
gvim --remote-send ":tabe 'my file'<CR>"
oder
gvim --remote-send ":tabe \"my file\"<CR>"
--- Dies entspricht dem Schreiben direkt in die vim-Befehlszeile :tabe "my file". es scheint, dass es nicht funktioniert. Ich kann mit der Shell explizit alle Leerzeichen in der Zeichenkette zitieren und so etwas tun
# <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>"
Aber es funktioniert nur für Leerzeichen und nicht für andere Sonderzeichen wie Tabulatoren und "(auch nicht für Zeilenumbrüche, aber wenn Sie Zeilenumbrüche in Ihren Dateinamen haben, haben Sie es verdient!).
Die frage :
Gibt es eine Möglichkeit, unabhängig von der jeweiligen Shell, mit der ich mich später befasse :-), beim direkten Eingeben der vim- tabe:Zeile einen Dateinamen global zu zitieren, ohne die "seltsamen" Zeichen einzeln zu zitieren?
gvim --remote-send ":tabe 'f s.txt'<CR>"hat bei mir nicht funktioniert :tabe 'f s.txt'und ich habe auch nicht geschrieben E77: Too many files names.
gvim --servername $desktop --remote-send "<ESC>:tabe ${file// /\\ }<CR>"einfacher?
shellescapeFunktion hilfreich?
:edit(und seine Varianten) keine Dateinamen in Anführungszeichen akzeptieren. Alle Sonderzeichen müssen einzeln maskiert werden. Also :edit "foo bar.txt"wird nicht funktionieren; du brauchst :edit foo\ bar.txt. Das heißt, so etwas :execute 'tabedit' escape('$file', ' ')könnte auf dem richtigen Weg sein.
gvim --remote-send ':tabe foo\ bar.txt<CR>'arbeitete für mich an bash und zsh. Und die Zitate scheinen auch eine Rolle zu spielen. Wenn ich es"intern benutze , hat es nicht funktioniert, aber es hat'funktioniert:gvim --remote-send ":tabe 'foo bar.txt'<CR>"