Nói chuyện với vim từ bên ngoài


12

Tôi có thể thay đổi một biến trong một ví dụ của vim từ một shell khác (không gửi khóa qua tmux) không?

Tôi yêu cầu bởi vì tôi muốn sử dụng các tùy chọn compiling_cmd, thành công_cmd và fail_cmd của latexmk để hiển thị trạng thái biên dịch trên dòng trạng thái.

Có lẽ tôi có thể có vim tìm kiếm sự tồn tại hoặc không tồn tại của một số tệp nhất định (sử dụng tệp làm biến boolean)? Nhưng điều này có vẻ hơi bẩn; hy vọng có một cách tốt hơn.

Câu trả lời:


19

Nếu bạn khởi chạy phiên Vim đầu tiên của mình với đối số --servername VIM:

$ vim --servername VIM

sau đó bạn có thể gửi bất kỳ lệnh nào từ bất kỳ shell nào khác với đối số --remote-send.

Ví dụ: nếu bạn sử dụng dòng trạng thái của mình để hiển thị giá trị của một số biến g:myvarvà bạn có các dòng sau trong vimrc:

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

Sau đó, bạn có thể thay đổi giá trị của nó ( :let g:myvar = "bar") từ shell khác:

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

Các trạng thái nên phản ánh sự thay đổi của giá trị.


Như bình luận cuối cùng của bạn nói rằng, nếu phiên bản Vim của bạn không ở chế độ bình thường, lệnh trước đó sẽ không hoạt động như mong đợi. Có thể đơn giản hơn, nhưng đây là 2 giải pháp khả thi:

1) thêm khóa <esc>ở chế độ bình thường
2) sử dụng đối số --remote-exprthay vì --remote-sendđánh giá một biểu thức và viết một hàm trợ giúp nhỏ có mã sẽ gán giá trị mới cho biến của bạn

Giải pháp đầu tiên:

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

Giải pháp thứ hai:

Xác định hàm sau trong vimrc của bạn:

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

Sau đó, trong vỏ của bạn:

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

Cảm ơn bạn! Tôi thấy không có tính năng này được biên dịch, vì vậy tôi sẽ biên dịch lại. Hy vọng nó giống nhau ở neovim.
Kem đánh răng

3
@Lawrence Tôi có thể sai, nhưng tôi nghĩ neovim không triển khai +clientservertính năng này ( github.com/tpope/vim-dispatch/issues/163#issuecomment-175383047 ). Nếu đó là trường hợp, có lẽ plugin này sẽ giúp bạn: github.com/mhinz/neovim-remote
user9433424

Có vẻ như điều này có tác dụng tương tự như gửi các khóa với tmux và phụ thuộc vào việc biết máy chủ vim đang ở chế độ nào (ví dụ giả định chế độ bình thường). Lý tưởng nhất, tôi muốn có thể đặt một biến trực tiếp.
Kem đánh răng
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.