Ikasten.IO
Learning, Aprendiendo

Vim y GNU Screen 4 Enero, 2010

Imagen tomada de la Wikipedia En el artículo anterior ya hablé de GNU Screen, un multiplexor de terminales. Qué bien queda ese nombre 🙂 Realmente significa que puedes trocear una terminal, dentro de una ventana, en otras n terminales. ¿Para qué puede servir ésto? Yo encontré esta utilidad a partir de una necesidad: abrir Vim y una terminal en la misma ventana. Es decir, en la parte superior de la ventana quería tener Vim y en la parte inferior una terminal con bash. Alguien podría decir que eso mismo se puede hacer abriendo dos ventanas. Cierto, pero noto mayor integración y aprovechamiento del espacio en pantalla con una sola ventana y una terminal multiplexada en dos (aparte de que con screen puedes hacer muchas otras cosas, como suspender una sesión desde un ordenador y retomarla desde otro ! ).

¿Cómo partir la terminal en dos para que quede tal y como se ve en la figura?
1) Desde la consola, iniciamos screen

2) Lanzamos vim

3) Entramos en modo comando (dentro de screen se hace pulsando Ctrl+a , y tecleando luego “:split”

4) Pasamos a la nueva “terminal” o “ventana” inferior, pulsando Ctrl+a y luego TAB (tabulador). Esta combinación de teclas nos permite pasar de una ventana a otra.

5) En la terminal multiplexada inferior, pulsamos Ctrl+a y luego c (mnemotécnico: “c” de Create) para crear una nueva sesión bash.

  • Alfredo dice:

    Muy bueno, en el trabajo tengo un compañero que usa screen constantemente, y es una gozada verle trabajar, por favor, queremos más manuales de screen

  • ARL dice:

    Hola, una humilde sugerencia.

    Yo también trabajo con vim y un consola, y lo cierto es que me parece la manera ideal 😀

    Sin embargo lo hago empleando Guake, una aplicación que permite tener una consola que ‘baja del techo’ como las antiguas terminales del Quake, Half-Life…

    Esto me permite tener el editor al 100% de pantalla (a veces incluso en pantalla completa con F11) y emplear la consola solo cuando quiero.

    Un saludo 😀

  • man dice:

    Con
    screen -x
    puedes compartir un terminal (dos usuarios viendo y tecleando a la vez en la misma consola virtual).

  • Roberto dice:

    No tengo mucha experiencia con screen, pero en su día escribí
    unas notas sobre su uso. Las comparto con vosotros:

    Ventajas:
    – Aplicación sencilla, pero muy potente y configurable.

    – Ofrece la posibilidad de trabajar con varias terminales al
    mismo tiempo (multiplexación). En este sentido, hay otras
    opciones mejores (“terminator”, por ejemplo) pero quizá no
    tan estándar.

    – Ofrece la posibilidad de guardar estado de la sesión, de
    tal modo que podemos desconectarnos del sistema y más
    adelante volver a conectarnos recuperando la sesión de
    trabajo. Es interesante ya que nos permite mantener
    sesiones remotas aunque apaguemos nuestro equipo, se
    desconecte automaticamente la sesión ssh (algunos
    servidores establecen un tiempo máximo) o cambiemos de
    equipo cliente (trabajo – casa).

    – Integración con Vim: comparte por ejemplo la idea de
    buffers (terminales en el caso de screen y ficheros en el
    caso de buffers) y algunas combinaciones de teclas.

    Procedimiento de trabajo:

    – Abrir un terminal de tipo screen.

    $ screen

    Como resultado, en el sistema se creará un proceso de nombre
    “screen” y creará un terminal asociado a ese proceso.

    – Múltiples terminales dentro de un proceso screen (multiplexación de
    sesiones):

    En caso de tener que realizar varias tareas en paralelo,
    se puede abrir más terminales en paralelo (además del
    primero, que se abre por defecto). En principio, los
    terminales se organizan como si fueran solapas (tabs),
    pero sin el control gráfico que permite cambiar de una a
    otra.

    – Crear más terminales: dentro del terminal lanzar
    nuevamente el comando screen (o ctrl-a + c).

    Para moverse entre los terminales abiertos:
    – ctrl-a + space o ctrl-n: recorre la lista de terminales

    – ctrl-a + num_terminal: ir directamente al número
    de terminal

    – ctrl-a + ” : ver la lista de terminales y moverse de una a otra.

    – ctrl-a + ctrl-a: swap entre las dos últimas
    terminales con focus

    – Listar terminales abiertas: ctrl-a + ” o ctrl-a + w.

    – Renombrar una terminal: ctrl-a + A . Muy útil para distinguirla
    del resto según su uso; “Vim”,”remoto hostA”,”compilar”, …

    – Split

    – Si deseamos ver varios terminales al mismo tiempo,
    se puede dividir la pantalla horizontalmente =>
    ctrl-a+split (o ctrl-S). Dentro de cada división
    podemos movernos entre todas las terminales
    abiertas como se describe en los puntos
    anteriores.
    – Para cambiar el focus entre las divisiones
    horizontales: ctrl-a + TAB
    – Para redimensionar: ctrl-a + :resize
    – Para cerrar visualización ventanas divididas
    horizontalmente (no los terminales) ctrl-a+X

    – Cerrar un terminal abierto dentro de una sesión: comando exit o ctrl-d

    – Desligarse de la terminal screen (sin cerrarla): dettach.
    Secuencia de teclas: ctrl-a + d. Si se cierra la conexión se
    logra el mismo efecto (ver fichero .screenrc más adelante),
    aunque no se recomienda esta última opción, (no es conveniente
    cerrar la conexión de este modo).

    Tenemos que tener en cuenta que cuando nos desligamos de un
    proceso screen, dejamos ese proceso screen activo en el
    sistema, incluso aunque cerremos la sesión ssh con ese
    sistema. Más adelante, podemos establecer una nueva sesión ssh
    y recuperar el proceso screen, continuando en el punto en el
    que lo habíamos dejado.

    – Recuperar una sessión screen (attach)
    $ screen -r
    Sólo podremos recuperar la sesión screen mientras ese proceso
    siga activo en el sistema. Si hemos reiniciado el sistema, ese
    proceso ya no existirá.

    – Cerrar una sesión screen: salir de cada una de las terminales
    abiertas dentro del proceso screen

    – Varias procesos screen: es posible tener varios procesos
    screen en ejecución (ejecutando varias veces el comando screen
    desde fuera de cualquier terminal). En este caso se recomienda
    darle un nombre al crear el proceso screen:

    $ screen -S nombre_terminal

    – Listar las sesiones screen en ejecución:
    $ screen -ls

    – Para recuperar una sesion (cuando hay varias):

    $ screen -D -r PID_proceso (o el nombre, si se le ha dado un nombre al
    ejecutar screen)

    Por último, comentaros que screen puede tener un fichero de
    configuración “.screenrc” (en el $HOME del usuario) en el que se
    pueden indicar opciones interesantes:

    Ejemplo:

    escape ^Tt # Para cambiar la tecla de control, en lugar de ctrl+a.
    # Tema delicado, ya que la combinación seleccionada
    # puede entrar en conflicto

    startup_message off # Para que no aparezca la pantalla inicial de screen

    hardstatus lastline “SCREEN: %-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<"
    # linea de status que informa de la lista de terminales (número
    # y nombre), junto con una marca informando del terminal que
    # actualmente tiene el focus

    Otras opciones

    autodetach on # Autodetach session on hangup instead of terminating screen completely (para evitar que la sesión se pierda al cerrar la ventana "sin querer").

  • admin dice:

    @Roberto: excelente comentario. ¡Es mejor que el propio post! 🙂 Gracias.

  • Guerreru dice:

    Buen comando, no lo conocía pero mis escritorios van ganar en usabilidad.
    Muchas gracias, buen post!

  • mams.827 dice:

    Excelente comando, no lo habia escuchado antes, pero ahora que lo veo me parece fabuloso. Cada dia me encanta mas la consola, lo tiene todo (Entre lo que resalto, el vim, el grep, el sed y otros comandos excelentes)

  • […] Seguimos con configuraciones que hacen de Vim, en mi opinión, un potente IDE. El de hoy es un truquito que permite integrar una terminal dentro de un buffer Vim. Así podréis teclear lo que queráis en uno de los buffers (el superior, por ejemplo) y en el inferior tener abierta el intérprete Bash 🙂 Podéis ver el resultado en la imagen adjunta. Así no tendréis que hacer uso de GNU-Screen o similares. […]

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *