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 !bash
ejecutar 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
, FOO
no 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 sh
y vim
una tmux
prueba de concepto rápida y sucia.
Su .w !bash
ejecuta bash
y envía la línea actual a su entrada estándar. Reemplacémoslo bash
con 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:
- Identifique un panel que no esté activo.
- Leer una línea de stdin.
- Envíe la línea al panel como si estuviera escrita.
- Enviar Enteral panel.
Guárdelo como trun
, hágalo ejecutable y accesible a través de $PATH
. Ahora, si tiene dos paneles tmux
y ejecuta trun
uno de ellos, escribe una línea y presiona Enter, la línea se inyectará en el otro panel.
En vim
lugar de .w !bash
invocar .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.