Bakalım. Ben bir gvimçalışma var ve autocmds ( 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ı ?
shellescapeiş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>"