Como configurar o terminal *NIX para funcionar de forma semelhante a um IDE?

Como configurar o terminal *NIX para funcionar de forma semelhante a um IDE?

Eu gostaria de configurar algo em um shell para me proporcionar uma experiência semelhante a IDE usando apenas o shell (sem X). O mais próximo que cheguei foi usar o tmux, com o vim em um painel e a linha de comando no outro. Dessa forma, a partir do vim, posso .w !bashexecutar uma linha.

Mas isso não é satisfatório para mim porque o ambiente não persiste entre comandos executados separadamente.

Se eu correr:

var1=FOO

e então

echo $var1

cada um usando .w !bash, FOOnão será ecoado.

O que eu realmente quero fazer é passar por um arquivo de texto em um painel e usar um atalho para enviar uma linha para o terminal no outro painel, como parte dessa sessão de terminal. Qual é a combinação certa de ferramentas para conseguir isso? Entendo que o emacs pode ser configurado para fazer algo assim com seu próprio emulador de terminal, mas gostaria de uma solução que funcionasse com as ferramentas padrão (como em um instalador).

Editar: tmux select-copy-paste não é tão ruim, mas ainda é um pouco estranho.

Responder1

Uma solução de protótipo com prova shde conceito rápida e suja.vimtmux

Você .w !bashexecuta bashe envia a linha atual para seu stdin. Vamos substituir bashpor um script que injeta uma linha de seu stdin em um painel diferente no tmux.

Este é o script 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'

O procedimento, breve explicação:

  1. Identifique um painel que não está ativo.
  2. Leia uma linha do stdin.
  3. Envie a linha para o painel como se tivesse sido digitada.
  4. Envie Enterpara o painel.

Salve-o como trun, torne-o executável e acessível via $PATH. Agora, se você tiver dois painéis tmuxe executar trunum deles, digitar uma linha e clicar em Enter, a linha será injetada no outro painel.

Em vimvez de .w !bashinvocar .w !trun, deve funcionar. Vincule isso a uma chave para facilitar o acesso.

Notas:

  • O script não verifica se existem exatamente dois painéis.
  • O script não se importa com o que é executado no painel de destino; apenas envia chaves.

informação relacionada