Berbicara dengan vim dari luar


12

Bisakah saya mengubah variabel dalam contoh vim dari shell lain (tanpa mengirim kunci melalui tmux)?

Saya bertanya karena saya ingin menggunakan opsi compiling_cmd latexmk, success_cmd, dan fail_cmd untuk menunjukkan status kompilasi pada statusline.

Mungkin saya bisa melihat apakah ada atau tidak adanya file tertentu (menggunakan file sebagai variabel boolean)? Tapi ini agak kotor; semoga ada cara yang lebih baik.

Jawaban:


19

Jika Anda meluncurkan sesi Vim pertama Anda dengan argumen --servername VIM:

$ vim --servername VIM

maka Anda dapat mengirim perintah apa pun dari shell lain dengan argumen --remote-send.

Misalnya, jika Anda menggunakan status Anda untuk menampilkan nilai beberapa variabel g:myvar, dan Anda memiliki baris berikut di vimrc Anda:

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

Kemudian Anda dapat mengubah nilainya ( :let g:myvar = "bar") dari shell lain:

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

Baris status harus mencerminkan perubahan nilai.


Seperti komentar terakhir Anda mengatakannya, jika instance Vim Anda tidak dalam mode normal, perintah sebelumnya tidak akan berfungsi seperti yang diharapkan. Mungkin ada yang lebih sederhana, tetapi di sini ada 2 solusi yang mungkin:

1) tambahkan kunci <esc>untuk berada dalam mode normal
2) gunakan argumen --remote-expralih-alih --remote-senduntuk mengevaluasi ekspresi dan menulis fungsi pembantu kecil yang kodenya akan menetapkan nilai baru ke variabel Anda

Solusi pertama:

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

Solusi kedua:

Tentukan fungsi berikut di vimrc Anda:

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

Kemudian, di shell Anda:

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

Terima kasih! Saya melihat tidak memiliki fitur ini dikompilasi, jadi saya akan mengkompilasi ulang. Semoga sama saja dalam neovim.
Toothrot

3
@ Hukum Saya mungkin salah, tapi saya pikir neovim tidak mengimplementasikan +clientserverfitur ( github.com/tpope/vim-dispatch/issues/163#issuecomment-175383047 ). Jika itu masalahnya, mungkin plugin ini akan membantu Anda: github.com/mhinz/neovim-remote
user9433424

Tampaknya ini memiliki efek yang sama dengan mengirim kunci dengan tmux, dan tergantung pada mengetahui mode mana server vim berada (contohnya mengasumsikan mode normal). Idealnya, saya ingin dapat mengatur variabel secara langsung.
Toothrot
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.