¿Cuál es la mejor manera de editar archivos remotos desde Emacs?

# Vagabundo (solo Emacs)
Solía ​​ser un gran admirador de Tramp, hasta que descubrí que tenía un retraso perceptible y no funcionaba con complementos como flycheck. (flycheck / flycheck)

# Basado en montaje
Luego probé una solución basada en montaje (trabajando directamente en el disco montado), que resultó tener su propia locura (por ejemplo, git no funciona bajo el disco montado de Transmit), más un retraso perceptible.

Para los usuarios de Mac, recomendaría Expandrive y Transmit.

# File Watcher + sincronización basada
Inspirado por el complemento SFTP (en Sublime Text), comencé a buscar soluciones basadas en la herramienta de sincronización y cambio de archivos. Básicamente, cada vez que guarde un archivo, el observador notificará a la herramienta de sincronización que tome medidas.

Lo intenté:
– pmcjury / guard-remote-sync
– jedrichards / grunt-rsync
– axkibe / lsyncd
– alandipert / fswatch + unison (o rsync)

Ahora estoy felizmente establecido con fswatch + unison . Unison es genial porque admite sincronización bidireccional. Así que también puedo buscar un nuevo archivo del servidor cuando sea necesario. Para obtener más detalles, consulte ¿Por qué es Unison mejor que rsync?

Estas herramientas naturalmente funcionan bien con el protocolo ssh. Si necesita trabajar con otros protocolos (por ejemplo, samba), puede combinarlos con una solución basada en montaje. Además, son editores / IDE neutrales (por lo tanto, basados ​​en montaje y VCS, como se menciona más adelante) y puede trabajar sin conexión.

Miro y sincronizo un directorio completo de “proyectos” con el control remoto, para poder trabajar en cualquier proyecto específico y se sincroniza automáticamente.

# Sistema de control de versiones basado
Las soluciones basadas en VCS (por ejemplo, git) son interesantes, pero a menudo tengo que probar mi prototipo en el servidor sin comprometerme. Para este tipo de solución, podría considerar acompañar un script de implementación automática, por ejemplo, http://docs.fabfile.org/en/1.9/t…

Detuve esto al construir mis propios emacs en mi directorio local en el servidor remoto, y luego usarlo en la terminal. Funciona mucho mejor que todas las otras cosas que probé.

Otra posibilidad potencial es usar sshfs (que es en lo que se basa MacFUSE), pero ajustar las opciones que puede tomar (y SSH).

Otro más es tener un caché local que se sincronice periódicamente con el directorio remoto. Probablemente podría configurar esto basado en rsync o git.

Tramp realmente no debería estar congelando Emacs, y es, con mucho, la mejor solución. Debe haber un error en algún lugar de su configuración. ¿Tal vez su shell remoto tarda demasiado en iniciarse? ¿Emacs imprime algún error?

Tramp funciona bien para mí, con los siguientes cambios:

(setq tramp-default-method "ssh") (setq tramp-auto-save-directory "~/tmp/tramp/") (setq tramp-chunksize 2000) 

Chunksize es realmente una solución alternativa para problemas en uno de mis objetivos. El directorio tramp-auto-save-realmente me ahorró algunos puestos cuando se inició el autoguardado.

Además, hago lo siguiente con ssh:

  Anfitrión *
          ControlMaster auto
          ControlPath ~ / tmp / .ssh-control-% r-% h-% p

Luego mantengo una conexión con el servidor. Esto tendrá un vagabundo en las conexiones existentes. El tiempo de conexión cae al suelo (en algunos casos, tengo máquinas que tardan hasta un minuto en realizar una conexión inicial; las segundas conexiones son aproximadamente instantáneas).