Vediamo. Ho una gvim
corsa e voglio aprire un file, rispettando la autocmd
s ( che esclude--remote-tab
).
Ora so di poterlo fare (in sostanza, con qualche modifica):
gvim --remote-send ":tabe my_file<CR>"
che funziona. Ma se un file contiene spazi o caratteri strani, devo fare quanto segue:
gvim --remote-send ":tabe my\\ file<CR>"
(il doppio \\
è perché uno di essi viene mangiato dalla shell; questo equivale a digitare manualmente
`:tabe my\ file`
in vim
e funziona). Ora, posso trovare un modo per creare quella stringa nella shell o altro, ma speravo di poter "citare a livello globale" la stringa nel comando ": tabe", come
gvim --remote-send ":tabe 'my file'<CR>"
o
gvim --remote-send ":tabe \"my file\"<CR>"
--- questo equivale a scrivere direttamente nella riga di comando di vim :tabe "my file"
; sembra che non funzioni. Posso citare esplicitamente tutto lo spazio nella stringa con la shell, facendo qualcosa di simile
# <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>"
ma funziona solo per gli spazi e non per altri caratteri speciali come le schede e "
(né le nuove righe, ma se hai nuove righe nei nomi dei tuoi file te lo meriti!).
La domanda :
Indipendentemente dalla particolare shell, con la quale tratterò dopo :-), c'è un modo quando si digita direttamente la tabe:
riga vim per citare globalmente un nome file senza andare a citare gli "strani" caratteri uno per uno?
gvim --remote-send ":tabe 'f s.txt'<CR>"
non ha funzionato per me, né scrivere :tabe 'f s.txt'
in vim, ho capito E77: Too many files names
.
gvim --servername $desktop --remote-send "<ESC>:tabe ${file// /\\ }<CR>"
sarebbe più semplice?
shellescape
funzione sarebbe utile?
:edit
(e le sue varianti) non accetta un nome file tra virgolette. Tutti i personaggi speciali devono essere sfuggiti individualmente. Quindi, :edit "foo bar.txt"
non funzionerà; hai bisogno :edit foo\ bar.txt
. Detto questo, qualcosa del genere :execute 'tabedit' escape('$file', ' ')
potrebbe essere sulla strada giusta.
gvim --remote-send ':tabe foo\ bar.txt<CR>'
ha lavorato per me su bash e zsh. E anche le citazioni sembrano avere importanza. Se uso"
internamente, non ha funzionato, ma'
ha funzionato:gvim --remote-send ":tabe 'foo bar.txt'<CR>"