<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>PSReadLine on kenji.blog</title><link>http://kenji.blog/de/tags/psreadline/</link><description>Recent content in PSReadLine on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>de</language><copyright>kenjinote</copyright><lastBuildDate>Sat, 12 Sep 2026 12:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/de/tags/psreadline/index.xml" rel="self" type="application/rss+xml"/><item><title>Terminal-Effizienz-Shortcuts für Entwickler (PowerShell/Bash)</title><link>http://kenji.blog/de/p/terminal-efficiency-powershell-bash-shortcuts/</link><pubDate>Sat, 12 Sep 2026 12:00:00 +0900</pubDate><guid>http://kenji.blog/de/p/terminal-efficiency-powershell-bash-shortcuts/</guid><description>&lt;img src="http://kenji.blog/p/terminal-efficiency-powershell-bash-shortcuts/img/eyecatch.jpg" alt="Featured image of post Terminal-Effizienz-Shortcuts für Entwickler (PowerShell/Bash)" />&lt;h1 id="einführung-überwältigende-produktivitätssteigerungen-durch-effiziente-terminal-bedienung">Einführung: Überwältigende Produktivitätssteigerungen durch effiziente Terminal-Bedienung
&lt;/h1>&lt;p>In der modernen Softwareentwicklung ist das Terminal (Command Line Interface) das wichtigste Werkzeug, das als die &amp;ldquo;Hände und Füße&amp;rdquo; des Entwicklers fungiert. Es ist keine Übertreibung zu sagen, dass Entwickler den Großteil ihres Tages im Terminal verbringen, sei es für die Verwaltung von Cloud-Infrastrukturen, das Erstellen von Containern, die Versionskontrolle mit Git oder die Ausführung verschiedener Skripte.&lt;/p>
&lt;p>Obwohl viele Entwickler die grundlegenden Befehle des Terminals (&lt;code>cd&lt;/code>, &lt;code>ls&lt;/code>, &lt;code>git&lt;/code>, &lt;code>docker&lt;/code> usw.) beherrschen, übersehen sie oft die Perspektive, &lt;strong>&amp;ldquo;die Eingabe in das Terminal selbst zu optimieren&amp;rdquo;&lt;/strong>. Zur Maus greifen, den Cursor bewegen, wiederholt die Pfeiltasten drücken, um Tippfehler in Befehlen zu korrigieren&amp;hellip; Die Anhäufung dieser kleinen Verluste führt über einen langen Zeitraum zu einer enormen Zeitverschwendung und kognitiven Belastung.&lt;/p>
&lt;p>In diesem Artikel erklären wir sehr detailliert und technisch die Optimierung der Terminal-Bedienung in Bash- und PowerShell-Umgebungen nach der Philosophie &amp;ldquo;Lass die Hände nicht von der Tastatur&amp;rdquo;. Wir behandeln Shortcuts, Tastenkombinationen, Optimierung der Verlaufssuche und die Nutzung von Terminal-Multiplexern, um die Effizienz auf das Maximum zu steigern.&lt;/p>
&lt;hr>
&lt;h1 id="1-theoretischer-hintergrund-keystroke-level-modell-klm-und-die-formulierung-der-zeitlichen-kosten">1. Theoretischer Hintergrund: Keystroke-Level-Modell (KLM) und die Formulierung der zeitlichen Kosten
&lt;/h1>&lt;p>Um die Vorteile der Effizienz quantitativ zu verstehen, betrachten wir das &lt;strong>Keystroke-Level-Modell (KLM)&lt;/strong>, eine Art des &lt;strong>GOMS-Modells&lt;/strong>, das im Bereich der HCI (Human-Computer Interaction) verwendet wird.&lt;/p>
&lt;p>KLM ist ein Modell zur Vorhersage der Zeit, die ein erfahrener Benutzer benötigt, um eine bestimmte, fehlerfreie Aufgabe abzuschließen. Die Ausführungszeit der Aufgabe $T_{execute}$ wird durch die folgende mathematische Gleichung formuliert.&lt;/p>
$$ T_{execute} = \sum_{i} \left( K \cdot t_{k} + P \cdot t_{p} + H \cdot t_{h} + M \cdot t_{m} + R \cdot t_{r} \right) $$&lt;p>Hierbei haben die einzelnen Variablen folgende Bedeutungen:&lt;/p>
&lt;ul>
&lt;li>$K$: Tastenanschlag (Keystroking). Die Aktion, eine Taste auf der Tastatur einmal zu drücken.&lt;/li>
&lt;li>$P$: Zeigen (Pointing). Die Aktion, mit einem Zeigegerät wie einer Maus auf ein Ziel zu zeigen.&lt;/li>
&lt;li>$H$: Umpositionierung (Homing). Die Aktion, die Hände von der Tastatur zur Maus oder umgekehrt zu bewegen.&lt;/li>
&lt;li>$M$: Mentale Vorbereitung (Mental preparation). Die kognitive Denkzeit, um die nächste physische Aktion zu planen und vorzubereiten.&lt;/li>
&lt;li>$R$: Systemantwort (System Response). Die Zeit, die der Benutzer warten muss.&lt;/li>
&lt;/ul>
&lt;p>Die durchschnittliche Zeitdauer ($t$) für jede Aktion wird im Allgemeinen wie folgt geschätzt:&lt;/p>
&lt;ul>
&lt;li>$t_{k} \approx 0.2$ Sekunden (für einen erfahrenen Schreiber)&lt;/li>
&lt;li>$t_{p} \approx 1.1$ Sekunden&lt;/li>
&lt;li>$t_{h} \approx 0.4$ Sekunden&lt;/li>
&lt;li>$t_{m} \approx 1.35$ Sekunden&lt;/li>
&lt;/ul>
&lt;p>Wenn Sie versuchen, einen Teil eines Befehls im Terminal mit den Pfeiltasten oder der Maus zu korrigieren, treten Homing ($H$) und Pointing ($P$) auf, was zu einer Strafe von etwa 1,5 bis 2,0 Sekunden pro Korrektur führt. Andererseits können Sie durch das Erlernen geeigneter Terminal-Shortcuts $H$ und $P$ auf &lt;strong>null&lt;/strong> reduzieren und das Ziel nur mit Tastenanschlägen ($K$) erreichen.&lt;/p>
$$ 500 \text{ mal/Tag} \times 2 \text{ Sekunden} = 1000 \text{ Sekunden/Tag} \approx 16.6 \text{ Minuten/Tag} $$&lt;p>
Wenn wir dies auf ein Jahr (240 Arbeitstage) hochrechnen, bedeutet das eine Zeitersparnis von &lt;strong>etwa 66 Stunden (ca. 8 Arbeitstage)&lt;/strong>. Noch wichtiger ist, dass durch die Reduzierung der mentalen Vorbereitung ($M$) der unschätzbare Vorteil entsteht, &lt;strong>&amp;ldquo;dass das Denken nicht unterbrochen wird (der Flow-Zustand aufrechterhalten werden kann)&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h1 id="2-die-tiefen-von-bash-readline-und-emacs-keybindings">2. Die Tiefen von Bash Readline und Emacs Keybindings
&lt;/h1>&lt;p>Bash, die Standard-Shell von Linux und macOS, verwendet intern die Bibliothek &lt;strong>GNU Readline&lt;/strong> zur Verarbeitung der Kommandozeileneingabe. Die Standardeinstellung dieser Readline sind &lt;strong>Emacs-Keybindings&lt;/strong>, und diese zu meistern ist der erste Schritt zur Steigerung der Terminal-Effizienz.&lt;/p>
&lt;h2 id="21-shortcuts-zur-navigation">2.1. Shortcuts zur Navigation
&lt;/h2>&lt;p>Den Cursor zeichenweise mit den Pfeiltasten zu bewegen, ist der Gipfel der Ineffizienz. Prägen Sie sich die folgenden Shortcuts in Ihr &amp;ldquo;Muskelgedächtnis&amp;rdquo; ein.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;code>Ctrl + A&lt;/code>&lt;/strong>: Zum Anfang der Zeile (Start of line) springen. Wird sehr oft verwendet.&lt;/li>
&lt;li>&lt;strong>&lt;code>Ctrl + E&lt;/code>&lt;/strong>: Zum Ende der Zeile (End of line) springen.&lt;/li>
&lt;li>&lt;strong>&lt;code>Alt + B&lt;/code>&lt;/strong> (Meta+B): Ein Wort zurückspringen (Backward word). Bewegt sich schnell wortweise anhand von Schrägstrichen oder Leerzeichen.&lt;/li>
&lt;li>&lt;strong>&lt;code>Alt + F&lt;/code>&lt;/strong> (Meta+F): Ein Wort vorwärts springen (Forward word).&lt;/li>
&lt;/ul>
&lt;pre class="mermaid">
flowchart LR
Start[&amp;#34;Zeilenanfang (Ctrl+A)&amp;#34;] --- Cursor[&amp;#34;Aktuelle Cursorposition&amp;#34;]
Cursor --- End[&amp;#34;Zeilenende (Ctrl+E)&amp;#34;]
Cursor --&amp;gt; BackwardWord[&amp;#34;Ein Wort zurück (Alt+B)&amp;#34;]
Cursor --&amp;gt; ForwardWord[&amp;#34;Ein Wort vor (Alt+F)&amp;#34;]
&lt;/pre>
&lt;h2 id="22-shortcuts-zur-bearbeitung-kill-und-yank">2.2. Shortcuts zur Bearbeitung (Kill und Yank)
&lt;/h2>&lt;p>Im Emacs-Jargon wird das Ausschneiden (Cut) von Text als &amp;ldquo;Kill&amp;rdquo; und das Einfügen (Paste) als &amp;ldquo;Yank&amp;rdquo; bezeichnet.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;code>Ctrl + U&lt;/code>&lt;/strong>: Den Bereich von der Cursorposition bis zum Zeilenanfang killen (löschen). Dies ermöglicht es Ihnen, den Befehl im Handumdrehen zu löschen, z. B. bei einer falschen Passworteingabe oder wenn Sie den Befehl von Grund auf neu schreiben möchten.&lt;/li>
&lt;li>&lt;strong>&lt;code>Ctrl + K&lt;/code>&lt;/strong>: Den Bereich von der Cursorposition bis zum Zeilenende killen.&lt;/li>
&lt;li>&lt;strong>&lt;code>Ctrl + W&lt;/code>&lt;/strong>: Das vorhergehende Wort ab der Cursorposition killen. Sehr nützlich, wenn Sie ein Argument löschen und neu schreiben müssen.&lt;/li>
&lt;li>&lt;strong>&lt;code>Alt + D&lt;/code>&lt;/strong> (Meta+D): Das folgende Wort ab der Cursorposition killen.&lt;/li>
&lt;li>&lt;strong>&lt;code>Ctrl + Y&lt;/code>&lt;/strong>: Den zuletzt gekillten Inhalt yanken (einfügen). Es ermöglicht fortgeschrittene Anwendungen wie das Wiederherstellen eines mit &lt;code>Ctrl+U&lt;/code> gelöschten Befehls mit &lt;code>Ctrl+Y&lt;/code>, nachdem Sie in ein anderes Verzeichnis gewechselt sind.&lt;/li>
&lt;li>&lt;strong>&lt;code>Ctrl + _&lt;/code>&lt;/strong> (oder &lt;code>Ctrl + x, Ctrl + u&lt;/code>): Rückgängig machen (Undo). Hiermit können Sie etwas wiederherstellen, wenn Sie es versehentlich gelöscht haben.&lt;/li>
&lt;/ul>
&lt;h2 id="23-weitere-wichtige-shortcuts">2.3. Weitere wichtige Shortcuts
&lt;/h2>&lt;ul>
&lt;li>&lt;strong>&lt;code>Ctrl + L&lt;/code>&lt;/strong>: Den Bildschirm leeren (äquivalent zum Befehl &lt;code>clear&lt;/code>).&lt;/li>
&lt;li>&lt;strong>&lt;code>Ctrl + C&lt;/code>&lt;/strong>: Die aktuelle Befehlseingabe abbrechen oder den laufenden Prozess unterbrechen.&lt;/li>
&lt;li>&lt;strong>&lt;code>Ctrl + D&lt;/code>&lt;/strong>: EOF (End Of File) senden. Wenn keine Zeichen eingegeben wurden, wird die Shell beendet (&lt;code>exit&lt;/code>).&lt;/li>
&lt;/ul>
&lt;h2 id="24-anpassung-von-readline-über-inputrc">2.4. Anpassung von Readline über ~/.inputrc
&lt;/h2>&lt;p>Diese Keybindings können durch Bearbeiten der Datei &lt;code>~/.inputrc&lt;/code> im Home-Verzeichnis weiter optimiert werden. Wenn Sie beispielsweise die folgenden Einstellungen hinzufügen, können Sie mit den Pfeiltasten (hoch/runter) nur nach Verläufen suchen, die eine Präfix-Übereinstimmung mit der aktuell eingegebenen Zeichenfolge haben.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Beispielkonfiguration für ~/.inputrc&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&amp;#34;\e[A&amp;#34;&lt;/span>: history-search-backward
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&amp;#34;\e[B&amp;#34;&lt;/span>: history-search-forward
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">set&lt;/span> completion-ignore-case on
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">set&lt;/span> show-all-if-ambiguous on
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Dadurch können Sie schnell durch den Befehlsverlauf blättern, der nur Befehle enthält, die mit &lt;code>docker&lt;/code> beginnen, indem Sie &lt;code>docker &lt;/code> eingeben und dann die Pfeiltaste nach oben drücken.&lt;/p>
&lt;hr>
&lt;h1 id="3-powershell-und-psreadline-bash-ähnliche-bedienung-in-einer-windows-umgebung">3. PowerShell und PSReadLine: Bash-ähnliche Bedienung in einer Windows-Umgebung
&lt;/h1>&lt;p>Die PowerShell, die Standard-Shell unter Windows, verfügte in frühen Versionen nur über eine schwache Eingabeumgebung, die der Eingabeaufforderung (cmd.exe) entsprach. Durch die Einführung des Moduls &lt;strong>PSReadLine&lt;/strong> hat sie jedoch hochentwickelte Funktionen zur Bearbeitung der Kommandozeile erhalten, die mit Bash (Readline) vergleichbar sind oder diese sogar übertreffen.&lt;/p>
&lt;h2 id="31-aktivierung-von-psreadline-und-der-emacs-modus">3.1. Aktivierung von PSReadLine und der Emacs-Modus
&lt;/h2>&lt;p>PSReadLine ist standardmäßig in PowerShell 5.1 und neuer (sowie PowerShell Core) integriert. Damit Windows-Benutzer die Terminal-Produktivität auf Linux-Niveau heben können, ist es unerlässlich, den Bearbeitungsmodus von PSReadLine vom Standard-Windows-Modus (cmd-ähnlich) in den &lt;strong>Emacs-Modus&lt;/strong> zu ändern.&lt;/p>
&lt;p>Bearbeiten Sie das PowerShell-Profil (&lt;code>$PROFILE&lt;/code>), um die Einstellungen automatisch zu laden.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Öffnen Sie $PROFILE in VS Code&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">code&lt;/span> &lt;span class="nv">$PROFILE&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Fügen Sie die folgenden Einstellungen zu &lt;code>$PROFILE&lt;/code> hinzu:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Importieren des PSReadLine-Moduls (falls explizit gewünscht)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Import-Module&lt;/span> &lt;span class="n">PSReadLine&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Setzen des Bearbeitungsmodus auf Emacs und Aktivieren der gleichen Shortcuts wie in Bash&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Set-PSReadLineOption&lt;/span> &lt;span class="n">-EditMode&lt;/span> &lt;span class="n">Emacs&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Den Klingelton (Fehlerton) ignorieren&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Set-PSReadLineOption&lt;/span> &lt;span class="n">-BellStyle&lt;/span> &lt;span class="n">None&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Nun funktionieren Emacs/Bash-artige Keybindings wie &lt;code>Ctrl+A&lt;/code> (Zeilenanfang), &lt;code>Ctrl+E&lt;/code> (Zeilenende), &lt;code>Ctrl+U&lt;/code> (Löschen bis zum Zeilenanfang) und &lt;code>Alt+B&lt;/code> / &lt;code>Alt+F&lt;/code> (wortweise Navigation) auch in der Windows PowerShell perfekt.&lt;/p>
&lt;h2 id="32-predictive-intellisense-und-erweiterte-verlaufssuche">3.2. Predictive IntelliSense und erweiterte Verlaufssuche
&lt;/h2>&lt;p>Eine der stärksten Funktionen von PSReadLine ist das &lt;strong>Predictive IntelliSense&lt;/strong>, das auf dem Eingabeverlauf oder externen Vorhersage-Plugins basiert. Wenn Sie mit der Eingabe beginnen, wird der wahrscheinlichste vollständige Befehl aus dem bisherigen Verlauf in hellem Grau (Inline) vorgeschlagen. Wenn Sie den Vorschlag akzeptieren möchten, drücken Sie einfach die rechte Pfeiltaste (oder &lt;code>Alt+F&lt;/code> für wortweise Übernahme).&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Zu $PROFILE hinzufügen: Aktivierung der Vorhersagefunktion (erfordert PowerShell 7.1+ / PSReadLine 2.1+)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Set-PSReadLineOption&lt;/span> &lt;span class="n">-PredictionSource&lt;/span> &lt;span class="nb">History
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Set-PSReadLineOption&lt;/span> &lt;span class="n">-PredictionViewStyle&lt;/span> &lt;span class="n">InlineView&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Wenn Sie es im Listenformat anzeigen möchten, geben Sie ListView an&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Set-PSReadLineOption -PredictionViewStyle ListView&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="33-überschreiben-des-verhaltens-der-pfeiltasten-nach-obenunten-bash-ähnliche-präfixsuche">3.3. Überschreiben des Verhaltens der Pfeiltasten nach oben/unten (Bash-ähnliche Präfixsuche)
&lt;/h2>&lt;p>Die standardmäßigen Aufwärts-/Abwärtspfeiltasten in PowerShell bewegen sich einfach sequenziell durch den Verlauf. Wir weisen diese neu zu, um die Funktion &amp;ldquo;Verlaufssuche mit Präfix-Übereinstimmung der aktuell eingegebenen Zeichenfolge&amp;rdquo; abzubilden, ähnlich wie bei der zuvor erwähnten &lt;code>~/.inputrc&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Zu $PROFILE hinzufügen: Registrierung von Handlern für die Präfixsuche im Verlauf&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Set-PSReadLineKeyHandler&lt;/span> &lt;span class="n">-Key&lt;/span> &lt;span class="n">UpArrow&lt;/span> &lt;span class="n">-Function&lt;/span> &lt;span class="n">HistorySearchBackward&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Set-PSReadLineKeyHandler&lt;/span> &lt;span class="n">-Key&lt;/span> &lt;span class="n">DownArrow&lt;/span> &lt;span class="n">-Function&lt;/span> &lt;span class="n">HistorySearchForward&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Dadurch können Sie selbst in einer Windows-Umgebung intuitiv Befehle erstellen, suchen und ausführen, und zwar mit genau denselben Fingerbewegungen wie in einer Linux-Umgebung. Die plattformübergreifende Vereinheitlichung der kognitiven Belastung ($M$) ist für DevOps-Ingenieure äußerst wichtig.&lt;/p>
&lt;hr>
&lt;h1 id="4-der-höhepunkt-der-verlaufssuche-die-integration-von-fzf-fuzzy-finder">4. Der Höhepunkt der Verlaufssuche: Die Integration von fzf (Fuzzy Finder)
&lt;/h1>&lt;p>Eine der häufigsten Aktionen bei der Terminal-Bedienung ist das &lt;strong>&amp;ldquo;Suchen und erneute Ausführen eines komplexen Befehls, der in der Vergangenheit aus dem Verlauf ausgeführt wurde&amp;rdquo;&lt;/strong>. Da das standardmäßige &lt;code>Ctrl+R&lt;/code> (Reverse Search) eine exakte Suche ist, ist es schwierig, Befehle aus einer vagen Erinnerung wie &amp;ldquo;Ich glaube, ich habe mit docker run ein Volume gemountet&amp;hellip;&amp;rdquo; abzurufen.&lt;/p>
&lt;p>Eine elegante Lösung für dieses Problem ist das in Go geschriebene, ultraschnelle, universelle Fuzzy-Suchwerkzeug &lt;strong>&lt;code>fzf&lt;/code>&lt;/strong>.&lt;/p>
&lt;h2 id="41-die-pipeline-der-fuzzy-suche-mit-fzf">4.1. Die Pipeline der Fuzzy-Suche mit fzf
&lt;/h2>&lt;p>Wenn &lt;code>fzf&lt;/code> in die Suche des Befehlsverlaufs integriert wird, läuft die Verarbeitung in der folgenden Pipeline ab.&lt;/p>
&lt;pre class="mermaid">
flowchart TD
A[&amp;#34;Benutzereingabe (Ctrl+R)&amp;#34;] --&amp;gt; B[&amp;#34;fzf fängt den Tastendruck ab&amp;#34;]
B --&amp;gt; C[&amp;#34;Lesen der .bash_history oder PSReadLine-Verlaufsdatei&amp;#34;]
C --&amp;gt; D{&amp;#34;Fuzzy Match Engine (Go)&amp;#34;}
D --&amp;gt; E[&amp;#34;Aktualisierung der interaktiven Auswahl-UI im Terminal&amp;#34;]
E --&amp;gt; F[&amp;#34;Benutzer wählt einen Befehl aus (Enter)&amp;#34;]
F --&amp;gt; G[&amp;#34;Gewählten Befehl an den Shell-Puffer zurückgeben&amp;#34;]
G --&amp;gt; H[&amp;#34;Befehl ausführen oder bearbeiten&amp;#34;]
&lt;/pre>
&lt;p>Wenn ein Benutzer mehrere durch Leerzeichen getrennte Schlüsselwörter (z. B. &lt;code>docker ubuntu bash&lt;/code>) eingibt, scannt die Matching-Engine von fzf sofort die gesamte Verlaufsdatei und listet Verläufe auf, die diese Schlüsselwörter in beliebiger Reihenfolge und auch an getrennten Positionen enthalten.&lt;/p>
&lt;h2 id="42-fzf-integration-in-bash">4.2. fzf-Integration in Bash
&lt;/h2>&lt;p>In Linux-Umgebungen wie Ubuntu/Debian kann es einfach über apt installiert werden. Darüber hinaus können durch Ausführen des Installationsskripts die Bash-Keybindings automatisch überschrieben werden.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># fzf installieren&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git clone --depth &lt;span class="m">1&lt;/span> https://github.com/junegunn/fzf.git ~/.fzf
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">~/.fzf/install
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Wenn Sie nun &lt;code>Ctrl+R&lt;/code> drücken, öffnet sich die interaktive Benutzeroberfläche von fzf im Vollbildmodus (oder innerhalb eines tmux-Panels) und ermöglicht Ihnen eine äußerst intuitive Suche in der Historie. Auf der Such-UI können Sie mit &lt;code>Ctrl+N&lt;/code> (unten) / &lt;code>Ctrl+P&lt;/code> (oben) Elemente auswählen.&lt;/p>
&lt;h2 id="43-psfzf-integration-in-powershell">4.3. PSFzf-Integration in PowerShell
&lt;/h2>&lt;p>Auch in der Windows PowerShell-Umgebung können Sie mit dem Modul &lt;code>PSFzf&lt;/code> genau die gleiche Erfahrung machen. Installieren Sie zunächst das fzf-Binary (z. B. bequem mit Scoop) und fügen Sie das Modul hinzu.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Installieren des fzf-Binaries mit Scoop&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">scoop&lt;/span> &lt;span class="n">install&lt;/span> &lt;span class="n">fzf&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Installation des PSFzf-Moduls&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Install-Module&lt;/span> &lt;span class="n">-Name&lt;/span> &lt;span class="n">PSFzf&lt;/span> &lt;span class="n">-Scope&lt;/span> &lt;span class="n">CurrentUser&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Fügen Sie dann die Einstellungen zu &lt;code>$PROFILE&lt;/code> hinzu, um die Tasten zu binden.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Zu $PROFILE hinzufügen&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Import-Module&lt;/span> &lt;span class="n">PSFzf&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Ctrl+R der fzf-Verlaufssuche zuweisen&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Set-PsFzfOption&lt;/span> &lt;span class="n">-PSReadlineChordReverseHistorySearch&lt;/span> &lt;span class="s1">&amp;#39;Ctrl+r&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Damit ist auch unter Windows mit &lt;code>Ctrl+R&lt;/code> im Handumdrehen eine Fuzzy-Suche im riesigen PowerShell-Verlauf der Vergangenheit möglich.&lt;/p>
&lt;hr>
&lt;h1 id="5-minimierung-der-tastenanschläge-durch-aliase-und-wrapper-funktionen">5. Minimierung der Tastenanschläge durch Aliase und Wrapper-Funktionen
&lt;/h1>&lt;p>Neben Shortcuts und Verlaufssuchen ist die direkteste Methode, die Tastenanschläge ($K$) selbst zu reduzieren, die Definition von Aliasen und Wrapper-Funktionen.&lt;/p>
&lt;h2 id="51-minimierung-von-git-operationen">5.1. Minimierung von Git-Operationen
&lt;/h2>&lt;p>Git wird jeden Tag unzählige Male verwendet. Jedes Mal &lt;code>git status&lt;/code> oder &lt;code>git commit&lt;/code> voll auszuschreiben, ist nach dem KLM-Modell eine große Verschwendung.&lt;/p>
&lt;p>&lt;strong>Beispiel für Bash (&lt;code>~/.bashrc&lt;/code>)&lt;/strong>:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">alias&lt;/span> &lt;span class="nv">g&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;git&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">alias&lt;/span> &lt;span class="nv">gs&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;git status -sb&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">alias&lt;/span> &lt;span class="nv">ga&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;git add&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">alias&lt;/span> &lt;span class="nv">gc&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;git commit -m&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">alias&lt;/span> &lt;span class="nv">gco&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;git checkout&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">alias&lt;/span> &lt;span class="nv">gp&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;git push&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">alias&lt;/span> &lt;span class="nv">gl&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;git log --oneline --graph --decorate --all&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;strong>Beispiel für PowerShell (&lt;code>$PROFILE&lt;/code>)&lt;/strong>:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Set-Alias&lt;/span> &lt;span class="n">-Name&lt;/span> &lt;span class="n">g&lt;/span> &lt;span class="n">-Value&lt;/span> &lt;span class="n">git&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kd">function&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nb">gs&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="n">git&lt;/span> &lt;span class="n">status&lt;/span> &lt;span class="n">-sb&lt;/span> &lt;span class="nv">$args&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kd">function&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nb">ga&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="n">git&lt;/span> &lt;span class="n">add&lt;/span> &lt;span class="nv">$args&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kd">function&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nb">gc&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="n">git&lt;/span> &lt;span class="n">commit&lt;/span> &lt;span class="n">-m&lt;/span> &lt;span class="nv">$args&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kd">function&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nb">gco&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="n">git&lt;/span> &lt;span class="n">checkout&lt;/span> &lt;span class="nv">$args&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kd">function&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nb">gl&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="n">git&lt;/span> &lt;span class="n">log&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-oneline&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-graph&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-decorate&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-all&lt;/span> &lt;span class="nv">$args&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;em>Da &lt;code>Set-Alias&lt;/code> in PowerShell keine Argumente festlegen kann, ist es Best Practice, Aliase mit Optionen wie oben gezeigt als Funktionen (function) zu definieren.&lt;/em>&lt;/p>
&lt;h2 id="52-optimierung-der-verzeichnisnavigation-z--zoxide">5.2. Optimierung der Verzeichnisnavigation (z / zoxide)
&lt;/h2>&lt;p>In tief verschachtelte Verzeichnisse mit dem Befehl &lt;code>cd&lt;/code> zu wechseln, ist mühsam. In den letzten Jahren hat sich &lt;strong>&lt;code>zoxide&lt;/code>&lt;/strong> (in Rust geschrieben) zum Standard entwickelt. Es lernt den Navigationsverlauf und die Häufigkeit (Frecency: Frequency + Recency) des Benutzers und ermöglicht den Sprung zum Zielverzeichnis durch Eingabe nur eines Teils des Pfades.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Nach der Installation von zoxide, z anstelle von cd verwenden&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">z proj &lt;span class="c1"># Springt sofort nach /home/user/workspace/projects/&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>zoxide unterstützt Bash, Zsh und PowerShell und bietet plattformübergreifend dieselbe schnelle Verzeichnisnavigation.&lt;/p>
&lt;hr>
&lt;h1 id="6-terminal-multiplexer-und-fensterverwaltung">6. Terminal-Multiplexer und Fensterverwaltung
&lt;/h1>&lt;p>Wenn Sie einen Prozess (z. B. einen lokalen Server) in einem Terminalfenster starten, müssen Sie ein neues Terminalfenster öffnen, um andere Arbeiten auszuführen. Das Umschalten von Fenstern (&lt;code>Alt+Tab&lt;/code>) erfordert eine Blickbewegung und führt zu Kosten für Kontextwechsel (Erhöhung der mentalen Vorbereitung $M$).&lt;/p>
&lt;p>Um dies zu lösen, verwenden Sie einen &lt;strong>Terminal-Multiplexer&lt;/strong>, der den Bildschirm in mehrere Bereiche (Panes) aufteilt und mehrere Sitzungen im Hintergrund aufrechterhalten kann.&lt;/p>
&lt;h2 id="61-tmux-architektur-und-zustandsübergänge-linux--macos">6.1. tmux-Architektur und Zustandsübergänge (Linux / macOS)
&lt;/h2>&lt;p>&lt;code>tmux&lt;/code> ist ein leistungsstarker Multiplexer mit einer Server-Client-Architektur. Um Konflikte mit anderen Programmen zu vermeiden, müssen Sie bei der Bedienung von tmux immer zuerst eine &lt;strong>Präfixtaste (Standard: Ctrl+B)&lt;/strong> drücken.&lt;/p>
&lt;p>Das folgende Mermaid-Zustandsübergangsdiagramm zeigt den grundlegenden Arbeitsablauf bei der Bedienung von tmux.&lt;/p>
&lt;pre class="mermaid">
stateDiagram-v2
[*] --&amp;gt; Normal[&amp;#34;Normaler Modus&amp;#34;]
Normal --&amp;gt; Prefix[&amp;#34;Präfix-Modus (Ctrl+B)&amp;#34;]
Prefix --&amp;gt; Command[&amp;#34;Kommandozeile (:)&amp;#34;]
Prefix --&amp;gt; SplitV[&amp;#34;Fenster vertikal teilen (%)&amp;#34;]
Prefix --&amp;gt; SplitH[&amp;#34;Fenster horizontal teilen (\&amp;#34;)&amp;#34;]
Prefix --&amp;gt; Switch[&amp;#34;Fenster wechseln (n/p/0-9)&amp;#34;]
Prefix --&amp;gt; Detach[&amp;#34;Sitzung trennen (d)&amp;#34;]
Command --&amp;gt; Normal[&amp;#34;tmux-Befehl ausführen&amp;#34;]
SplitV --&amp;gt; Normal[&amp;#34;Zum normalen Modus zurückkehren&amp;#34;]
SplitH --&amp;gt; Normal[&amp;#34;Zum normalen Modus zurückkehren&amp;#34;]
Switch --&amp;gt; Normal[&amp;#34;Zum normalen Modus zurückkehren&amp;#34;]
Detach --&amp;gt; [*]
&lt;/pre>
&lt;p>Es ist gängige Praxis, die &lt;code>~/.tmux.conf&lt;/code> zu bearbeiten, um die Präfixtaste auf ein leichter zu drückendes &lt;code>Ctrl+A&lt;/code> (wie bei GNU Screen) zu ändern und die Fensterbewegung an ein Vim-artiges &lt;code>hjkl&lt;/code> zu binden.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"># Beispiel für ~/.tmux.conf
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"># Präfix auf Ctrl-a ändern
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">set -g prefix C-a
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">unbind C-b
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">bind C-a send-prefix
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"># Intuitive Tasten für die Fensterteilung
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">bind | split-window -h
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">bind - split-window -v
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"># Vim-artige Fensterbewegung
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">bind h select-pane -L
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">bind j select-pane -D
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">bind k select-pane -U
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">bind l select-pane -R
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="62-fensterverwaltung-mit-dem-windows-terminal">6.2. Fensterverwaltung mit dem Windows Terminal
&lt;/h2>&lt;p>In einer Windows-Umgebung unterstützt das neueste &lt;strong>Windows Terminal&lt;/strong> standardmäßig eine Funktion zur Fensteraufteilung. Es gibt zwar keine Funktion zur Sitzungspersistenz wie bei tmux, aber Sie können Bereiche problemlos über die GUI verwalten. Durch Öffnen der Einstellungen (&lt;code>settings.json&lt;/code>) und Anpassen der Aktionen können Sie Operationen ausführen, die ausschließlich über die Tastatur abgewickelt werden.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// Teil von Windows Terminal settings.json
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="s2">&amp;#34;actions&amp;#34;&lt;/span>&lt;span class="err">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span> &lt;span class="nt">&amp;#34;command&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nt">&amp;#34;action&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;splitPane&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;split&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;auto&amp;#34;&lt;/span> &lt;span class="p">},&lt;/span> &lt;span class="nt">&amp;#34;keys&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;alt+shift+d&amp;#34;&lt;/span> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span> &lt;span class="nt">&amp;#34;command&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nt">&amp;#34;action&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;moveFocus&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;direction&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;left&amp;#34;&lt;/span> &lt;span class="p">},&lt;/span> &lt;span class="nt">&amp;#34;keys&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;alt+left&amp;#34;&lt;/span> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span> &lt;span class="nt">&amp;#34;command&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nt">&amp;#34;action&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;moveFocus&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;direction&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;right&amp;#34;&lt;/span> &lt;span class="p">},&lt;/span> &lt;span class="nt">&amp;#34;keys&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;alt+right&amp;#34;&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Dadurch wird der Bildschirm einfach durch Drücken von &lt;code>Alt+Shift+D&lt;/code> innerhalb von PowerShell geteilt, und Sie können nahtlos zwischen den Fenstern wechseln, indem Sie die Pfeiltasten in Kombination mit &lt;code>Alt&lt;/code> verwenden.&lt;/p>
&lt;hr>
&lt;h1 id="7-beispiel-für-den-aufbau-eines-praktischen-workflows">7. Beispiel für den Aufbau eines praktischen Workflows
&lt;/h1>&lt;p>Durch die Kombination der bisher vorgestellten Elemente (Emacs-Keybindings, PSReadLine, fzf, Aliase, Multiplexer) werden alltägliche Aufgaben drastisch beschleunigt.&lt;/p>
&lt;p>Nehmen wir beispielsweise die Aufgabe: &amp;ldquo;Bei der Fehlerbehebung Server-Logs prüfen und gleichzeitig die Commit-Historie des entsprechenden Codes mit Git untersuchen&amp;rdquo;.&lt;/p>
&lt;ol>
&lt;li>Öffnen Sie das Terminal und tippen Sie &lt;code>z prod&lt;/code>, um sofort zum Arbeitsverzeichnis der Produktionsumgebung zu wechseln.&lt;/li>
&lt;li>Drücken Sie &lt;code>Ctrl+R&lt;/code>, tippen Sie im Popup von &lt;code>fzf&lt;/code> &lt;code>ssh auth&lt;/code> ein, rufen Sie einen komplexen SSH-Login-Befehl aus der Vergangenheit ab und führen Sie ihn aus.&lt;/li>
&lt;li>Führen Sie &lt;code>Ctrl+B&lt;/code> &lt;code>|&lt;/code> (tmux-Fensterteilung) aus und führen Sie im rechten Fenster &lt;code>gs&lt;/code> (git status) etc. aus, um den Code zu überprüfen.&lt;/li>
&lt;li>Wenn Sie im linken Fenster in der Log-Ausgabe einen Fehler finden, rufen Sie mit &lt;code>Ctrl+B&lt;/code> &lt;code>[&lt;/code> den Kopiermodus auf und yanken die Fehlermeldung nur mit der Tastatur.&lt;/li>
&lt;li>Fügen Sie sie in Ihren Editor ein und ermitteln Sie die Ursache.&lt;/li>
&lt;/ol>
&lt;p>Bei dieser Abfolge von Aktionen &lt;strong>müssen Sie die Maus kein einziges Mal berühren&lt;/strong>. $H$ (Homing) und $P$ (Pointing) in der KLM-Gleichung werden vollständig eliminiert, und die Terminal-Bedienung kann der Geschwindigkeit Ihrer Gedanken perfekt folgen.&lt;/p>
&lt;hr>
&lt;h1 id="zusammenfassung">Zusammenfassung
&lt;/h1>&lt;p>In diesem Artikel haben wir die &amp;ldquo;Effizienz der Terminal-Bedienung&amp;rdquo;, die die Produktivität von Entwicklern bestimmt, sehr detailliert erläutert: von der KLM-Theorie über konkrete Bash/PowerShell-Keybindings bis hin zur Integration von fzf und tmux.&lt;/p>
&lt;p>Anfangs kann es stressig sein, bewusst &lt;code>Ctrl+A&lt;/code> oder &lt;code>Ctrl+E&lt;/code> zu drücken. Wenn Sie diese Shortcuts jedoch einige Wochen lang bewusst verwenden, werden sie sich sicher in Ihrem &lt;strong>Muskelgedächtnis&lt;/strong> festsetzen. Sobald sie sich gefestigt haben, werden Sie das Terminal unbewusst und frei bedienen können, was zu einem lebenslangen Gut wird, das Ihre Developer Experience (DX) drastisch verbessert.&lt;/p>
&lt;p>Öffnen Sie noch heute &lt;code>$PROFILE&lt;/code> oder &lt;code>~/.bashrc&lt;/code> und beginnen Sie mit dem Aufbau der ultimativen Terminal-Umgebung, die am besten in Ihre eigenen Hände passt.&lt;/p></description></item></channel></rss>