Mal sehen. Ich habe ein gvim
Rennen und ich möchte eine Datei öffnen, unter Beachtung der autocmd
s ( 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 vim
und 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?
shellescape
Funktion 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>"