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?
quelle
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>"
gvim --remote-send ":tabe 'f s.txt'<CR>"
hat bei mir nicht funktioniert:tabe 'f s.txt'
und ich habe auch nicht geschriebenE77: 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.Antworten:
Für allgemeine Informationen und dank aller Kommentare ist dies das Skript, das ich verwende, um ein Skript "Öffnen in einer Registerkarte in der GVIM auf diesem Desktop" zu haben:
quelle
Was ich geschafft habe, an Vim zu senden, ist:
'<C-\\><C-N>:1wincmd<C-q>x20w<CR>'
Wo Raum als x20 definiert ist, was bedeutet, Hex $ 20 einzufügen.quelle