¿Cuáles son los usos prácticos del modo cliente-servidor?

23

Sé que Vim permite un modo de servidor cliente ( :h clientserver): es posible convertirlo en un servidor que obtendrá algunos comandos y los ejecutará y como un cliente que enviará los comandos al servidor.

Entiendo cómo funciona, pero no puedo imaginar un uso práctico de esta función: ¿en qué casos es útil y qué flujo de trabajo se puede crear con esta función?

Entonces mi pregunta es simple: ¿Cuál es el uso del modo de servidor cliente de Vim?

(Vuelvo a señalar que mi pregunta no es sobre cómo hacerlo funcionar o cómo funciona, sino por qué usarlo).

statox
fuente
2
Me inclino a cerrar esto como demasiado amplio.
muru
3
Entendería el cierre como demasiado amplio. Tal vez SE no sea la plataforma más adaptada a esta pregunta, pero siento que me falta algo sobre esta característica, así que pensé que otras podrían beneficiarse de estas respuestas.
statox

Respuestas:

21
  • Antes de la función reciente de canal / trabajo de Vim 7.4, la función cliente-servidor era la única forma de hacer una compilación de fondo decente, sin ninguna dependencia de Python. Comenzamos la compilación como un trabajo en segundo plano, y cuando termina, notifica de nuevo a vim, gracias al canal cliente-servidor, que ha terminado.

  • También se usa indirectamente por "complementos" como pyclewn para integrar un depurador en vim. En realidad, pyclewn usa la función + netbeans (que se construye sobre el servidor + clientes). Otros proyectos notables utilizan esta interfaz de netbeans para integrar vim con un IDE - vea :h netbeans-intro.

  • También es utilizado por algunos complementos de pruebas como vimrunner para ejecutar pruebas en Vim desde la línea de comandos. Lo uso para probar mis complementos en travis.

  • También recuerdo sincronizar mis clics en la interfaz xdvi con mi código fuente LaTeX gracias a + clientserver.

Luc Hermitte
fuente
1
Por lo tanto, es útil no ser utilizado por el usuario directamente, sino por una aplicación de terceros. Gracias por tu respuesta que es bastante interesante.
statox
44
@statox Sí. Esos son los principales casos de uso que veo: integración simple con herramientas externas. Simple porque podemos alimentar comandos y funciones vim a través de la línea de comandos.
Luc Hermitte
1
Eclim es otro ejemplo de esto.
Ricitos
13

Mi uso de esto es un poco más simplista (y quizás común) que el de Luc Hermitte.

Si inicia una instancia de gvim con esto compilado (y lo es, y lo ha estado durante mucho tiempo, en, por ejemplo, las principales distribuciones de Linux como Fedora y Debian), se inicia en modo servidor. Hice hincapié en "gvim" porque lo que estoy a punto de describir no parece aplicarse a una viminstancia singular en un terminal GUI (aunque supongo que podría serlo si usa el parámetro adecuadamente).

De todos modos, puede abrir cualquier archivo desde cualquier lugar en esa instancia de gvim con gvim --remote [file path](sin --servernameespecificar). Soy fanático de esto porque no navego mucho por el sistema de archivos directamente con vim; en su lugar, uso un explorador de archivos ortodoxo (comandante de medianoche), o mejor dicho, montones de ellos se abren en diferentes ubicaciones, ya que mces liviano y permite que varios diseños de esquemas de color simplifiquen la diferenciación entre ellos (por lo que tiendo a tener dos o tres abiertos por separado pestañas en al menos un terminal GUI). Sin embargo, creo que el mismo principio se aplicará a cualquier explorador de archivos que le permita alguna forma de tecla de acceso rápido personalizada con la que pueda asociarse gvim --remote %f. En mcLo tengo en el menú de usuario, por lo que F2 + e y el archivo resaltado / seleccionado se envía a la instancia de gvim.

Esto mejora un poco: si abre una segunda instancia de gvim, por ejemplo, en el monitor n. ° 2 del mismo escritorio, o en un escritorio separado, y tal vez un esquema de colores diferente en ese, y esta vez darle un explícito --servername foo, puede enviar archivos a esa instancia en su lugar con:

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

Algo que puede ser útil o no dependiendo del alcance de lo que está haciendo, etc.

encerrada dorada
fuente
Ese es un caso de uso que no había previsto, pero de hecho, si no le gusta navegar por sus archivos desde Vim, puede ser una buena solución.
statox
Bueno, no lo consideraría una "solución" ya que la otra cosa que estoy haciendo, mínimamente, con el navegador de archivos al mismo tiempo es mirar archivos en las mismas ubicaciones (para el texto vía less, que es instantáneo y uno tecla para salir) y posiblemente enviarlos a aplicaciones que no sean vim que también tengan un modo remoto como este (muchas cosas lo hacen ahora, incluidos otros "editores" que a veces uso para dejar pestañas apiladas de encabezados para ver, y también navegadores web) . Dicho de otra manera, diría que navegar por los fs con vim parece una solución alternativa para no usar mcy --remote;)
Ricitos
1
Sí, eso es un flujo de trabajo en sí mismo y no una solución alternativa, mi fraseo no era ideal, pero entendí la idea de tu respuesta ;-)
statox
1
Cuando trabajo con Visual Studio, hago la mayor parte de mi edición en Vim. Utilizo esta función para abrir el archivo actual (con el cursor en la misma ubicación) presionando una tecla. Consulte la sección Vim como una herramienta externa en la página Integrar gvim con Visual Studio Vim Tips para saber cómo configurar esto.
Rico
5

Desarrollo embebido. Muchas veces, en el desarrollo integrado, tiene un zócalo IP, pero espacio limitado en el disco duro local, o no hay memoria no volátil, o cualquier otra cantidad de cosas. Puede iniciar un servidor en la placa incrustada, y luego ingresarlo en su computadora de desarrollo y tener su configuración y etiquetas configuradas localmente.

Sam
fuente
1

Escribí mi tesis de maestría usando Vim, LaTeX y BibTeX. Para administrar mis referencias BibTeX, utilicé un programa llamado JabRef . JabRef tiene una característica pequeña y ordenada donde puede conectarlo a una instancia del servidor Vim, y luego puede "empujar" la referencia BibTeX de JabRef al documento LaTeX que está editando en Vim.

Phantom-99w
fuente
1

Mi flujo de trabajo es similar a lo que dijo Ricitos de Oro en su respuesta. Uso la :terminalfunción de vim8 en combinación con la --remoteopción. Mantengo el diseño de 2 ventanas en vim. Código en la ventana izquierda y terminal a la derecha. Uso la ventana derecha (terminal) para ejecutar compilaciones, navegar por el sistema de archivos y abrir archivos en la instancia actual de vim (desde el terminal). Este flujo me permite operar con muy poca participación del mouse.

Yo uso gvim y icewm (cualquier administrador de ventanas debería hacer)

Iniciar una instancia de gvim

gvim somefile

Dentro de gvim, terminal abierto en división vertical

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

En la ventana de terminal dividida

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.

Puede crear alias para estos comandos largos en su .zshrc / .bashrc y acortarlos a su gusto.

Con este flujo de trabajo, rara vez salgo de mi instancia de gvim y rara vez uso el mouse.

SantoshSrinivas
fuente