클라이언트-서버 모드의 실제 용도는 무엇입니까?


23

Vim은 클라이언트 서버 모드 ( :h clientserver)를 허용한다는 것을 알고 있습니다 : 서버로 전환하여 일부 명령을 가져 와서 실행할 수 있으며 클라이언트로 명령을 서버에 보낼 수 있습니다.

어떻게 작동하는지 알지만이 기능을 실제로 사용한다고 상상할 수 없습니다. 어떤 경우에 유용하며이 기능을 사용하여 어떤 워크 플로를 만들 수 있습니까?

그래서 내 질문은 간단합니다. Vim의 클라이언트 서버 모드 사용은 무엇입니까?

(제 질문은 작동 방식이나 작동 방식이 아니라 왜 사용하는지에 대한 질문입니다.)



2
나는 이것을 너무 광범위하게 닫을 경향이 있습니다.
muru

3
나는 종결이 너무 광범위하다는 것을 이해할 것입니다. SE는 아마도이 질문에 가장 적합한 플랫폼은 아니지만이 기능에 대해 뭔가 빠진 것처럼 느껴지므로 다른 사람들 이이 답변의 이점을 얻을 수 있다고 생각했습니다.
statox

답변:


21
  • Vim 7.4의 최신 채널 / 작업 기능 이전에는 클라이언트 서버 기능이 Python에 의존하지 않고 적절한 백그라운드 컴파일을 수행 할 수있는 유일한 방법이었습니다. 백그라운드 작업으로 컴파일을 시작하고 완료되면 클라이언트-서버 채널 덕분에 vim에 다시 알림을 보냅니다.

  • 또한 pyclewn과 같은 "플러그인"에서 간접적으로 사용되어 디버거를 vim에 통합합니다. 실제로 pyclewn은 + netbeans 기능 (+ clientserver 위에 구축)을 사용합니다. 다른 주목할만한 프로젝트는이 netbeans 인터페이스를 사용하여 vim을 IDE와 통합합니다 (참조) :h netbeans-intro.

  • vimrunner와 같은 일부 테스트 플러그인은 명령 줄에서 Vim에서 테스트를 실행하는데도 사용됩니다. 트래비스에서 플러그인을 테스트하는 데 사용합니다.

  • 또한 + clientserver 덕분에 xdvi 인터페이스의 클릭을 LaTeX 소스 코드와 동기화하는 것을 기억합니다.


1
따라서 사용자가 직접 사용하지 않고 타사 응용 프로그램에서 사용하는 것이 유용합니다. 꽤 흥미로운 답변에 감사드립니다.
statox

4
@statox 예. 이것이 내가 보는 주요 사용 사례입니다. 외부 도구와의 간단한 통합. 명령 줄을 통해 vim 명령과 함수를 제공 할 수 있기 때문에 간단합니다.
Luc Hermitte 13:26에

1
Eclim이 이것의 또 다른 예입니다.
goldilocks

13

이것을 사용하는 것은 Luc Hermitte의 것보다 조금 더 단순하고 아마도 평범한 것입니다.

컴파일 된 상태에서 gvim 의 인스턴스를 시작하면 (그리고 페도라 나 데비안과 같은 주요 리눅스 배포판에서 오랜 시간 동안) 서버 모드에서 시작합니다. 설명하려고하는 vim것이 GUI 터미널 의 단일 인스턴스에 적용되지 않는 것 같아서 "gvim"을 강조했습니다 (매개 변수를 적절하게 사용하면 가능할 것으로 생각되지만).

어쨌든, gvim 인스턴스의 어느 곳에서나 gvim --remote [file path]( --servername지정 되지 않은 ) 파일을 열 수 있습니다 . vim을 사용하여 파일 시스템을 직접 탐색하지 않기 때문에 나는 이것을 좋아합니다. 대신 정통 파일 브라우저 (자정 사령관)를 사용합니다. 또는 mc경량 이기 때문에 더미를 다른 위치에 열어 놓고 다양한 색 구성표 스킨을 사용하여 구별을 단순화 할 수 있습니다 (따라서 2 ~ 3 개가 별도 열려있는 경향이 있습니다) 하나 이상의 GUI 터미널에있는 탭). 그러나 동일한 원칙이 모든 파일 브라우저에 적용되어 연결할 수있는 맞춤형 핫키 형식을 허용한다고 생각합니다 gvim --remote %f. 에서 mc나는 사용자 메뉴에서 그것을 가지고, 그래서 F2 + 전자 및 하이라이트 / 선택한 파일이 gvim을 인스턴스로 전송됩니다.

예를 들어, 동일한 데스크탑의 모니터 # 2 또는 별도의 데스크탑 및 아마도 다른 색 구성표에서 두 번째 gvim 인스턴스 를 열면 이번에는 명시 적으로 --servername foo보낼 수 있습니다. 대신 해당 인스턴스에 파일을 추가하십시오.

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

하고있는 일의 범위 등에 따라 유용 할 수도 있고 그렇지 않을 수도있는 것


그것은 내가 상상하지 못했지만 실제로 Vim에서 파일을 탐색하고 싶지 않은 경우 좋은 해결 방법이 될 수있는 유스 케이스입니다.
statox

글쎄, 난 내가 통해 텍스트 (동일한 위치에있는 파일에서이기는되는 동시에 파일 브라우저, 최소한,하고있어 그것을 다른 것은 이후 "주변의 일을"고려하지 않을 less순간과 하나입니다, vim 이외의 응용 프로그램에 원격 모드가있는 응용 프로그램으로 전송 가능) . 달리 말하면, vim으로 fs를 탐색하는 것은 mcand --remote
,;

1
그렇습니다. 워크 플로 자체이며 해결 방법은 아닙니다. 내 문구는 이상적이지 않지만 귀하의 답변을 이해했습니다. ;-)
statox

1
Visual Studio로 작업 할 때 Vim에서 대부분의 편집 작업을 수행합니다. 이 기능을 사용하여 키 스트로크에서 현재 파일 (커서가 같은 위치에 있음)을 엽니 다. 참고 항목 외부 도구로 빔을 온 섹션 비주얼 스튜디오와 통합 gvim을 설정 방법에 대한 빔 도움말 페이지.
Rich

5

임베디드 개발. 임베디드 개발에는 IP 소켓이 있지만 로컬 하드 드라이브 공간이 제한적이거나 비 휘발성 메모리가 없거나 기타 여러 가지가 있습니다. 임베디드 보드에서 서버를 시작한 다음 개발 컴퓨터에서 서버로 클라이언트를 시작하고 모든 구성 및 태그를 로컬로 설정할 수 있습니다.


1

Vim, LaTeX 및 BibTeX를 사용하여 석사 논문을 작성했습니다. BibTeX 참조를 관리하기 위해 JabRef 라는 프로그램을 사용했습니다 . JabRef는 Vim 서버 인스턴스에 연결할 수있는 아주 작은 기능을 가지고 있으며, BibTeX 참조를 JabRef에서 Vim에서 편집중인 LaTeX 문서로 "푸시"할 수 있습니다.


1

내 워크 플로는 goldilocks의 답변 과 비슷합니다 . vim8의 :terminal기능을 --remote옵션 과 함께 사용 합니다. vim에서 2 개의 창 레이아웃을 유지합니다. 왼쪽 창에 코드가 있고 오른쪽에 터미널이 있습니다. 오른쪽 창 (터미널)을 사용하여 컴파일을 실행하고 파일 시스템을 탐색하며 현재 vim 인스턴스에서 파일을 엽니 다 (터미널에서). 이 흐름을 통해 적은 마우스 조작으로 작업 할 수 있습니다.

나는 gvim과 icewm을 사용합니다 (모든 창 관리자는해야합니다)

gvim 인스턴스 시작

gvim somefile

gvim 내부, 수직 분할에서 열린 터미널

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

터미널 창에서 분할

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.

.zshrc / .bashrc에서 이러한 긴 명령에 대한 별명을 작성하고 원하는대로 단축 할 수 있습니다.

이 워크 플로에서는 거의 gvim 인스턴스를 벗어나 마우스를 거의 사용하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.