vim में मैं क्या कर सकते हैं vim --servername fooऔर vim --servername foo --remote-silent bar.txtकई टर्मिनल खिड़कियां (tmux या जो कुछ भी के माध्यम से) से vim का एक उदाहरण में खुली फ़ाइलों के लिए। NeoVim में एक ही चीज कैसे प्राप्त की जाती है?
vim में मैं क्या कर सकते हैं vim --servername fooऔर vim --servername foo --remote-silent bar.txtकई टर्मिनल खिड़कियां (tmux या जो कुछ भी के माध्यम से) से vim का एक उदाहरण में खुली फ़ाइलों के लिए। NeoVim में एक ही चीज कैसे प्राप्त की जाती है?
जवाबों:
जहाँ तक मुझे पता है विम में यह सुविधा है क्योंकि GUI विम (gvim) ग्राफिकल X सर्वर का उपयोग करता है। मुझे पता है कि नॉन जीयूआई विम भी --servernameतर्क का उपयोग कर सकता है, लेकिन केवल जब X11 चल रहा है और इसे एक्सेस करके भी । दूसरी ओर, नवम के पास कोई ग्राफिकल समर्थन नहीं है; उस कारण से, मुझे नहीं लगता कि --servernameविकल्प काम कर सकता है (जब तक कि विकल्प पूरी तरह से किसी अन्य तरीके से फिर से लिखा नहीं गया होगा) क्योंकि मुझे उस उद्देश्य के लिए केवल X11 सर्वर तक पहुंचने वाले कंसोल प्रोग्राम को अजीब लगेगा।
नियोविम रिमोट नियोविम प्रक्रिया को नियंत्रित करने के लिए एक पायथन लिपि है। इसमें विम स्टाइल --servername और --remote विकल्प हैं। यह वही है जो मैं अब अपने कई-टर्मिनल कार्य वातावरण के लिए उपयोग करता हूं।
जैसा कि उल्लेख किया गया है, Neovim में सभी क्लाइंट सुविधाओं को हटा दिया गया था। ऐसा इसलिए है क्योंकि वे X11 साझा की गई मेमोरी का उपयोग करते हैं और Neovim ने X11 सपोर्ट को हटा दिया है।
हालांकि, अगर मैं :help --servernameNeovim में उपयोग करता हूं तो मैं serverstart()फ़ंक्शन के लिए प्रलेखन में समाप्त होता हूं :
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')"
यह एक सॉकेट बना देगा /tmp/; :echo v:servernameरास्ते के लिए देखें । यह एक अधिक नियतात्मक पते का उपयोग करने के लिए संभवतः अधिक उपयोगी है (उदाहरण के लिए serverstart('/tmp/nvim-remote'); हालांकि आप शायद इसे एक फ़ंक्शन में लपेटना चाहते हैं, क्योंकि यह विम के नंबर की तरह एक नंबर को जोड़ नहीं देगा --serverstartयदि यह पहले से मौजूद है)।
आप RPC API के साथ कमांड भेज सकते हैं। जहाँ तक मैं पा सकता हूँ, वहाँ सिर्फ Neovim (meh) के साथ आदेश भेजने का कोई तरीका नहीं है। आपको एपीआई क्लाइंट में से एक को स्थापित करना होगा । उदाहरण के लिए पायथन एपीआई क्लाइंट (जो कि नियोविम रिमोट का उपयोग भी करता है) के साथ:
import neovim
nvim = neovim.attach('socket', path='/tmp/nvim-remote')
try:
nvim.command(':e foo')
finally:
nvim.quit()
आप संभवतः echo ... >> /tmp/nvim-removeशेल बाइट के साथ एक ही बाइट भेज सकते हैं , लेकिन आरपीसी एपीआई कुछ गैर-तुच्छ गैर-पाठ प्रोटोकॉल ("मैसेजपैक आरपीसी") का उपयोग करता है और यह पता लगाता है कि कौन सा बाइट भेजने के लिए इस पोस्ट के लिए थोड़ा बहुत प्रयास किया गया था; -)
:help rpcNeovim के RPC API पर संपूर्ण विवरण देखें ।
एनबी के :help remote.txtसाथ-साथ कई अन्य सहायता आइटम (जैसे कि help server2client()और कई और) अभी भी नियोविम में मौजूद हैं, लेकिन इनमें से कोई भी काम नहीं करता है। ऐसा लग रहा है कि जिसने भी इस फीचर को हटाया है उसने बहुत ही फूहड़ काम किया है।
:terminal। इस जानकारी को देखते हुए यह आश्चर्यजनक रूप से आसान था।
:help x11-clientserverइसकी पुष्टि करने के लिए लगता है: "क्लाइंट और सर्वर के बीच संचार एक्स सर्वर के माध्यम से जाता है। [..] X11 डिस्प्ले (! Xterm-clipboard - सक्षम) तक पहुंच के साथ एक गैर जीयूआई Vim, कमांड सर्वर के रूप में भी कार्य कर सकता है यदि एक सर्वर नाम स्पष्ट रूप से दिया गया है ...