¿Cómo se supone que debo editar archivos en una red con Vim?

13

Actualmente lo estoy haciendo mediante SSHing en un servidor y ejecutando Vim en el servidor. Esto tiene el beneficio de no tener que lidiar con la engorrosa sintaxis de abrir archivos desde un servidor remoto a través de SCP y, lo que es más importante, poder navegar realmente rápidamente por el sistema de archivos del servidor. Por otro lado, tiene retraso, lo que dificulta la edición.

¿Cuál es la forma canónica de editar muchos archivos remotos?

jcora
fuente
66
Exactamente cómo lo estás haciendo.
Ignacio Vazquez-Abrams
Si vimmuestra un retraso, esto probablemente apunta a un problema con su red en lugar de su flujo de trabajo.
Joseph R.
ssh [email protected]; vim / etc / somefile: inicio sesión y luego
enciendo
En realidad es con la red. Cuando presiono una tecla, tiene que enviar un paquete desde Europa a los EE. UU., Donde la instancia de Vim que estoy usando se está ejecutando.
jcora
También podría simplemente hacer ssh [email protected] vim /etc/somefile(tenga en cuenta la ausencia de ;).
terdon

Respuestas:

26

Puede usar SSHFS para montar una casa remota en una carpeta local. Tiene la ventaja de utilizar la infraestructura actual y la baja latencia de vim local.

Mircea Vutcovici
fuente
1
mejor manera imo. no solo baja latencia sino también tener que mantener una vimrc
exussum
20

Puede editar de forma remota con un vim local o gvim.

:e scp://[email protected]/~/myfiles/whatever.file

scpEs un protocolo de copia segura . Se autentica de la misma manera que ssh, por lo que su clave ssh debe estar disponible, etc. Hay varios otros protocolos compatibles (ver :help netrw-externapp), pero scp es probablemente el más fácil si ya está utilizando ssh en el mismo lugar.

Puede buscar directorios de esta manera, solo asegúrese de que la ruta termine con un /. De lo contrario, vim lo convierte en un nuevo archivo.

:wescribe automáticamente el archivo a través de scp. Si la escritura falla por alguna razón, debe notarlo, ya que será un tipo de "shell devuelto 1" en la barra de estado. Sin embargo, tenga cuidado: si no lo nota, vim no lo sabe y eso puede tener consecuencias; por ejemplo, si ahora deja de fumar, no se lo advertirá. Es particularmente fácil perderse esto si usa :wamucho; Esa es la única advertencia que tengo.

Para los documentos oficiales, ver :help netrw.

encerrada dorada
fuente
+1 Estaba a punto de escribir esto. El complemento netrw (que generalmente se instala de manera predeterminada) tiene una amplia variedad de formas de leer archivos remotos.
Greg Hewgill
Me refería a esta opción cuando dije: "Esto tiene el beneficio de no tener que lidiar con la engorrosa sintaxis de abrir archivos desde un servidor remoto a través de SCP y, lo que es más importante, poder navegar realmente rápido por el sistema de archivos del servidor" De esta manera me parece muy limitado.
jcora
1
Para ser justos, su pregunta originalmente no mencionaba "servidor remoto sobre SCP", que fue editado más tarde.
Greg Hewgill
@GregHewgill: Gracias por esa nota ya que estoy un poco desconcertado: este es el método más simple y directo para fines generales (¡sin ofender a SSHFS!). Si agregar una URL a una ruta de archivo es relativamente engorroso, tengo curiosidad por saber cómo la tarea que se realiza realmente requiere que alguien se siente con un editor para hacerlo ... esp. ya que puede simplemente subir la flecha del comando. Pero a cada uno lo suyo.
Ricitos de oro
@GregHewgill sí, lo sé, escribí la pregunta en mi teléfono mientras me movía, así que dejé algunas cosas sin querer. Ricitos de oro, abro y cierro archivos todo el tiempo. Navegue también por el sistema de archivos y ábralo desde allí. Agregar una ruta URL + fue más engorroso que simplemente "estar allí".
jcora
2

Yo usaría rsync. Transfiere solo lo que cambió. Al igual que:

rsync -e ssh -va remoteuser@remotehost:remotedir .

luego edite los archivos localmente a su propio ritmo. Cero retraso. Puedes inspeccionar todos los archivos antes de comprometerlos:

rsync -e ssh -va . remoteuser@remotehost:remotedir

Supongo que primero creas tu directorio local y cden eso. También puede hacer que maneje la eliminación de archivos, pero tenga mucho cuidado con eso, porque ejecutar eso en el directorio incorrecto podría destruir un árbol de directorios completo.

rsync -e ssh -va --delete . remoteuser@remotehost:remotedir

Lo que hago es ejecutarlo primero en "modo seco", usando la bandera 'n', así:

rsync -e ssh -van --delete . remoteuser@remotehost:remotedir

Informará lo que habría hecho, si fuera real. Si estoy satisfecho con la lista informada, la vuelvo a ejecutar y elimino la bandera 'n'.

rsync es muy eficiente. Hay varias otras banderas también. Es bastante sofisticado.

Miguel
fuente
0

Puede ser nombrado de la manera más apropiada: SSH, pero aún dependiendo de la naturaleza de los archivos editados, puede asignar una pequeña partición, compartirla y colocar los archivos allí, por supuesto si la política de seguridad permite esta acción. Para esta sugerencia, puede usar NFS o Samba con mayor facilidad, pero aún así editar el archivo de prueba es una concepción general en UNIX y es posible que deba mantenerlo de la manera en que lo hace actualmente.

VVelev
fuente