2009-05-11 19 views
34

Empecé a utilizar emacs como mi editor principal hace unos días, y estoy en el proceso de reunir todas las personalizaciones que necesito.¿Cómo hacer el desarrollo remoto con Emacs?

El uso principal que le doy es para el desarrollo de un proyecto C en una máquina Linux remota (RHEL 5). Hasta ahora estaba usando plain vim (solo como editor de texto) y un montón de scripts de shell, y un día decidí probar emacs. Hasta ahora me gusta.

Pero como inconveniente veo que configurar el entorno para ejecutar emacs es un largo camino por recorrer, y en lugar de usarlo directamente en la máquina de desarrollo (y configurar el entorno en cada máquina que uso) probaría simplemente usarlo desde mi computadora portátil y hacer el desarrollo remoto.

Conozco TRAMP pero solo edita archivos remotos hasta donde yo sé. El gran obstáculo es ejecutar comandos de shell en la máquina remota con una sola pulsación de tecla (me limité a F5 para ejecutar un comando de compilación personalizado en los emacs de la máquina remota).

¿Cómo se ejecutan los comandos de shell en una máquina remota con una sola pulsación de tecla de emacs? ¿Conoces otros consejos & trucos para hacer un desarrollo totalmente remoto?

+0

Puede usar ssh con x-forwarding y ejecutar Emacs en la máquina remota que se muestra en su computadora. – Nifle

+4

En Emacs 23.2, el comando "compilar" es automáticamente remoto cuando se ejecuta desde un buffer TRAMP. – MarcH

Respuesta

10

Al hacer un desarrollo remoto, uso screen que proporciona múltiples terminales remotos virtuales disponibles con solo presionar un par de teclas. Esto es indispensable para mí. No solo proporciona terminales virtuales, sino que su sesión se conserva en el servidor si su conexión se cae por algún motivo.

Consulte la pregunta GNU Screen Survival Guide para obtener más información sobre cómo empezar con screen.

Normalmente tengo un terminal abierto para las operaciones de control de código fuente, uno para editar, uno para compilar (solo tengo que cambiar a él y presionar UpArrow + Enter), y uno para la depuración. Dependiendo del entorno y la aplicación en la que estoy trabajando, puedo tener más o menos que esto, pero ese es el diseño general.

+4

'tmux' es también un popular programa de 'pantalla' desarrollado activamente. –

23

TRAMP admite la compilación y la depuración en los equipos remotos (en los que residen los archivos). Esto debería ser automático y relativamente sencillo. Consulte la documentación para remote processes.

18

No te preocupes. Puede ejecutar cualquier cosa en Emacs con una sola pulsación de tecla. Otros han señalado maneras que usted puede hacer esto con elegancia con vagabundo, pero si que no se ajusta (por cualquier razón) que podrían también acaba de cocinar su propia función usando:

(defun arbitrary-remote-command() 
    (interactive) 
    (shell-command 
    "ssh [email protected] arbitrary-command")) 


(global-set-key (kbd "<f5>") 'arbitrary-remote-command) 
1

Suponiendo que usted no desea ejecutar emacs en modo terminal en su máquina remota , entonces es bastante fácil. Como sabe, puede usar TRAMP para editar archivos remotos . Acabo de configurar compile-command para 'ssh me @ remote "cd /path/to/root & & make"' y listo.

2

Me gustaría entrar en la máquina remota y ejecutar emacs en modo terminal en lugar de usar TRAMP. TRAMP es realmente lento cuando no esperas lentitud, al menos en mi experiencia. También lo he visto fallar de formas extrañas, y no siempre es obvio cómo "arreglarlo". Si ingresas, no podrás usar la interfaz de usuario de emacs, como los menús, etc., pero como estás acostumbrado a vi, eso no debería ser un problema para ti. De hecho, puede desactivarlos para que su experiencia de ssh emacs sea muy similar a su experiencia local (¡si es local! = Modo terminal) (1).

El uso de la pantalla puede ser útil si le interesa preservar su sesión en caso de que la conexión caiga, aparte de eso, obtiene una funcionalidad similar a la de los terminales virtuales con búferes de emacs. Por ejemplo, puede abrir muchos búferes de shell y ejecutar varios comandos de shell en búferes de emacs. Lo uso para ejecutar muchas instancias de sqlplus (use rename-buffer para darles todos los nombres agradables y agradables).

Dado que está conectado a la máquina remota, no tiene que preocuparse por ejecutar comandos de shell "remotos".

Por otro lado, no estoy seguro de lo que quiere decir con "Veo que configurar el entorno para ejecutar emacs es un largo camino por recorrer". Si tienes control de fuente, esto debería ser trivial ... (Apuesto a que tienes una buena razón).

(1) desactivar el menú, barra de herramientas y barras de desplazamiento:

(si (fboundp 'menú-bar-mode) (menú-bar-modo -1))

(si (fboundp 'herramienta-bar-mode) (herramienta-bar-modo -1))

(si (fboundp' scroll-bar-mode) (scroll-bar-mode -1))

+0

Actualmente estoy haciendo el desarrollo de esta manera, pero por ejemplo para configurar w3m para que funcione con el fin de ver la documentación en línea, necesito un montón de rpm para instalar y resolver dependencias, o compilar cedet (no hay yum). Parte del desarrollo es probar un instalador en un sistema recientemente formateado, por lo que de vez en cuando el servidor está formateado y necesito instalar emcas una vez más. O, necesito cambiar algún código en otro servidor, y también necesitaría instalar emacs. Con vim no hay problema porque está ahí "listo para usar" (al menos como un simple editor de texto). – German

-2

dos centavos: si el ancho de banda no es una gran preocupación, le daría una oportunidad a VNC.

5

Buena respuesta de Trey Jackson, pero la respuesta de Matthew Flaschen realmente me ayudó más.

No pude encontrar la manera de hacer que TRAMP hiciera la compilación, pero accidentalmente encontré el comando remote-compile.

Ahora sólo tiene que añadir estas líneas a mis .emacs:

(setq remote-compile-user "root") 
(setq remote-compile-host "localhost -p 3000") ;This is just when tunneling 
(setq compile-command " cd /usr/src/nexus/traffic && ./builder.sh compile ; cat builder.log") 
(global-set-key (kbd "<f5>") 'remote-compile) 

Y antes de hacer nada, configurar la conexión ssh usando ControlMaster y yo no tengo que escribir contraseñas.

resuman:

  • archivos remotos Edición: TRAMP
  • terminales múltiples estados de ahorro: PANTALLA
  • Definir emacs combinaciones de teclas para ejecutar comandos remotos: Ver Mateo Flaschen respuesta
  • compilación remoto: Comando compilación remota con ControlMaster

Creo que cubre algunas acciones importantes para hacer el desarrollo remoto.

+0

Puede usar el comando regular "compilar": usa automáticamente TRAMP cuando se ejecuta desde un búfer remoto (al menos en Emacs 23.2).Intenté "compilación remota" y falló miserablemente: probablemente porque intentó hacerlo dos veces. – MarcH

+0

'rcompile.el (remote-compile)' hecho obsoleto desde Emacs 24.4. En Ubuntu 'rcompile.el' se puede encontrar en el directorio'/usr/share/emacs//lisp/obsoleto/'. – Vivek

1

He intentado TRAMP antes para una situación como la tuya, pero también he encontrado que falla de manera extraña, y lenta en general.

Ahora estoy usando Emacs para editar archivos montados sobre una montura sshfs. Este trabajo es muy bueno para mi.

Para montar el sistema de archivos remoto (suponiendo que tiene el host configurado correctamente en .ssh/config y configurar las claves públicas de conectarse sin contraseña)

$ sshfs remote:dir localdir 

y editar como desee a partir de entonces!

En cuanto a la compilación, ver las otras respuestas, cubren esto en su totalidad.

1

Acerca de vagabundo puede depender de la versión de tramp que esté utilizando.

Personalmente me encontraba mucho problema con el paquete predeterminado de tramp y pellizco como backend para conectarme a hosts remotos, así que actualicé el tramp a una versión más reciente y resolví numerosos problemas.

En realidad, estoy en una máquina de Windows accediendo a un linux (RH5) para compilar y explorar directorios remotos, leer/escribir algunos archivos, compilar en la máquina remota funciona bien.

0

Una cosa que nadie ha mencionado es ejecutar emacs fuera de la máquina remota, con una variable $ DISPLAY válida correspondiente a su pantalla actual.

Obviamente debe ejecutar un Servidor X para su pantalla local, pero eso no es un gran problema, incluso en Windows [use el Servidor X integrado en Cygwin].

Esto generalmente requiere latencia de red < 50ms. Si hace ping a ese cuadro remoto y obtiene algo> 50ms, se sentirá frustrado con este enfoque.

Debajo de eso, funciona genial.

Deberá tener SSH para mapear el puerto X, hay muchos documentos ahí.

0

Lo que yo he utilizado desde alrededor de 1994:

cat <<-EOF >> ~/.emacs 
(define-key global-map "\e`" 'compile) 
(define-key global-map "\e~" 'remote-compile) 
(require 'compile) 
(setq remote-shell-program "ssh") 
EOF 

Ahora ESC-`corridas de compilación, y ESC- ~ corre/remote/compilar. Te preguntará por el nombre de host y luego pre-poblará el comando. Ambas compilaciones comparten el mismo búfer de historial.

Es tan fácil. Aprovecha una función que ha funcionado igual durante décadas, y no requiere ningún otro trabajo de elevación, y es solo texto sobre un ssh, por lo que será muy sensible y eficiente en enlaces largos o lentos o congestionados. Descubrí que esto evita un poco más los puños de Red Rage.

Cuestiones relacionadas