dalam vim saya dapat melakukan vim --servername foo
dan vim --servername foo --remote-silent bar.txt
membuka file dalam satu contoh vim dari beberapa terminal windows (via tmux atau apa pun). Bagaimana hal yang sama dicapai di NeoVim?
dalam vim saya dapat melakukan vim --servername foo
dan vim --servername foo --remote-silent bar.txt
membuka file dalam satu contoh vim dari beberapa terminal windows (via tmux atau apa pun). Bagaimana hal yang sama dicapai di NeoVim?
Jawaban:
Sejauh yang saya tahu vim memiliki fitur ini karena vim GUI (gvim) menggunakan server X grafis. Saya sadar bahwa non GUI Vim juga dapat menggunakan --servername
argumen tetapi hanya ketika X11 berjalan dan juga dengan mengaksesnya . Di sisi lain, neovim tidak memiliki dukungan grafis; untuk alasan itu, saya tidak berpikir bahwa --servername
opsi tersebut dapat bekerja (kecuali jika opsi tersebut telah sepenuhnya ditulis ulang dengan cara lain) karena saya akan merasa aneh memiliki program konsol yang mengakses server X11 hanya untuk tujuan itu.
Neovim remote adalah skrip python untuk mengendalikan proses neovim. Ini memiliki opsi vim style --servername dan --remote. Inilah yang saya gunakan sekarang untuk lingkungan kerja multi-terminal saya.
Seperti disebutkan, semua fitur server klien dihapus di Neovim. Ini karena mereka menggunakan memori bersama X11 dan Neovim menghapus dukungan X11.
Namun, jika saya gunakan :help --servername
di Neovim saya berakhir di dokumentasi untuk serverstart()
fungsi:
serverstart([{address}]) serverstart()
Opens a named pipe or TCP socket at {address} for clients to
connect to and returns {address}. If no address is given, it
is equivalent to:
:call serverstart(tempname())
$NVIM_LISTEN_ADDRESS is set to {address} if not already set.
--servername
The Vim command-line option --servername can be imitated:
nvim --cmd "let g:server_addr = serverstart('foo')"
Ini akan membuat soket di /tmp/
; lihat :echo v:servername
jalannya. Mungkin lebih bermanfaat untuk menggunakan alamat yang lebih deterministik (misalnya serverstart('/tmp/nvim-remote')
; meskipun Anda mungkin ingin membungkusnya dalam suatu fungsi, karena tidak akan menambahkan nomor seperti yang dilakukan Vim --serverstart
jika ini sudah ada).
Anda dapat mengirim perintah dengan RPC API. Sejauh yang saya dapat temukan tidak ada cara untuk mengirim perintah untuk ini hanya dengan Neovim (meh). Anda harus memasang salah satu klien API . Misalnya dengan referensi klien Python API (yang juga digunakan oleh Neovim):
import neovim
nvim = neovim.attach('socket', path='/tmp/nvim-remote')
try:
nvim.command(':e foo')
finally:
nvim.quit()
Anda mungkin dapat mengirim byte yang sama dengan echo ... >> /tmp/nvim-remove
perintah shell, tetapi RPC API menggunakan protokol non-teks yang agak non-sepele ("MessagePack RPC") dan mencari tahu byte mana yang akan dikirim adalah usaha yang terlalu banyak untuk posting ini; -)
Lihat :help rpc
detail lengkap tentang API RPC Neovim.
NB :help remote.txt
serta banyak item bantuan lainnya (seperti help server2client()
dan banyak lagi) masih ada di Neovim, tetapi tidak ada yang berhasil. Sepertinya siapa pun yang menghapus fitur ini melakukan pekerjaan yang sangat ceroboh.
:terminal
. Dengan informasi ini, sangat mudah.
:help x11-clientserver
sepertinya mengkonfirmasi: "Komunikasi antara klien dan server melewati server X. [..] Vim non GUI dengan akses ke tampilan X11 (| xterm-clipboard | diaktifkan), juga dapat bertindak sebagai server perintah jika nama server secara eksplisit diberikan "...