Ayo lihat. Saya telah gvim
menjalankan dan saya ingin membuka file, menghormati autocmd
s ( yang mengesampingkan--remote-tab
).
Sekarang saya tahu saya bisa melakukannya (pada dasarnya, dengan beberapa penyesuaian):
gvim --remote-send ":tabe my_file<CR>"
yang bekerja Tetapi jika file memiliki spasi atau karakter aneh di dalamnya, saya harus melakukan hal berikut:
gvim --remote-send ":tabe my\\ file<CR>"
(ganda \\
adalah karena salah satu dari mereka dimakan oleh shell; ini setara dengan mengetik secara manual
`:tabe my\ file`
di vim
dan itu bekerja). Sekarang, saya dapat menemukan cara untuk membuat string di shell atau apa pun, tetapi saya berharap saya bisa "secara global mengutip" string dalam perintah ": tabe", seperti
gvim --remote-send ":tabe 'my file'<CR>"
atau
gvim --remote-send ":tabe \"my file\"<CR>"
--- ini sama dengan menulis langsung di baris perintah vim :tabe "my file"
; sepertinya itu tidak berfungsi. Saya dapat secara eksplisit mengutip semua ruang dalam string dengan shell, melakukan sesuatu seperti
# <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>"
tetapi hanya berfungsi untuk spasi dan bukan karakter khusus lainnya seperti tab dan "
(atau baris baru, tetapi jika Anda memiliki baris baru dalam nama file Anda, Anda pantas mendapatkannya!).
Pertanyaan :
Secara independen pada shell tertentu, yang akan saya tangani setelah :-), apakah ada cara ketika langsung mengetikkantabe:
baris vim untuk secara global mengutip nama file tanpa akan mengutip karakter "aneh" satu per satu?
sumber
gvim --remote-send ':tabe foo\ bar.txt<CR>'
bekerja untuk saya di bash dan zsh. Dan kutipan itu tampaknya juga penting. Jika saya menggunakan"
internal, itu tidak berhasil, tetapi'
tidak:gvim --remote-send ":tabe 'foo bar.txt'<CR>"
gvim --remote-send ":tabe 'f s.txt'<CR>"
tidak bekerja untuk saya, atau menulis:tabe 'f s.txt'
dalam vim, saya mengertiE77: Too many files names
.gvim --servername $desktop --remote-send "<ESC>:tabe ${file// /\\ }<CR>"
lebih sederhana?shellescape
fungsinya akan membantu?:edit
(dan variannya) tidak menerima nama file yang dikutip. Semua karakter khusus harus lolos secara individual. Jadi,:edit "foo bar.txt"
tidak akan berhasil; kamu membutuhkan:edit foo\ bar.txt
. Yang mengatakan, sesuatu seperti:execute 'tabedit' escape('$file', ' ')
mungkin berada di jalur yang benar.Jawaban:
Untuk info umum, dan terima kasih untuk semua komentar, ini skrip yang saya gunakan untuk memiliki skrip "buka di tab pada gvim di desktop ini":
sumber
Apa yang berhasil saya kirim ke Vim adalah:
'<C-\\><C-N>:1wincmd<C-q>x20w<CR>'
Di mana ruang didefinisikan sebagai x20 yang berarti memasukkan hex $ 20.sumber