trong vim tôi có thể làm vim --servername foo
và vim --servername foo --remote-silent bar.txt
mở tệp trong một phiên bản của vim từ một số cửa sổ đầu cuối (thông qua tmux hoặc bất cứ điều gì). Làm thế nào là điều tương tự đạt được trong NeoVim?
trong vim tôi có thể làm vim --servername foo
và vim --servername foo --remote-silent bar.txt
mở tệp trong một phiên bản của vim từ một số cửa sổ đầu cuối (thông qua tmux hoặc bất cứ điều gì). Làm thế nào là điều tương tự đạt được trong NeoVim?
Câu trả lời:
Theo tôi biết vim có tính năng này vì GUI vim (gvim) sử dụng máy chủ đồ họa X. Tôi biết rằng không phải GUI Vim cũng có thể sử dụng --servername
đối số nhưng chỉ khi X11 đang chạy và cũng bằng cách truy cập vào nó . Mặt khác, neovim không có hỗ trợ đồ họa; vì lý do đó, tôi không nghĩ rằng --servername
tùy chọn này có thể hoạt động (trừ khi tùy chọn đó đã được viết lại hoàn toàn theo cách khác) vì tôi thấy lạ khi có một chương trình điều khiển truy cập máy chủ X11 chỉ cho mục đích đó.
Neovim remote là một kịch bản python để kiểm soát các quá trình neovim. Nó có các tùy chọn vim style --servername và --remote. Đây là những gì tôi sử dụng bây giờ cho môi trường làm việc nhiều thiết bị đầu cuối của tôi.
Như đã đề cập, tất cả các tính năng của máy khách đã bị xóa trong Neovim. Điều này là do họ sử dụng bộ nhớ chia sẻ X11 và Neovim đã loại bỏ hỗ trợ X11.
Tuy nhiên, nếu tôi sử dụng :help --servername
trong Neovim, tôi sẽ kết thúc tài liệu về serverstart()
chức năng:
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')"
Điều này sẽ làm cho một ổ cắm trong /tmp/
; xem :echo v:servername
cho đường dẫn Có thể hữu ích hơn khi sử dụng một địa chỉ xác định hơn (ví dụ: serverstart('/tmp/nvim-remote')
mặc dù bạn có thể muốn bọc hàm này trong một hàm, vì nó sẽ không nối một số như Vim --serverstart
nếu nó tồn tại).
Bạn có thể gửi lệnh với API RPC. Theo như tôi có thể tìm thấy, không có cách nào để gửi lệnh đến điều này chỉ với Neovim (meh). Bạn sẽ cần cài đặt một trong các ứng dụng khách API . Ví dụ với ứng dụng khách Python API tham chiếu (cũng là thứ mà Neovim từ xa sử dụng):
import neovim
nvim = neovim.attach('socket', path='/tmp/nvim-remote')
try:
nvim.command(':e foo')
finally:
nvim.quit()
Bạn có thể có thể gửi cùng một byte bằng echo ... >> /tmp/nvim-remove
lệnh shell, nhưng API RPC sử dụng giao thức phi văn bản có phần không tầm thường ("MessagePack RPC") và tìm ra byte nào để gửi chính xác là quá nhiều nỗ lực cho bài đăng này; -)
Xem :help rpc
để biết chi tiết đầy đủ về API RPC của Neovim.
NB :help remote.txt
cũng như nhiều mục trợ giúp khác (như help server2client()
và nhiều mục khác) vẫn tồn tại trong Neovim, nhưng không có mục nào hoạt động. Có vẻ như bất cứ ai loại bỏ tính năng này đã làm một công việc khá cẩu thả.
:terminal
. Với thông tin này, nó thật dễ dàng.
:help x11-clientserver
dường như xác nhận điều đó: "Giao tiếp giữa máy khách và máy chủ đi qua máy chủ X. [..] Một GUI Vim không có quyền truy cập vào màn hình X11 (| xterm-clipboard | đã bật), cũng có thể hoạt động như một máy chủ lệnh nếu một tên máy chủ được cung cấp rõ ràng "...