Jakie są praktyczne zastosowania trybu klient-serwer?

23

Wiem, że Vim zezwala na tryb serwera klienta ( :h clientserver): można go przekształcić w serwer, który otrzyma niektóre polecenia i je wykona oraz jako klient, który wyśle ​​polecenia do serwera.

Rozumiem, jak to działa, ale nie wyobrażam sobie praktycznego zastosowania tej funkcji: w jakich przypadkach jest ona użyteczna i jaki przepływ pracy można utworzyć za pomocą tej funkcji?

Więc moje pytanie jest proste: Jaki jest pożytek z trybu serwera klienta Vima?

(Ponownie podkreślam, że moje pytanie nie dotyczy tego, jak to zrobić, ani jak działa, ale po co z tego korzystać).

statox
źródło
2
Jestem skłonny zamknąć to jako zbyt szerokie.
muru
3
Zrozumiałbym zakończenie jako zbyt szerokie. SE może nie jest najlepiej dostosowaną platformą do tego pytania, ale wydaje mi się, że coś mi brakuje w tej funkcji, więc pomyślałem, że inni mogą skorzystać z tych odpowiedzi.
statox

Odpowiedzi:

21
  • Przed najnowszą funkcją kanału / zadania w Vim 7.4, funkcja klient-serwer była jedynym sposobem na porządną kompilację w tle - bez żadnej zależności od Pythona. Kompilację rozpoczynamy jako zadanie w tle, a kiedy się zakończy, powiadamia vim, dzięki kanałowi klient-serwer, że zakończyła się.

  • Jest również pośrednio wykorzystywany przez „wtyczki”, takie jak pyclewn, do integracji debuggera z vimem. W rzeczywistości pyclewn korzysta z funkcji + netbeans (która jest zbudowana na serwerze + clientserver). Inne znaczące projekty używają tego interfejsu netbeans do integracji vima z IDE - patrz :h netbeans-intro.

  • Jest również używany przez niektóre wtyczki testowe, takie jak vimrunner, do uruchamiania testów w Vimie z wiersza poleceń. Używam go do testowania moich wtyczek na Travis.

  • Pamiętam też synchronizację moich kliknięć w interfejsie xdvi z kodem źródłowym LaTeX dzięki + clientserver.

Luc Hermitte
źródło
1
Przydatne jest więc, aby użytkownik nie korzystał z niego bezpośrednio, ale z aplikacji innej firmy. Dzięki za odpowiedź, która jest dość interesująca.
statox
4
@statox Tak. Oto główne przypadki użycia, które widzę: prosta integracja z narzędziami zewnętrznymi. Proste, ponieważ możemy karmić polecenia i funkcje vima za pomocą wiersza poleceń.
Luc Hermitte
1
Eclim jest kolejnym tego przykładem.
złotowłosa
13

Moje użycie tego jest nieco bardziej uproszczone (i być może powszechne) niż Luca Hermitte'a.

Jeśli uruchamiasz instancję gvim przy pomocy tej skompilowanej w (i jest, i była już od dłuższego czasu, np. Na głównych dystrybucjach Linuksa, takich jak Fedora i Debian), uruchamia się w trybie serwera. Podkreśliłem „gvim”, ponieważ to, co zamierzam opisać, nie odnosi się do pojedynczej viminstancji w terminalu GUI (chociaż przypuszczam, że może tak być, jeśli użyjesz odpowiednio parametru).

W każdym razie możesz następnie otworzyć dowolny plik z dowolnego miejsca w tej instancji gvim za pomocą gvim --remote [file path](bez --servernameokreślonego). Jestem tego fanem, ponieważ nie korzystam bezpośrednio z systemu plików za pomocą vima; zamiast tego używam ortodoksyjnej przeglądarki plików (dowódca północy) - a raczej ich stosy otwarte w różnych lokalizacjach, ponieważ mcsą lekkie i pozwalają na różne skórki schematów kolorów, aby uprościć rozróżnianie między nimi (więc zwykle mam dwie lub trzy otwarte osobno tabulatory w co najmniej jednym terminalu GUI). Myślę jednak, że ta sama zasada będzie obowiązywać w każdej przeglądarce plików, która pozwala na jakąś formę niestandardowego skrótu, z którym można się skojarzyć gvim --remote %f. W mcMam go w menu użytkownika, więc F2 + e i podświetlony / wybrany plik są wysyłane do instancji gvim.

To staje się trochę lepsze: jeśli otworzysz drugą instancję gvim, powiedzmy, na monitorze nr 2 tego samego pulpitu lub osobnym pulpicie i być może inny schemat kolorów w tym jednym, i tym razem nadaj mu wyraźny --servername foo, możesz wysłać pliki do tego wystąpienia zamiast:

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

Coś, co może się przydać lub nie, w zależności od zakresu wykonywanych czynności itp.

Złotowłosa
źródło
Jest to przypadek użycia, którego nie przewidziałem, ale jeśli nie lubisz poruszać się po plikach z Vima, może to być dobre obejście.
statox
Cóż, nie uważałbym tego za „obejście”, ponieważ drugą rzeczą, którą robię, minimalnie, z przeglądarką plików w tym samym czasie, jest przeglądanie plików w tych samych lokalizacjach (dla tekstu przez less, który jest natychmiastowy i jeden klawisz, aby wyjść) i być może wysyłanie ich do aplikacji innych niż vim, które również mają taki tryb zdalny (wiele rzeczy robi teraz, w tym inne „edytory”, których czasami używam do pozostawienia ustawionych zakładek nagłówków do przeglądania, a także przeglądarek internetowych) . Innymi słowy, powiedziałbym, że nawigacja po fimie z vimem wydaje się być rozwiązaniem dla nieużywania mci --remote;;)
goldilocks
1
Tak, to przepływ pracy sam w sobie, a nie obejście, moje sformułowanie nie było idealne, ale zrozumiałem pomysł na twoją odpowiedź ;-)
statox
1
Podczas pracy z Visual Studio większość edycji wykonuję w Vimie. Używam tej funkcji do otwierania bieżącego pliku (z kursorem w tej samej lokalizacji) po naciśnięciu klawisza. Zobacz sekcję Vim jako narzędzie zewnętrzne na stronie Integracja gvim z Visual Studio Vim Porady, aby dowiedzieć się, jak to skonfigurować.
Bogaty
5

Wbudowane oprogramowanie. Wiele razy we wbudowanym oprogramowaniu masz gniazdo IP, ale ograniczone miejsce na lokalnym dysku twardym lub brak pamięci nieulotnej lub dowolną liczbę innych rzeczy. Możesz uruchomić serwer na płycie wbudowanej, a następnie klienta na komputerze programistycznym i skonfigurować lokalnie wszystkie ustawienia i tagi.

Sam
źródło
1

Pracę magisterską napisałem przy użyciu Vima, LaTeXa i BibTeXa. Do zarządzania referencjami BibTeX korzystałem z programu o nazwie JabRef . JabRef ma fajną małą funkcję, w której można podłączyć go do instancji serwera Vim, a następnie „wypchnąć” referencję BibTeX z JabRef do dokumentu LaTeX, który edytujesz w Vimie.

phantom-99w
źródło
1

Mój obieg pracy jest podobny do tego, co powiedział goldilocks w swojej odpowiedzi. Używam :terminalfunkcji vim8 w połączeniu z --remoteopcją. Utrzymuję układ 2 okien w vimie. Kod w lewym oknie i terminal po prawej. Korzystam z prawego okna (terminala), aby uruchamiać kompilacje, nawigować w systemie plików i otwierać pliki w bieżącej instancji vima (z terminala). Ten przepływ pozwala mi operować przy bardzo mniejszym zaangażowaniu myszy.

Używam gvim i icewm (każdy menedżer okien powinien to zrobić)

Uruchom instancję gvim

gvim somefile

Wewnątrz gvim, otwórz terminal w układzie pionowym

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

W oknie terminala podzielone

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.

Możesz utworzyć aliasy dla tych długich poleceń w .zshrc / .bashrc i skrócić je do swoich upodobań.

W tym przepływie pracy rzadko wychodzę z instancji gvim i rzadko używam myszy.

SantoshSrinivas
źródło