¿Cómo configurar el terminal *NIX para que funcione de manera similar a un IDE?

¿Cómo configurar el terminal *NIX para que funcione de manera similar a un IDE?

Me gustaría configurar algo en un shell que me brinde una experiencia similar a la de un IDE usando solo el shell (sin X). Lo más cerca que he estado es usar tmux, con vim en un panel y la línea de comando en el otro. De esa manera, desde vim puedo .w !bashejecutar una línea.

Pero esto no me resulta satisfactorio porque el entorno no persiste entre los comandos ejecutados por separado.

Si corro:

var1=FOO

y luego

echo $var1

cada vez que use .w !bash, FOOno se repetirá.

Lo que realmente quiero hacer es revisar un archivo de texto en un panel y usar un acceso directo para enviar una línea al terminal en el otro panel, como parte de esa sesión de terminal. ¿Cuál es la combinación adecuada de herramientas para lograrlo? Entiendo que emacs se puede configurar para hacer algo como esto con su propio emulador de terminal, pero me gustaría una solución que funcione con las herramientas estándar (como un instalador).

Editar: tmux seleccionar-copiar-pegar no es tan malo, pero sigue siendo un poco incómodo.

Respuesta1

Una solución prototipo con shy vimuna tmuxprueba de concepto rápida y sucia.

Su .w !bashejecuta bashy envía la línea actual a su entrada estándar. Reemplacémoslo bashcon un script que inserta una línea de su entrada estándar en un panel diferente en tmux.

Este es el guión básico:

#!/bin/sh
pane="$(tmux list-panes -F '#{pane_active} #D' | awk '$1==0 {print $2;exit}')"
IFS= read -r line
tmux send-keys -l -t "$pane" "$line"
tmux send-keys -t "$pane" 'C-j'

El procedimiento, breve explicación:

  1. Identifique un panel que no esté activo.
  2. Leer una línea de stdin.
  3. Envíe la línea al panel como si estuviera escrita.
  4. Enviar Enteral panel.

Guárdelo como trun, hágalo ejecutable y accesible a través de $PATH. Ahora, si tiene dos paneles tmuxy ejecuta trununo de ellos, escribe una línea y presiona Enter, la línea se inyectará en el otro panel.

En vimlugar de .w !bashinvocar .w !trun, debería funcionar. Vincule esto a una clave para facilitar el acceso.

Notas:

  • El script no comprueba si hay exactamente dos paneles.
  • Al script no le importa lo que se ejecuta en el panel de destino; solo envía claves.

información relacionada