Dışarıdan vim ile konuşmak


12

Bir vim örneğindeki değişkeni başka bir kabuktan değiştirebilir miyim (anahtarları tmux aracılığıyla göndermeden)?

Durum satırında derleme durumunu göstermek için lateksmk compiling_cmd, success_cmd ve fail_cmd seçeneklerini kullanmak istediğimi soruyorum.

Belki de vim belirli dosyaların varlığını veya yokluğunu (boole değişkenleri olarak dosyaları kullanarak) arayabilir miyim? Ama bu biraz kirli görünüyor; umarım daha iyi bir yol vardır.

Yanıtlar:


19

İlk Vim oturumunuzu şu argümanla başlatırsanız --servername VIM:

$ vim --servername VIM

bağımsız değişken ile herhangi bir kabuktan herhangi bir komut gönderebilirsiniz --remote-send.

Örneğin, bazı değişkenin değerini görüntülemek için durum satırınızı kullanırsanız ve vimrc'nizde g:myvaraşağıdaki satırlar varsa:

let g:myvar = "foo"
set stl+=%{g:myvar}

Ardından, değerini ( :let g:myvar = "bar") başka bir kabuktan değiştirebilirsiniz:

$ vim --remote-send ':let g:myvar = "bar"<cr>'

Durum çizgisi, değerin değişimini yansıtmalıdır.


Son yorumunuzun söylediği gibi, Vim örneğiniz normal modda değilse, önceki komut beklendiği gibi çalışmaz. Daha basit olabilir, ancak işte 2 olası çözüm:

1) <esc>normal modda olmak için anahtar ekleyin
2) bir ifadeyi değerlendirmek ve kodu değişkeninize yeni değer atayacak küçük bir yardımcı işlev yazmak --remote-expryerine argümanı kullanın--remote-send

İlk çözüm:

$ vim --remote-send '<esc>:let g:myvar = "bar"<cr>'

İkinci çözüm:

Vimrc'nizde aşağıdaki işlevi tanımlayın:

function! Myfunc(value)
    let g:myvar = a:value
endfunction

Ardından, kabuğunuzda:

$ vim --remote-expr 'Myfunc("bar")'

Teşekkür ederim! Bu özelliğin derlenmediğini görüyorum, bu yüzden yeniden derleyeceğim. Umarım neovim'de de aynıdır.
Diş

3
@Lawrence Yanlış olabilirim, ama neovim'in bu +clientserverözelliği uygulamadığını düşünüyorum ( github.com/tpope/vim-dispatch/issues/163#issuecomment-175383047 ). Bu durumda, belki bu eklenti size yardımcı olacaktır: github.com/mhinz/neovim-remote
user9433424

Bunun tmux ile anahtar gönderme ile aynı etkiye sahip olduğu ve vim sunucusunun hangi modda olduğunu bilmesine bağlı olduğu görülmektedir (örnek normal modu varsayar). İdeal olarak, bir değişkeni doğrudan ayarlamak istiyorum.
Diş
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.