Bakalım. Ben bir gvim
çalışma var ve autocmd
s ( hangi kurallar--remote-tab
) saygı, bir dosya açmak istiyorum .
Şimdi yapabileceğimi biliyorum (temel olarak, bazı tweak ile):
gvim --remote-send ":tabe my_file<CR>"
hangi çalışır. Ancak bir dosyanın içinde boşluklar veya garip karakterler varsa, aşağıdakileri yapmam gerekir:
gvim --remote-send ":tabe my\\ file<CR>"
(ikincisi \\
, bunlardan biri kabuk tarafından yenilmesidir;
`:tabe my\ file`
içinde vim
) ve çalışıyor. Şimdi, bu dizeyi kabukta veya başka bir şekilde oluşturmanın bir yolunu bulabilirim, ancak ": tabe" komutundaki dizeyi "global olarak alıntılayabileceğim"
gvim --remote-send ":tabe 'my file'<CR>"
veya
gvim --remote-send ":tabe \"my file\"<CR>"
--- bu doğrudan vim komut satırında yazmaya eşdeğerdir :tabe "my file"
; çalışmıyor gibi görünüyor. Açıkça kabuk ile dize tüm alanı teklif edebilir, gibi bir şey yapıyor
# <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>"
ancak sekmeler ve "
(veya yeni satırlar gibi diğer özel karakterlerde değil, yalnızca boşluklar için çalışır , ancak dosya adlarınızda yeni satırlarınız varsa bunu hak ediyorsunuz!).
Soru :
Bağımsız olarak :-) sonra ele alacağım kabuk üzerinde, doğrudantabe:
"garip" karakterleri tek tek teklif etmeden bir dosya adı küresel teklif etmek için vim satırında yazarken bir yolu var mı?
gvim --remote-send ":tabe 'f s.txt'<CR>"
benim için çalışmadı, :tabe 'f s.txt'
vim yazmadım E77: Too many files names
.
gvim --servername $desktop --remote-send "<ESC>:tabe ${file// /\\ }<CR>"
kolay olmaz mıydı ?
shellescape
işlevi yararlı olabilir?
:edit
(ve varyantları) alıntılanmış bir dosya adını kabul etmez. Tüm özel karakterler ayrı ayrı kullanılmalıdır. Yani, :edit "foo bar.txt"
çalışmaz; ihtiyacınız var :edit foo\ bar.txt
. Bununla birlikte, böyle bir şey :execute 'tabedit' escape('$file', ' ')
doğru yolda olabilir.
gvim --remote-send ':tabe foo\ bar.txt<CR>'
benim için bash ve zsh üzerinde çalıştı. Ve alıntılar da önemli gibi görünüyor."
Dahili olarak kullanırsam işe yaramadı, ancak'
yaptı:gvim --remote-send ":tabe 'foo bar.txt'<CR>"