Sử dụng thực tế của chế độ máy khách-máy chủ là gì?


23

Tôi biết rằng Vim cho phép chế độ máy chủ của máy khách ( :h clientserver): có thể biến nó thành một máy chủ sẽ nhận được một số lệnh và thực thi chúng và như một máy khách sẽ gửi lệnh đến máy chủ.

Tôi hiểu cách thức hoạt động của nó, nhưng tôi không thể tưởng tượng được cách sử dụng thực tế của tính năng này: trong trường hợp nào nó hữu ích và quy trình công việc nào có thể được tạo bằng tính năng này?

Vì vậy, câu hỏi của tôi rất đơn giản: việc sử dụng chế độ máy chủ của Vim là gì?

(Tôi chỉ ra một lần nữa rằng câu hỏi của tôi không phải là về cách làm cho nó hoạt động hay cách nó hoạt động mà là tại sao sử dụng nó.)



2
Tôi có xu hướng đóng cái này quá rộng.
muru

3
Tôi sẽ hiểu đóng cửa là quá rộng. SE có thể không phải là nền tảng thích nghi nhất với câu hỏi này nhưng tôi cảm thấy như mình đang thiếu một cái gì đó về tính năng này vì vậy tôi nghĩ rằng những câu trả lời khác có thể có lợi cho những câu trả lời này.
statox

Câu trả lời:


21
  • Trước tính năng gần đây của kênh / công việc của Vim 7.4, tính năng máy khách-máy chủ là cách duy nhất để thực hiện một trình biên dịch nền tốt - mà không phụ thuộc vào Python. Chúng tôi bắt đầu biên dịch như một công việc nền và khi nó kết thúc, nó sẽ thông báo trở lại vim, nhờ vào kênh máy khách-máy chủ, nó đã hoàn thành.

  • Nó cũng được gián tiếp sử dụng bởi các "plugin" như pyclwn để tích hợp trình gỡ lỗi vào vim. Trên thực tế, pyclwn sử dụng tính năng + netbeans (được xây dựng trên đầu máy khách +). Các dự án đáng chú ý khác sử dụng giao diện netbeans này để tích hợp vim với IDE - xem :h netbeans-intro.

  • Nó cũng được sử dụng bởi một số plugin thử nghiệm như vimrunner để chạy thử nghiệm trong Vim từ dòng lệnh. Tôi sử dụng nó để kiểm tra các plugin của mình trên travis.

  • Tôi cũng nhớ đồng bộ hóa các nhấp chuột của mình trong giao diện xdvi với mã nguồn LaTeX của mình nhờ + máy khách.


1
Vì vậy, nó rất hữu ích không được sử dụng trực tiếp bởi người dùng mà bởi ứng dụng của bên thứ ba. Cảm ơn câu trả lời của bạn là khá thú vị.
statox

4
@statox Vâng. Đó là trường hợp sử dụng chính mà tôi thấy: tích hợp đơn giản với các công cụ bên ngoài. Đơn giản vì chúng ta có thể cung cấp các lệnh và hàm vim thông qua dòng lệnh.
Luc Hermitte

1
Eclim là một ví dụ khác về điều này.
goldilocks

13

Việc sử dụng này của tôi đơn giản hơn một chút (và có lẽ là phổ biến) so với Luc Hermitte.

Nếu bạn bắt đầu một phiên bản của gvim với cái này được biên dịch (và nó đã tồn tại trong một thời gian dài, ví dụ, các bản phân phối linux lớn như Fedora và Debian), nó sẽ khởi động ở chế độ máy chủ. Tôi nhấn mạnh "gvim" bởi vì những gì tôi sắp mô tả dường như không áp dụng cho một vimtrường hợp số ít trong một thiết bị đầu cuối GUI (mặc dù tôi cho rằng nó có thể là nếu bạn sử dụng thông số phù hợp).

Dù sao, sau đó bạn có thể mở bất kỳ tệp nào từ bất kỳ nơi nào trong trường hợp gvim đó với gvim --remote [file path](không có --servernamechỉ định). Tôi là một fan hâm mộ của điều này bởi vì tôi không điều hướng hệ thống tập tin trực tiếp nhiều với vim; thay vào đó tôi sử dụng trình duyệt tệp chính thống (chỉ huy nửa đêm) - hay nói đúng hơn là các cọc trong số chúng mở ra các vị trí khác nhau vì mcnó rất nhẹ và cho phép các giao diện phối màu khác nhau để đơn giản hóa sự khác biệt giữa chúng (vì vậy tôi có xu hướng mở hai hoặc ba cái riêng biệt các tab trong ít nhất một thiết bị đầu cuối GUI). Tuy nhiên, tôi nghĩ rằng nguyên tắc tương tự sẽ được áp dụng cho bất kỳ trình duyệt tệp nào cho phép bạn một số dạng phím nóng tùy chỉnh mà bạn có thể liên kết gvim --remote %f. Trong mctôi có nó trong menu người dùng, vì vậy F2 + e và tệp được tô sáng / đã chọn được gửi đến phiên bản gvim.

Điều này sẽ tốt hơn một chút: Nếu bạn mở một ví dụ gvim thứ hai , giả sử, trên màn hình số 2 của cùng một máy tính để bàn hoặc một máy tính để bàn riêng biệt và có lẽ là một bảng màu khác trong đó, và lần này hãy cho nó rõ ràng --servername foo, bạn có thể gửi thay vào đó là các tệp:

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

Một cái gì đó có thể có hoặc không có ích tùy thuộc vào phạm vi của những gì bạn đang làm, v.v.


Đó là trường hợp sử dụng tôi đã không dự tính nhưng thực sự nếu bạn không muốn điều hướng qua các tệp của mình từ Vim thì đó có thể là một cách giải quyết tốt.
statox

Chà, tôi sẽ không coi đó là một "công việc xung quanh" vì điều khác tôi đang làm, tối thiểu, với trình duyệt tệp cùng lúc đang liếc nhìn các tệp ở cùng một vị trí (đối với văn bản thông qua less, tức thời và một phím để thoát) và có thể gửi chúng đến các ứng dụng khác ngoài vim cũng có chế độ từ xa như thế này (nhiều việc hiện nay, bao gồm cả các "trình soạn thảo" khác mà đôi khi tôi sử dụng để bỏ các tab tiêu đề xếp chồng lên để xem và cả trình duyệt web) . Nói cách khác, tôi muốn nói điều hướng các fs bằng vim có vẻ như là một công việc xung quanh vì không sử dụng mc--remote;)
goldilocks

1
Yup đó là một quy trình công việc trong chính nó và không phải là một cách giải quyết, phrasing của tôi không lý tưởng nhưng tôi hiểu ý tưởng của câu trả lời của bạn ;-)
statox

1
Khi làm việc với Visual Studio, tôi thực hiện hầu hết các chỉnh sửa của mình trong Vim. Tôi sử dụng tính năng này để mở tệp hiện tại (với con trỏ ở cùng vị trí) tại một tổ hợp phím. Xem Vim dưới dạng phần công cụ bên ngoài trên trang Tích hợp gvim với Visual Studio Vim Tips để biết cách thiết lập phần này.
Giàu

5

Phát triển nhúng. Rất nhiều lần trong phát triển nhúng, bạn có ổ cắm IP, nhưng không gian ổ cứng cục bộ bị giới hạn hoặc không có bộ nhớ không bay hơi hoặc bất kỳ số lượng nào khác. Bạn có thể khởi động một máy chủ trên bảng nhúng, sau đó ứng dụng khách vào máy tính phát triển của bạn và thiết lập tất cả các cấu hình và thẻ của bạn cục bộ.


1

Tôi đã viết luận văn thạc sĩ bằng Vim, LaTeX và BibTeX. Để quản lý tài liệu tham khảo BibTeX của mình, tôi đã sử dụng một chương trình có tên là JabRef . JabRef có một tính năng nhỏ gọn, trong đó bạn có thể kết nối nó với phiên bản máy chủ Vim và sau đó bạn có thể "đẩy" tham chiếu BibTeX từ JabRef sang tài liệu LaTeX mà bạn đang chỉnh sửa trong Vim.


1

Quy trình làm việc của tôi tương tự như những gì goldilocks đã nói trong câu trả lời của anh ấy. Tôi sử dụng :terminaltính năng của vim8 kết hợp với --remotetùy chọn. Tôi duy trì bố trí 2 cửa sổ trong vim. Mã trong cửa sổ bên trái và thiết bị đầu cuối bên phải. Tôi sử dụng cửa sổ bên phải (thiết bị đầu cuối) để chạy các phần tổng hợp, điều hướng hệ thống tệp và mở tệp trong trường hợp vim hiện tại (từ thiết bị đầu cuối). Luồng này cho phép tôi hoạt động với sự tham gia của chuột rất ít.

Tôi sử dụng gvim và icewm (bất kỳ trình quản lý cửa sổ nào cũng nên làm)

Bắt đầu một ví dụ gvim

gvim somefile

Bên trong gvim, thiết bị đầu cuối mở theo chiều dọc

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

Trong cửa sổ thiết bị đầu cuối tách

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.

Bạn có thể tạo bí danh cho các lệnh dài này trong .zshrc / .bashrc và rút ngắn chúng theo ý thích của bạn.

Với quy trình công việc này, tôi hiếm khi di chuyển ra khỏi ví dụ gvim của mình và hiếm khi sử dụng chuột.

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.