Apa kegunaan praktis dari mode client-server?

23

Saya tahu bahwa Vim memungkinkan mode server klien ( :h clientserver): dimungkinkan untuk mengubahnya menjadi server yang akan mendapatkan beberapa perintah dan menjalankannya dan sebagai klien yang akan mengirim perintah ke server.

Saya mengerti cara kerjanya, tetapi saya tidak bisa membayangkan penggunaan praktis dari fitur ini: dalam hal apa berguna, dan alur kerja apa yang dapat dibuat menggunakan fitur ini?

Jadi pertanyaan saya sederhana: Apa gunanya mode server klien Vim?

(Saya tunjukkan lagi bahwa pertanyaan saya bukan tentang bagaimana membuatnya bekerja atau bagaimana kerjanya tetapi mengapa menggunakannya.)

statox
sumber
2
Saya cenderung menutup ini terlalu luas.
muru
3
Saya akan mengerti penutupannya terlalu luas. SE mungkin bukan platform yang paling disesuaikan untuk pertanyaan ini, tetapi saya merasa seperti saya kehilangan sesuatu tentang fitur ini jadi saya pikir orang lain bisa mendapat manfaat dari jawaban ini.
statox

Jawaban:

21
  • Sebelum fitur saluran / pekerjaan terbaru dari Vim 7.4, fitur client-server adalah satu-satunya cara untuk melakukan kompilasi latar belakang yang layak - tanpa ketergantungan pada Python. Kami memulai kompilasi sebagai pekerjaan latar belakang, dan ketika selesai, ia memberitahukan kembali ke vim, berkat saluran client-server, bahwa ia telah selesai.

  • Ini juga secara tidak langsung digunakan oleh "plugins" seperti pyclewn untuk mengintegrasikan debugger ke vim. Sebenarnya pyclewn menggunakan fitur + netbeans (yang dibangun di atas + clienterver). Proyek penting lainnya menggunakan antarmuka netbeans ini untuk mengintegrasikan vim dengan IDE - lihat :h netbeans-intro.

  • Ini juga digunakan oleh beberapa plugin tes seperti vimrunner untuk menjalankan tes di Vim dari baris perintah. Saya menggunakannya untuk menguji plugin saya di Travis.

  • Saya juga ingat menyinkronkan klik saya di antarmuka xdvi ke kode sumber LaTeX saya berkat + clientserver.

Luc Hermitte
sumber
1
Jadi bermanfaat untuk tidak digunakan oleh pengguna secara langsung tetapi oleh aplikasi pihak ketiga. Terima kasih atas jawaban Anda yang cukup menarik.
statox
4
@statox Ya. Itulah kasus penggunaan utama yang saya lihat: integrasi sederhana dengan alat eksternal. Sederhana karena kita dapat memberi makan perintah dan fungsi vim melalui baris perintah.
Luc Hermitte
1
Eclim adalah contoh lain dari ini.
goldilocks
13

Penggunaan saya terhadap hal ini sedikit lebih sederhana (dan mungkin biasa) daripada Luc Hermitte.

Jika Anda memulai instance gvim dengan ini dikompilasi dalam (dan itu, dan telah lama, pada, misalnya, distro linux besar seperti Fedora dan Debian), itu dimulai dalam mode server. Saya menekankan "gvim" karena apa yang akan saya uraikan tampaknya tidak berlaku untuk viminstance tunggal di terminal GUI (walaupun saya kira itu bisa terjadi jika Anda menggunakan paramater dengan tepat).

Bagaimanapun, Anda kemudian dapat membuka file dari mana saja dalam instance gvim dengan gvim --remote [file path](tanpa --servernameditentukan). Saya penggemar ini karena saya tidak menavigasi sistem file secara langsung dengan vim; sebaliknya saya menggunakan browser file ortodoks (komandan tengah malam) - atau lebih tepatnya, tumpukan mereka terbuka ke lokasi yang berbeda karena mcringan dan memungkinkan untuk berbagai skema warna kulit untuk menyederhanakan membedakan di antara mereka (jadi saya cenderung memiliki dua atau tiga terbuka secara terpisah tab di setidaknya satu terminal GUI). Namun, saya pikir prinsip yang sama akan berlaku untuk semua peramban file yang memungkinkan Anda beberapa bentuk hotkey khusus yang dapat Anda asosiasikan gvim --remote %f. Di mcI memilikinya di menu pengguna, jadi F2 + e dan file yang disorot / dipilih dikirim ke instance gvim.

Ini menjadi sedikit lebih baik: Jika Anda membuka instance gvim kedua , katakanlah, pada monitor # 2 dari desktop yang sama, atau desktop yang terpisah, dan mungkin skema warna yang berbeda di dalamnya, dan kali ini berikan secara eksplisit --servername foo, Anda dapat mengirim file ke instance itu dengan:

 gvim --servername foo --remote [file path]

Sesuatu yang mungkin berguna atau tidak berguna tergantung pada ruang lingkup apa yang Anda lakukan, dll.

goldilocks
sumber
Itu adalah use case yang saya tidak bayangkan tetapi memang jika Anda tidak suka menavigasi file Anda dari Vim yang bisa menjadi solusi yang baik.
statox
Yah, saya tidak akan menganggapnya sebagai "penyelesaian" karena hal lain yang saya lakukan, minimal, dengan browser file pada saat yang sama adalah melirik file di lokasi yang sama (untuk teks via less, yang instan dan satu kunci untuk keluar) dan mungkin mengirimnya ke aplikasi selain vim yang juga memiliki mode jarak jauh seperti ini (banyak hal dilakukan sekarang, termasuk "editor" lain yang kadang-kadang saya gunakan untuk membiarkan tab header yang ditumpuk untuk dilihat, dan juga browser web) . Dengan kata lain, saya akan mengatakan menavigasi fs dengan vim sepertinya bekerja untuk tidak menggunakan mcdan --remote
,;
1
Ya itu alur kerja dalam dirinya sendiri dan bukan solusi, ungkapan saya tidak ideal tapi saya mengerti ide jawaban Anda ;-)
statox
1
Ketika bekerja dengan Visual Studio, saya melakukan sebagian besar pengeditan saya di Vim. Saya menggunakan fitur ini untuk membuka file saat ini (dengan kursor di lokasi yang sama) dengan penekanan tombol. Lihat Vim sebagai bagian alat eksternal pada halaman Integrasikan gvim dengan Visual Studio Vim Tips untuk mengaturnya.
Kaya
5

Pengembangan tertanam. Banyak kali dalam pengembangan tertanam Anda memiliki soket IP, tetapi ruang hard drive lokal terbatas, atau tidak ada memori yang tidak mudah menguap, atau sejumlah hal lainnya. Anda dapat memulai server pada papan yang disematkan, dan kemudian memasangnya di komputer pengembangan Anda dan mengatur semua konfigurasi dan tag Anda secara lokal.

Sam
sumber
1

Saya menulis tesis master saya menggunakan Vim, LaTeX dan BibTeX. Untuk mengelola referensi BibTeX saya, saya menggunakan program yang disebut JabRef . JabRef memiliki fitur kecil yang rapi di mana Anda dapat menghubungkannya ke instance server Vim, dan kemudian Anda dapat "mendorong" referensi BibTeX dari JabRef ke dokumen LaTeX yang sedang Anda edit di Vim.

phantom-99w
sumber
1

Alur kerja saya mirip dengan apa yang dikatakan goldilocks dalam jawabannya. Saya menggunakan :terminalfitur vim8 dalam kombinasi dengan --remoteopsi. Saya mempertahankan 2 tata letak jendela di vim. Kode di jendela kiri dan terminal di sebelah kanan. Saya menggunakan jendela kanan (terminal) untuk menjalankan kompilasi, menavigasi sistem file dan membuka file dalam instance vim saat ini (dari terminal). Aliran ini memungkinkan saya untuk beroperasi dengan keterlibatan mouse yang sangat sedikit.

Saya menggunakan gvim dan icewm (manajer jendela mana pun harus melakukannya)

Mulai turunan gvim

gvim somefile

Di dalam gvim, buka terminal secara vertikal

:botright vertical terminal
(or) short form
:bo vert term 
"botright" splits the window to right

Di jendela terminal terbelah

gvim --remote-send '<C-w><C-w>' --remote anotherfile

"--remote-send" will send Ctrl-W Ctrl-W to remote gvim instance(in our case, current instance) 
to put the cursor in the left window. Otherwise, the terminal split would be replaced by
'anotherfile' buffer.
"--remote" will open 'anotherfile' in left window.

Anda dapat membuat alias untuk perintah panjang ini di .zshrc / .bashrc Anda dan mempersingkatnya sesuai keinginan Anda.

Dengan alur kerja ini, saya jarang keluar dari instance gvim saya dan jarang menggunakan mouse.

SantoshSrinivas
sumber