2009-08-02 11 views
5

Estoy buscando una manera de asignar el comando: w para que cuando lo uso, rsync el directorio actual y guarde el archivo en cuestión. Lo ideal es que la respuesta generada por el comando rsync se devuelva en vim, pero no en el archivo actual, sino como información sobre herramientas o algo así.VIM: RSync en guardar

Logré lograr esto en TextMate y ahora estoy buscando comenzar a trabajar con Vim. He estado intentando cosas como: map w: w |! Rsync. pero eso no parece funcionar (soy un principiante :))

Agradecería cualquier ayuda.

Gracias, Joe

+0

¿Por qué no simplemente edita el archivo de forma remota? – innaM

+1

Joe, ¿puedes publicar cómo hiciste esto en TextMate? :) – richardkmiller

Respuesta

8

Puede enlazar en BufWritePost. No recuerdo la sintaxis exacta, pero ":he BufWritePost" y ":he autocommand" deberían ayudarte.

A configurar un gancho básico como esto (patrón coincide en un archivo, por lo que puede hacer * .your_extension):

:au BufWritePost * !rsync 

Además, no debe haber alguna manera de hacer que sea local al búfer.

5

Si desea conservar la copia local, el autocmd BufWritePost sugerido por viraptor es la mejor opción, pero suponiendo que tiene el plugin netrw instalado (parte de los archivos de tiempo de ejecución predeterminados de Vim), también puede iniciar vim con:

vim rsync://myrsync_server.com/path 

y simplemente edite el archivo como si fuera local: saves actualizará el servidor remoto.

:help rsync 
0

Puede tampón configuración autocommands locales para hacer esto (ver: Ayuda autocmd-buflocal)

Esto establece vim para invocar rsync después de cada escritura a la memoria intermedia.

au BufWritePost,FileWritePost <buffer> silent !rsync -a /path/to/somedir/ [email protected]:/remote/dir/ --exclude=*.sw? 

Una advertencia es que se debe establecer una de estas autocommands para cada archivo se edita en un proyecto de varios archivos. Eso se vuelve engorroso y es fácil olvidarse de configurar esto para nuevos archivos/búferes; por supuesto, puede configurar un comando automático normal, pero luego tiene rsync encendido para escribir en archivos que no están en el proyecto.

Con rsync-over-ssh, esto funciona si se puede acceder al host remoto a través de un enlace de baja latencia, y tal vez no tan bien, ya que cada escritura bloquea el búfer de actualizaciones posteriores hasta que se complete rsync. Para mejorar la experiencia, recomiendo

  • Reutilizando una conexión SSH usando connection-multiplexing a través de una conexión persistente.
  • Enviando rsync al fondo al anexar un & al final del comando. YMMV.