Quais são os usos práticos do modo cliente-servidor?


23

Eu sei que o Vim permite um modo de servidor cliente ( :h clientserver): é possível transformá-lo em um servidor que receberá alguns comandos e os executará e como um cliente que enviará os comandos para o servidor.

Entendo como funciona, mas não consigo imaginar um uso prático desse recurso: em quais casos é útil e qual fluxo de trabalho pode ser criado usando esse recurso?

Portanto, minha pergunta é simples: qual é o uso do modo de servidor cliente do Vim?

(Lembro novamente que minha pergunta não é sobre como fazê-lo funcionar ou como funciona, mas por que usá-lo.)



2
Estou inclinado a fechar isso como muito amplo.
26716 muru

3
Eu entenderia o fechamento como muito amplo. O SE talvez não seja a plataforma mais adaptada a essa pergunta, mas sinto que estou perdendo algo sobre esse recurso, então pensei que outros poderiam se beneficiar dessas respostas.
Statox

Respostas:


21
  • Antes do recurso recente de canal / tarefa do Vim 7.4, o recurso cliente-servidor era a única maneira de fazer uma compilação em segundo plano decente - sem nenhuma dependência do Python. Começamos a compilação como um trabalho em segundo plano e, quando termina, ele notifica de volta ao vim, graças ao canal cliente-servidor, que terminou.

  • Também é usado indiretamente por "plugins" como o pyclewn para integrar um depurador ao vim. Na verdade, o pyclewn usa o recurso + netbeans (criado sobre o + clientserver). Outros projetos notáveis ​​usam essa interface do netbeans para integrar o vim a um IDE - consulte :h netbeans-intro.

  • Também é usado por alguns plugins de teste, como o vimrunner, para executar testes no Vim a partir da linha de comando. Eu o uso para testar meus plugins no travis.

  • Também me lembro de sincronizar meus cliques na interface xdvi com o código fonte do LaTeX, graças ao + clientserver.


1
Portanto, é útil não ser usado diretamente pelo usuário, mas por aplicativos de terceiros. Obrigado pela sua resposta que é bastante interessante.
Statox

4
@statox Sim. Esses são os principais casos de uso que vejo: integração simples com ferramentas externas. Simples porque podemos alimentar comandos e funções do vim através da linha de comando.
Luc Hermitte

1
Eclim é outro exemplo disso.
goldilocks

13

Meu uso disso é um pouco mais simplista (e talvez comum) do que o de Luc Hermitte.

Se você iniciar uma instância do gvim com esta compilada (e já existe há muito tempo, por exemplo, nas principais distribuições linux como Fedora e Debian), ela inicia no modo servidor. Eu enfatizei "gvim" porque o que estou prestes a descrever não parece se aplicar a uma viminstância singular em um terminal da GUI (embora eu suponha que poderia ser se você usar o paramater apropriadamente).

De qualquer forma, você pode abrir qualquer arquivo de qualquer lugar nessa instância do gvim com gvim --remote [file path](sem nenhum --servernameespecificado). Sou fã disso porque não navego muito diretamente no sistema de arquivos com o vim; em vez disso, uso um navegador de arquivos ortodoxo (comandante da meia-noite) - ou melhor, pilhas delas abertas em locais diferentes, pois mcsão leves e permitem que várias capas de esquema de cores simplifiquem a diferenciação entre elas (então, eu tenho duas ou três abertas separadamente) guias em pelo menos um terminal da GUI). No entanto, acho que o mesmo princípio se aplicará a qualquer navegador de arquivos que permita alguma forma de tecla de atalho personalizada à qual você possa associar gvim --remote %f. Como mceu o tenho no menu do usuário, o F2 + e o arquivo selecionado / realçado são enviados para a instância gvim.

Isso fica um pouco melhor: se você abrir uma segunda instância do gvim, digamos, no monitor nº 2 da mesma área de trabalho ou em uma área de trabalho separada, e talvez um esquema de cores diferente nessa, e desta vez explicitamente --servername foo, você poderá enviar arquivos para essa instância em vez de:

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

Algo que pode ou não ser útil, dependendo do escopo do que você está fazendo, etc.


Esse é um caso de uso que eu não tinha previsto, mas, de fato, se você não gosta de navegar pelos arquivos do Vim, isso pode ser uma boa solução.
Statox

Bem, eu não consideraria uma "solução alternativa", já que a outra coisa que estou fazendo, minimamente, com o navegador de arquivos ao mesmo tempo é olhar para arquivos nos mesmos locais (para texto via less, que é instantâneo e um chave para sair) e possivelmente enviá-los para aplicativos que não sejam o vim que também possuem um modo remoto como este (muitas coisas acontecem agora, incluindo outros "editores" que eu às vezes uso para deixar guias empilhadas de cabeçalhos para visualização e também navegadores da web) . Dito de outra forma, eu diria que navegar os fs com o vim parece ser uma solução para não usar mce --remote,;)
Goldilocks

1
Yup que é um fluxo de trabalho em si e não uma solução alternativa, meu fraseado não foi ideal, mas eu entendi a idéia de sua resposta ;-)
statox

1
Ao trabalhar com o Visual Studio, faço a maior parte da minha edição no Vim. Eu uso esse recurso para abrir o arquivo atual (com o cursor no mesmo local) pressionando uma tecla. Consulte o Vim como uma seção de ferramenta externa na página Integrar o gvim ao Visual Studio Vim Tips para saber como configurar isso.
9509 Rich

5

Desenvolvimento incorporado. Muitas vezes, no desenvolvimento incorporado, você tem um soquete IP, mas espaço limitado no disco rígido local, ou nenhuma memória não volátil, ou várias outras coisas. Você pode iniciar um servidor na placa incorporada e, em seguida, utilizá-lo no seu computador de desenvolvimento e ter todas as suas configurações e tags definidas localmente.


1

Escrevi minha tese de mestrado usando Vim, LaTeX e BibTeX. Para gerenciar minhas referências BibTeX, usei um programa chamado JabRef . O JabRef possui um pequeno recurso interessante, onde você pode conectá-lo a uma instância do servidor Vim e, em seguida, pode "enviar" a referência BibTeX do JabRef ao documento LaTeX que você está editando no Vim.


1

Meu fluxo de trabalho é semelhante ao que os goldilocks disseram em sua resposta. Eu uso o :terminalrecurso do vim8 em combinação com a --remoteopção. Eu mantenho o layout de 2 janelas no vim. Código na janela esquerda e terminal à direita. Eu uso a janela direita (terminal) para executar compilações, navegar no sistema de arquivos e abrir arquivos na instância atual do vim (a partir do terminal). Esse fluxo me permite operar com muito menos envolvimento do mouse.

Eu uso gvim e icewm (qualquer gerenciador de janelas deve fazer)

Iniciar uma instância gvim

gvim somefile

Dentro do gvim, terminal aberto na divisão vertical

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

Na janela do terminal, divida

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.

Você pode criar aliases para esses comandos longos no seu .zshrc / .bashrc e encurtá-los ao seu gosto.

Com esse fluxo de trabalho, raramente saio da minha instância do gvim e raramente uso o mouse.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.