tutorial - emacs ubuntu
¿Cómo hacer un desarrollo remoto con Emacs? (11)
Acerca de vagabundo puede depender de la versión de vagabundo que esté utilizando.
Personalmente, me encontré con muchos problemas 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 máquina remota funciona bien.
Empecé a utilizar emacs como mi editor principal hace unos días, y estoy en el proceso de reunir todas las personalizaciones que necesito.
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) trataría de usarlo desde mi computadora portátil y hacer el desarrollo remoto.
Sé de TRAMP, pero eso 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 ejecutas comandos de shell en una máquina remota con una sola pulsación de tecla de emacs? ¿Conoces otros consejos y trucos para hacer un desarrollo remoto completo?
Al hacer un desarrollo remoto, uso una 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 de la Guía de supervivencia de la pantalla de GNU para obtener más información sobre cómo comenzar a screen
.
Por lo general, tengo un terminal abierto para las operaciones de control de origen, uno para editar, otro 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.
Buena respuesta de Trey Jackson, pero la respuesta de Matthew Flaschen realmente me ayudó más.
No pude encontrar la forma de hacer que TRAMP hiciera la compilación, pero accidentalmente encontré el comando remote-compile .
Ahora solo agrego 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, configure la conexión ssh usando ControlMaster y no tengo que escribir contraseñas.
Resumiendo:
- Edición de archivos remotos: TRAMP
- Múltiples estados de ahorro de terminales: PANTALLA
- Definir combinaciones de teclas de emacs para ejecutar comandos remotos: ver la respuesta de Matthew Flaschen
- Compilación remota: Command remote-compile con ControlMaster
Creo que cubre algunas acciones importantes para hacer el desarrollo remoto.
Dos centavos: si el ancho de banda no es una gran preocupación, le daría una oportunidad a VNC.
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 claves públicas para conectarse sin una contraseña)
$ sshfs remote:dir localdir
¡y edita lo que quieras a partir de ese momento!
En cuanto a la compilación, ver las otras respuestas, cubren esto en su totalidad.
Lo que he usado desde aproximadamente 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-`ejecuta la compilación, y ESC- ~ ejecuta / remota / compila. 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.
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).
Usar la pantalla puede ser útil si te importa preservar tu sesión en caso de que la conexión caiga, aparte de eso obtienes 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).
Como está conectado a la máquina remota, no necesita 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ú, la barra de herramientas y las barras de desplazamiento:
(if (fboundp ''menu-bar-mode) (menú-barra-modo -1))
(if (fboundp ''tool-bar-mode) (tool-bar-mode -1))
(if (fboundp ''scroll-bar-mode) (scroll-bar-mode -1))
No te preocupes Puede ejecutar cualquier cosa en Emacs con una sola pulsación de tecla. Otros han notado maneras de hacerlo elegantemente con TRAMP, pero si eso no se adapta (por la razón que sea) también puedes cocinar tu propia función usando:
(defun arbitrary-remote-command ()
(interactive)
(shell-command
"ssh user@remotehost arbitrary-command"))
(global-set-key (kbd "<f5>") ''arbitrary-remote-command)
Suponiendo que 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 terminarlo.
TRAMP admite la compilación y la depuración en las máquinas remotas (en las que residen los archivos). Esto debería ser automático y relativamente sencillo. Consulte la documentación de procesos remotos .
Una cosa que nadie ha mencionado es ejecutar emacs desde 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 gran cosa, incluso en Windows [use el Servidor X integrado en Cygwin].
Esto generalmente requiere una 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.
Necesitarás que SSH trace un mapa del puerto X, hay muchos documentos ahí.