Wie richte ich das *NIX-Terminal so ein, dass es ähnlich wie eine IDE funktioniert?

Wie richte ich das *NIX-Terminal so ein, dass es ähnlich wie eine IDE funktioniert?

Ich möchte etwas in einer Shell einrichten, um eine IDE-ähnliche Erfahrung zu machen, bei der ich nur die Shell verwende (kein X). Am nächsten komme ich dem mit tmux, mit vim in einem Fenster und der Befehlszeile im anderen. Auf diese Weise kann ich von vim aus .w !basheine Zeile ausführen.

Dies ist für mich jedoch nicht zufriedenstellend, da die Umgebung zwischen separat ausgeführten Befehlen nicht erhalten bleibt.

Wenn ich ausführe:

var1=FOO

und dann

echo $var1

Jede Verwendung .w !bashwird FOOnicht wiederholt.

Was ich wirklich tun möchte, ist, eine Textdatei in einem Fenster durchzugehen und eine Verknüpfung zu verwenden, um im Rahmen dieser Terminalsitzung eine Zeile an das Terminal im anderen Fenster zu senden. Welche Kombination von Tools ist dafür die richtige? Ich verstehe, dass Emacs mit seinem eigenen Terminalemulator so konfiguriert werden kann, dass es so etwas macht, aber ich hätte gerne eine Lösung, die mit den Standardtools funktioniert (wie beispielsweise einem Installationsprogramm).

Bearbeiten: tmux-Auswählen-Kopieren-Einfügen ist nicht so schlimm, aber trotzdem ein wenig umständlich.

Antwort1

Eine Prototyplösung mit und shschnellem Proof of Concept.vimtmux

Ihr .w !bashwird ausgeführt bashund sendet die aktuelle Zeile an seinen Standard-DIN. Ersetzen wir es bashdurch ein Skript, das eine Zeile von seinem Standard-DIN in einen anderen Bereich in einfügt tmux.

Dies ist das grundlegende Skript:

#!/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'

Der Ablauf, kurze Erklärung:

  1. Identifizieren Sie einen Bereich, der nicht aktiv ist.
  2. Lesen Sie eine Zeile von stdin.
  3. Senden Sie die Zeile an den Bereich, als ob sie eingegeben worden wäre.
  4. EnterAn den Bereich senden .

Speichern Sie es unter trun, machen Sie es ausführbar und erreichbar über $PATH. Wenn Sie nun zwei Bereiche haben und in einem davon tmuxausführen , eine Zeile eingeben und drücken , wird die Zeile in den anderen Bereich eingefügt.trunEnter

Anstelle vimvon .w !bash„invoke“ .w !trunsollte es funktionieren. Binden Sie dies für einen einfachen Zugriff an eine Taste.

Anmerkungen:

  • Das Skript prüft nicht, ob genau zwei Bereiche vorhanden sind.
  • Dem Skript ist es egal, was im Zielbereich ausgeführt wird. Es sendet lediglich Schlüssel.

verwandte Informationen