Vamos ver. Eu tenho uma gvim
corrida e quero abrir um arquivo, respeitando os autocmd
(o que exclui--remote-tab
).
Agora eu sei que posso fazer (basicamente, com alguns ajustes):
gvim --remote-send ":tabe my_file<CR>"
que funciona Mas se um arquivo tiver espaços ou caracteres estranhos, eu tenho que fazer o seguinte:
gvim --remote-send ":tabe my\\ file<CR>"
(o dobro \\
é porque um deles é comido pela casca; isso é equivalente ao tipo manualmente
`:tabe my\ file`
no vim
e ele funciona). Agora, posso encontrar uma maneira de criar essa string no shell ou qualquer outra coisa, mas esperava poder "citar globalmente" a string no comando ": tabe", como
gvim --remote-send ":tabe 'my file'<CR>"
ou
gvim --remote-send ":tabe \"my file\"<CR>"
--- isso é equivalente a escrever diretamente na linha de comando do vim :tabe "my file"
; parece que não está funcionando. Eu posso citar explicitamente todo o espaço na string com o shell, fazendo algo como
# <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>"
mas funciona apenas para espaços e não para outros caracteres especiais, como tabulações e "
(nem novas linhas, mas se você tiver novas linhas nos nomes dos arquivos, você merece!).
A questão :
Independentemente do shell em particular, com o qual tratarei depois :-), existe uma maneira de digitar diretamente na tabe:
linha vim para citar globalmente um nome de arquivo sem citar os caracteres "estranhos" um por um?
gvim --remote-send ":tabe 'f s.txt'<CR>"
não funcionou para mim, nem escrevi :tabe 'f s.txt'
no vim, entendi E77: Too many files names
.
gvim --servername $desktop --remote-send "<ESC>:tabe ${file// /\\ }<CR>"
seria mais simples?
shellescape
função seria útil?
:edit
(e suas variantes) não aceitam um nome de arquivo citado. Todos os caracteres especiais precisam ser escapados individualmente. Então, :edit "foo bar.txt"
não vai funcionar; você precisa :edit foo\ bar.txt
. Dito isto, algo como :execute 'tabedit' escape('$file', ' ')
pode estar no caminho certo.
gvim --remote-send ':tabe foo\ bar.txt<CR>'
trabalhou para mim no bash e zsh. E as citações parecem importar também. Se eu uso"
internamente, não funcionou, mas'
funcionou:gvim --remote-send ":tabe 'foo bar.txt'<CR>"