<?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/fr/tags/psreadline/</link><description>Recent content in PSReadLine on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>kenjinote</copyright><lastBuildDate>Sat, 12 Sep 2026 12:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/fr/tags/psreadline/index.xml" rel="self" type="application/rss+xml"/><item><title>Raccourcis de terminal (PowerShell/Bash) pour la productivité des développeurs</title><link>http://kenji.blog/fr/p/terminal-efficiency-powershell-bash-shortcuts/</link><pubDate>Sat, 12 Sep 2026 12:00:00 +0900</pubDate><guid>http://kenji.blog/fr/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 Raccourcis de terminal (PowerShell/Bash) pour la productivité des développeurs" />&lt;h1 id="introduction--lamélioration-phénoménale-de-la-productivité-grâce-à-loptimisation-des-opérations-du-terminal">Introduction : L&amp;rsquo;amélioration phénoménale de la productivité grâce à l&amp;rsquo;optimisation des opérations du terminal
&lt;/h1>&lt;p>Dans le développement logiciel moderne, le terminal (interface en ligne de commande) est l&amp;rsquo;outil le plus important, agissant comme les « mains et les pieds » du développeur. La gestion de l&amp;rsquo;infrastructure cloud, la compilation de conteneurs, le contrôle de version avec Git, l&amp;rsquo;exécution de divers scripts&amp;hellip; Il n&amp;rsquo;est pas exagéré de dire que les développeurs passent la majeure partie de leur journée sur le terminal.&lt;/p>
&lt;p>Cependant, bien que de nombreux développeurs maîtrisent les commandes de base du terminal (comme &lt;code>cd&lt;/code>, &lt;code>ls&lt;/code>, &lt;code>git&lt;/code>, &lt;code>docker&lt;/code>, etc.), ils ont souvent tendance à négliger l&amp;rsquo;aspect &lt;strong>« optimisation de la saisie elle-même dans le terminal »&lt;/strong>. Attraper la souris, déplacer le curseur, appuyer de manière répétée sur les touches fléchées pour corriger une faute de frappe dans une commande&amp;hellip; L&amp;rsquo;accumulation de ces petites pertes entraîne un gaspillage de temps énorme et une charge cognitive importante sur le long terme.&lt;/p>
&lt;p>Dans cet article, basé sur la philosophie de « ne jamais quitter le clavier des mains », nous expliquerons de manière très détaillée et technique comment optimiser à l&amp;rsquo;extrême les opérations du terminal dans les environnements Bash et PowerShell, grâce aux raccourcis, aux configurations de raccourcis clavier (keybindings), à l&amp;rsquo;optimisation de la recherche dans l&amp;rsquo;historique et à l&amp;rsquo;utilisation des multiplexeurs de terminaux.&lt;/p>
&lt;hr>
&lt;h1 id="1-contexte-théorique--modèle-klm-keystroke-level-model-et-formulation-du-coût-temporel">1. Contexte théorique : Modèle KLM (Keystroke-Level Model) et formulation du coût temporel
&lt;/h1>&lt;p>Pour comprendre de manière quantitative les avantages de l&amp;rsquo;optimisation, introduisons le &lt;strong>Keystroke-Level Model (KLM)&lt;/strong>, une variante du &lt;strong>modèle GOMS&lt;/strong> utilisé dans le domaine de l&amp;rsquo;IHM (Interaction Homme-Machine).&lt;/p>
&lt;p>KLM est un modèle permettant de prédire le temps nécessaire à un utilisateur expert pour accomplir une tâche spécifique sans erreur. Le temps d&amp;rsquo;exécution de la tâche $T_{execute}$ est formulé par l&amp;rsquo;équation mathématique suivante :&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>Ici, chaque variable a la signification suivante :&lt;/p>
&lt;ul>
&lt;li>$K$ : Frappe au clavier (Keystroking). L&amp;rsquo;action d&amp;rsquo;appuyer une fois sur une touche du clavier.&lt;/li>
&lt;li>$P$ : Pointage (Pointing). L&amp;rsquo;action de pointer vers une cible avec un dispositif de pointage comme une souris.&lt;/li>
&lt;li>$H$ : Repositionnement (Homing). L&amp;rsquo;action de déplacer les mains du clavier vers la souris, ou vice versa.&lt;/li>
&lt;li>$M$ : Préparation mentale (Mental preparation). Le temps de réflexion cognitive nécessaire pour planifier et préparer l&amp;rsquo;action physique suivante.&lt;/li>
&lt;li>$R$ : Réponse du système (System Response). Le temps pendant lequel l&amp;rsquo;utilisateur doit attendre.&lt;/li>
&lt;/ul>
&lt;p>Le temps moyen requis pour chaque action ($t$) est généralement estimé comme suit :&lt;/p>
&lt;ul>
&lt;li>$t_{k} \approx 0.2$ seconde (pour un dactylographe expert)&lt;/li>
&lt;li>$t_{p} \approx 1.1$ secondes&lt;/li>
&lt;li>$t_{h} \approx 0.4$ seconde&lt;/li>
&lt;li>$t_{m} \approx 1.35$ secondes&lt;/li>
&lt;/ul>
&lt;p>Lorsque vous essayez de corriger une partie d&amp;rsquo;une commande à l&amp;rsquo;aide des touches fléchées ou de la souris dans le terminal, le repositionnement ($H$) et le pointage ($P$) se produisent, entraînant une pénalité d&amp;rsquo;environ 1,5 à 2,0 secondes par correction. En revanche, si vous maîtrisez les raccourcis de terminal appropriés, vous pouvez réduire $H$ et $P$ à &lt;strong>zéro&lt;/strong> et atteindre votre objectif en utilisant uniquement des frappes au clavier ($K$).&lt;/p>
$$ 500 \text{ fois/jour} \times 2 \text{ secondes} = 1000 \text{ secondes/jour} \approx 16.6 \text{ minutes/jour} $$&lt;p>
Converti sur une année (240 jours ouvrables), cela représente une économie de temps d&amp;rsquo;&lt;strong>environ 66 heures (soit environ 8 jours de travail)&lt;/strong>. Plus important encore, la réduction de la préparation mentale ($M$) offre l&amp;rsquo;avantage inestimable de &lt;strong>« ne pas interrompre la pensée (maintenir l&amp;rsquo;état de flow) »&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h1 id="2-les-profondeurs-de-bash-readline-et-des-raccourcis-clavier-emacs">2. Les profondeurs de Bash Readline et des raccourcis clavier Emacs
&lt;/h1>&lt;p>Bash, le shell standard sous Linux et macOS, utilise en interne une bibliothèque appelée &lt;strong>GNU Readline&lt;/strong> pour gérer la saisie en ligne de commande. La configuration par défaut de ce Readline utilise les &lt;strong>raccourcis clavier Emacs&lt;/strong>. Les maîtriser est la première étape vers l&amp;rsquo;optimisation du terminal.&lt;/p>
&lt;h2 id="21-raccourcis-de-déplacement">2.1. Raccourcis de déplacement
&lt;/h2>&lt;p>Déplacer le curseur caractère par caractère avec les touches fléchées est le comble de l&amp;rsquo;inefficacité. Gravez les raccourcis suivants dans votre « mémoire musculaire ».&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;code>Ctrl + A&lt;/code>&lt;/strong> : Se déplacer au début de la ligne (Start of line). Très fréquemment utilisé.&lt;/li>
&lt;li>&lt;strong>&lt;code>Ctrl + E&lt;/code>&lt;/strong> : Se déplacer à la fin de la ligne (End of line).&lt;/li>
&lt;li>&lt;strong>&lt;code>Alt + B&lt;/code>&lt;/strong> (Meta+B) : Reculer d&amp;rsquo;un mot (Backward word). Permet de se déplacer rapidement mot par mot en utilisant les barres obliques (slash) et les espaces comme séparateurs.&lt;/li>
&lt;li>&lt;strong>&lt;code>Alt + F&lt;/code>&lt;/strong> (Meta+F) : Avancer d&amp;rsquo;un mot (Forward word).&lt;/li>
&lt;/ul>
&lt;pre class="mermaid">
flowchart LR
Start[&amp;#34;Début de la ligne (Ctrl+A)&amp;#34;] --- Cursor[&amp;#34;Position actuelle du curseur&amp;#34;]
Cursor --- End[&amp;#34;Fin de la ligne (Ctrl+E)&amp;#34;]
Cursor --&amp;gt; BackwardWord[&amp;#34;Mot précédent (Alt+B)&amp;#34;]
Cursor --&amp;gt; ForwardWord[&amp;#34;Mot suivant (Alt+F)&amp;#34;]
&lt;/pre>
&lt;h2 id="22-raccourcis-dédition-kill-et-yank">2.2. Raccourcis d&amp;rsquo;édition (Kill et Yank)
&lt;/h2>&lt;p>Dans le vocabulaire d&amp;rsquo;Emacs, couper du texte est appelé « Kill » (Tuer), et coller est appelé « Yank » (Tirer).&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;code>Ctrl + U&lt;/code>&lt;/strong> : Couper (Kill) de la position du curseur jusqu&amp;rsquo;au début de la ligne. Permet d&amp;rsquo;effacer instantanément en cas d&amp;rsquo;erreur de frappe de mot de passe ou si vous souhaitez réécrire la commande depuis le début.&lt;/li>
&lt;li>&lt;strong>&lt;code>Ctrl + K&lt;/code>&lt;/strong> : Couper de la position du curseur jusqu&amp;rsquo;à la fin de la ligne.&lt;/li>
&lt;li>&lt;strong>&lt;code>Ctrl + W&lt;/code>&lt;/strong> : Couper le mot précédent depuis la position du curseur. Très pratique pour effacer un argument et le réécrire.&lt;/li>
&lt;li>&lt;strong>&lt;code>Alt + D&lt;/code>&lt;/strong> (Meta+D) : Couper le mot suivant depuis la position du curseur.&lt;/li>
&lt;li>&lt;strong>&lt;code>Ctrl + Y&lt;/code>&lt;/strong> : Coller (Yank) le dernier contenu coupé. Il est possible de faire des utilisations avancées, comme effacer une commande avec &lt;code>Ctrl+U&lt;/code>, se déplacer vers un autre répertoire, puis ressusciter la commande avec &lt;code>Ctrl+Y&lt;/code>.&lt;/li>
&lt;li>&lt;strong>&lt;code>Ctrl + _&lt;/code>&lt;/strong> (ou &lt;code>Ctrl + x, Ctrl + u&lt;/code>) : Annuler (Undo). Permet de restaurer ce qui a été effacé par erreur.&lt;/li>
&lt;/ul>
&lt;h2 id="23-autres-raccourcis-importants">2.3. Autres raccourcis importants
&lt;/h2>&lt;ul>
&lt;li>&lt;strong>&lt;code>Ctrl + L&lt;/code>&lt;/strong> : Effacer l&amp;rsquo;écran (équivalent à la commande &lt;code>clear&lt;/code>).&lt;/li>
&lt;li>&lt;strong>&lt;code>Ctrl + C&lt;/code>&lt;/strong> : Annuler la saisie de la commande en cours, ou interrompre le processus en cours d&amp;rsquo;exécution.&lt;/li>
&lt;li>&lt;strong>&lt;code>Ctrl + D&lt;/code>&lt;/strong> : Envoyer un EOF (End Of File). S&amp;rsquo;il n&amp;rsquo;y a aucun caractère saisi, cela ferme le shell (&lt;code>exit&lt;/code>).&lt;/li>
&lt;/ul>
&lt;h2 id="24-personnalisation-de-readline-via-inputrc">2.4. Personnalisation de Readline via ~/.inputrc
&lt;/h2>&lt;p>Ces raccourcis clavier peuvent être encore optimisés en éditant le fichier &lt;code>~/.inputrc&lt;/code> dans votre répertoire personnel. Par exemple, en ajoutant les paramètres suivants, vous pouvez utiliser les touches haut et bas pour rechercher uniquement dans l&amp;rsquo;historique correspondant au préfixe de la chaîne en cours de saisie.&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"># Exemple de configuration de ~/.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>Ainsi, si vous tapez &lt;code>docker &lt;/code> puis appuyez sur la flèche vers le haut, vous pourrez parcourir très rapidement uniquement les commandes de votre historique commençant par &lt;code>docker&lt;/code>.&lt;/p>
&lt;hr>
&lt;h1 id="3-powershell-et-psreadline--des-opérations-de-type-bash-sous-windows">3. PowerShell et PSReadLine : Des opérations de type Bash sous Windows
&lt;/h1>&lt;p>Dans ses premières versions, PowerShell, le shell standard sous Windows, ne disposait que d&amp;rsquo;un environnement de saisie médiocre équivalent à l&amp;rsquo;invite de commande (cmd.exe). Cependant, avec l&amp;rsquo;introduction du module &lt;strong>PSReadLine&lt;/strong>, il a acquis des fonctionnalités avancées d&amp;rsquo;édition en ligne de commande comparables, voire supérieures, à Bash (Readline).&lt;/p>
&lt;h2 id="31-activation-de-psreadline-et-mode-emacs">3.1. Activation de PSReadLine et mode Emacs
&lt;/h2>&lt;p>PSReadLine est intégré par défaut dans PowerShell 5.1 et versions ultérieures (ainsi que PowerShell Core). Pour que les utilisateurs de Windows puissent élever la productivité de leur terminal au niveau de Linux, il est impératif de changer le mode d&amp;rsquo;édition de PSReadLine du mode Windows par défaut (type cmd) au &lt;strong>mode Emacs&lt;/strong>.&lt;/p>
&lt;p>Éditez votre profil PowerShell (&lt;code>$PROFILE&lt;/code>) pour charger automatiquement ces paramètres.&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"># Ouvrir $PROFILE dans 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>Ajoutez la configuration suivante dans &lt;code>$PROFILE&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;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"># Importation du module PSReadLine (si fait explicitement)&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"># Définir le mode d&amp;#39;édition sur Emacs et activer les mêmes raccourcis que 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"># Ignorer le son de cloche (son d&amp;#39;erreur)&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>Avec cela, les raccourcis de style Emacs/Bash comme &lt;code>Ctrl+A&lt;/code> (début de ligne), &lt;code>Ctrl+E&lt;/code> (fin de ligne), &lt;code>Ctrl+U&lt;/code> (supprimer jusqu&amp;rsquo;au début de la ligne), &lt;code>Alt+B&lt;/code> / &lt;code>Alt+F&lt;/code> (déplacement par mot) fonctionneront parfaitement dans le PowerShell de Windows.&lt;/p>
&lt;h2 id="32-predictive-intellisense-et-recherche-avancée-dans-lhistorique">3.2. Predictive IntelliSense et recherche avancée dans l&amp;rsquo;historique
&lt;/h2>&lt;p>L&amp;rsquo;une des fonctionnalités les plus puissantes de PSReadLine est le &lt;strong>Predictive IntelliSense (IntelliSense prédictif)&lt;/strong>, basé sur l&amp;rsquo;historique de saisie ou des plugins de prédiction externes. Dès que vous commencez à taper, la commande complète la plus probable issue de l&amp;rsquo;historique est suggérée en gris clair (en ligne). Pour accepter la suggestion, il suffit d&amp;rsquo;appuyer sur la flèche droite (ou &lt;code>Alt+F&lt;/code> pour avancer mot par mot).&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"># Ajouter à $PROFILE : Activation de la fonctionnalité de prédiction (Nécessite 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"># Si vous souhaitez l&amp;#39;afficher sous forme de liste, spécifiez ListView&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-remplacement-du-comportement-des-touches-haut-et-bas-recherche-par-préfixe-de-type-bash">3.3. Remplacement du comportement des touches haut et bas (recherche par préfixe de type Bash)
&lt;/h2>&lt;p>Le comportement par défaut des touches fléchées haut et bas de PowerShell est une simple navigation séquentielle dans l&amp;rsquo;historique. Nous allons réaffecter cela à la fonctionnalité de « recherche dans l&amp;rsquo;historique correspondant au préfixe de la chaîne actuellement saisie », similaire au &lt;code>~/.inputrc&lt;/code> mentionné précédemment.&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"># Ajouter à $PROFILE : Enregistrer le gestionnaire pour la recherche par préfixe dans l&amp;#39;historique&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>Grâce à cela, même dans un environnement Windows, vous pouvez construire, rechercher et exécuter des commandes de manière intuitive avec exactement les mêmes mouvements de doigts que dans un environnement Linux. Standardiser la charge cognitive ($M$) entre les plateformes est extrêmement important pour les ingénieurs DevOps.&lt;/p>
&lt;hr>
&lt;h1 id="4-le-summum-de-la-recherche-dans-lhistorique--lintégration-de-fzf-fuzzy-finder">4. Le summum de la recherche dans l&amp;rsquo;historique : L&amp;rsquo;intégration de fzf (Fuzzy Finder)
&lt;/h1>&lt;p>Dans les opérations du terminal, l&amp;rsquo;une des actions les plus fréquentes consiste à &lt;strong>« retrouver dans l&amp;rsquo;historique une commande complexe exécutée par le passé pour la réexécuter »&lt;/strong>. La recherche inversée standard avec &lt;code>Ctrl+R&lt;/code> (reverse-i-search) étant une recherche par correspondance exacte, il est difficile de retrouver une commande à partir d&amp;rsquo;un souvenir vague tel que « je crois que c&amp;rsquo;était un montage de volume avec docker run&amp;hellip; ».&lt;/p>
&lt;p>Ce problème est résolu de manière élégante par &lt;strong>&lt;code>fzf&lt;/code>&lt;/strong>, un outil de recherche approximative (fuzzy finder) générique et ultra-rapide écrit en langage Go.&lt;/p>
&lt;h2 id="41-pipeline-de-recherche-approximative-avec-fzf">4.1. Pipeline de recherche approximative avec fzf
&lt;/h2>&lt;p>Lorsque &lt;code>fzf&lt;/code> est intégré à la recherche dans l&amp;rsquo;historique des commandes, le processus se déroule selon le pipeline suivant.&lt;/p>
&lt;pre class="mermaid">
flowchart TD
A[&amp;#34;Saisie de l&amp;#39;utilisateur (Ctrl+R)&amp;#34;] --&amp;gt; B[&amp;#34;fzf intercepte la frappe&amp;#34;]
B --&amp;gt; C[&amp;#34;Lecture de .bash_history ou du fichier d&amp;#39;historique PSReadLine&amp;#34;]
C --&amp;gt; D{&amp;#34;Moteur de correspondance approximative (Go)&amp;#34;}
D --&amp;gt; E[&amp;#34;Mise à jour de l&amp;#39;UI de sélection interactive dans le terminal&amp;#34;]
E --&amp;gt; F[&amp;#34;L&amp;#39;utilisateur sélectionne la commande (Entrée)&amp;#34;]
F --&amp;gt; G[&amp;#34;Retour de la commande sélectionnée dans le buffer du shell&amp;#34;]
G --&amp;gt; H[&amp;#34;Exécution ou modification de la commande&amp;#34;]
&lt;/pre>
&lt;p>Lorsque l&amp;rsquo;utilisateur saisit plusieurs mots-clés séparés par des espaces (ex : &lt;code>docker ubuntu bash&lt;/code>), le moteur de correspondance de fzf analyse l&amp;rsquo;ensemble du fichier d&amp;rsquo;historique et liste instantanément les entrées d&amp;rsquo;historique contenant ces mots-clés, même s&amp;rsquo;ils sont dans le désordre ou éloignés les uns des autres.&lt;/p>
&lt;h2 id="42-intégration-de-fzf-dans-bash">4.2. Intégration de fzf dans Bash
&lt;/h2>&lt;p>Dans les environnements Linux tels que Ubuntu/Debian, l&amp;rsquo;installation est facile via apt. De plus, l&amp;rsquo;exécution du script d&amp;rsquo;installation écrasera automatiquement les raccourcis clavier de Bash.&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"># Installation de fzf&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>Ainsi, lorsque vous appuyez sur &lt;code>Ctrl+R&lt;/code>, l&amp;rsquo;interface interactive de fzf apparaîtra en plein écran (ou dans un panneau tmux), vous permettant de rechercher dans l&amp;rsquo;historique de manière extrêmement intuitive. Dans l&amp;rsquo;interface de recherche, vous pouvez sélectionner un élément avec &lt;code>Ctrl+N&lt;/code> (bas) / &lt;code>Ctrl+P&lt;/code> (haut).&lt;/p>
&lt;h2 id="43-intégration-de-psfzf-dans-powershell">4.3. Intégration de PSFzf dans PowerShell
&lt;/h2>&lt;p>Même dans un environnement Windows PowerShell, vous pouvez obtenir exactement la même expérience en utilisant le module &lt;code>PSFzf&lt;/code>. Tout d&amp;rsquo;abord, installez le binaire fzf (Scoop est pratique pour cela), puis installez le module.&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"># Installer le binaire fzf avec 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 du module PSFzf&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>Ensuite, ajoutez les paramètres à &lt;code>$PROFILE&lt;/code> pour lier les touches.&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"># Ajouter à $PROFILE&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"># Mapper Ctrl+R à la recherche dans l&amp;#39;historique de fzf&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>Désormais, sous Windows également, &lt;code>Ctrl+R&lt;/code> permet d&amp;rsquo;effectuer en un instant une recherche approximative dans le vaste historique de PowerShell.&lt;/p>
&lt;hr>
&lt;h1 id="5-minimiser-les-frappes-de-touches-avec-les-alias-et-les-fonctions-wrapper">5. Minimiser les frappes de touches avec les alias et les fonctions wrapper
&lt;/h1>&lt;p>En plus des raccourcis et de la recherche dans l&amp;rsquo;historique, la méthode la plus directe pour réduire les frappes au clavier ($K$) elles-mêmes est de définir des alias (Alias) et des fonctions wrapper.&lt;/p>
&lt;h2 id="51-minimisation-des-opérations-git">5.1. Minimisation des opérations Git
&lt;/h2>&lt;p>Git est utilisé un nombre incalculable de fois chaque jour. Taper systématiquement &lt;code>git status&lt;/code> ou &lt;code>git commit&lt;/code> en entier représente un énorme gaspillage dans le modèle KLM.&lt;/p>
&lt;p>&lt;strong>Exemple pour 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>Exemple pour 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;ul>
&lt;li>Remarque : Étant donné que &lt;code>Set-Alias&lt;/code> dans PowerShell ne permet pas de fixer des arguments, la meilleure pratique pour les alias avec options est de les définir en tant que fonctions (function) comme illustré ci-dessus.&lt;/li>
&lt;/ul>
&lt;h2 id="52-optimisation-du-déplacement-entre-répertoires-z--zoxide">5.2. Optimisation du déplacement entre répertoires (z / zoxide)
&lt;/h2>&lt;p>Se déplacer dans un répertoire profond avec la commande &lt;code>cd&lt;/code> est fastidieux. Récemment, l&amp;rsquo;outil &lt;strong>&lt;code>zoxide&lt;/code>&lt;/strong> (développé en Rust) devient la norme. Il apprend l&amp;rsquo;historique et la fréquence de navigation de l&amp;rsquo;utilisateur (Frecency : Frequency + Recency) et permet de sauter au répertoire souhaité en tapant simplement une partie du chemin.&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"># Après l&amp;#39;installation de zoxide, utilisez z au lieu de cd&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">z proj &lt;span class="c1"># Déplacement instantané vers /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 est compatible avec Bash, Zsh et PowerShell, et offre le même déplacement rapide entre répertoires sur toutes les plateformes.&lt;/p>
&lt;hr>
&lt;h1 id="6-multiplexeurs-de-terminaux-et-gestion-des-panneaux">6. Multiplexeurs de terminaux et gestion des panneaux
&lt;/h1>&lt;p>Si vous lancez un processus (par exemple, un serveur local) dans une fenêtre de terminal, vous devrez ouvrir une nouvelle fenêtre de terminal pour effectuer une autre tâche. Changer de fenêtre (&lt;code>Alt+Tab&lt;/code>) implique de déplacer le regard et entraîne un coût de changement de contexte (augmentation de la préparation mentale $M$).&lt;/p>
&lt;p>La solution à cela est le &lt;strong>multiplexeur de terminal&lt;/strong>, qui permet de diviser l&amp;rsquo;écran en plusieurs panneaux et de maintenir plusieurs sessions en arrière-plan.&lt;/p>
&lt;h2 id="61-architecture-et-transition-détats-de-tmux-linux--macos">6.1. Architecture et transition d&amp;rsquo;états de tmux (Linux / macOS)
&lt;/h2>&lt;p>&lt;code>tmux&lt;/code> est un puissant multiplexeur doté d&amp;rsquo;une architecture client-serveur. Les opérations de tmux nécessitent toujours d&amp;rsquo;appuyer au préalable sur une &lt;strong>touche de préfixe (Ctrl+B par défaut)&lt;/strong> pour éviter que ses raccourcis n&amp;rsquo;entrent en conflit avec d&amp;rsquo;autres programmes.&lt;/p>
&lt;p>Le diagramme de transition d&amp;rsquo;états Mermaid ci-dessous montre le flux opérationnel de base de tmux.&lt;/p>
&lt;pre class="mermaid">
stateDiagram-v2
[*] --&amp;gt; Normal[&amp;#34;Mode normal&amp;#34;]
Normal --&amp;gt; Prefix[&amp;#34;Mode préfixe (Ctrl+B)&amp;#34;]
Prefix --&amp;gt; Command[&amp;#34;Invite de commande (:)&amp;#34;]
Prefix --&amp;gt; SplitV[&amp;#34;Diviser le panneau verticalement (%)&amp;#34;]
Prefix --&amp;gt; SplitH[&amp;#34;Diviser le panneau horizontalement (\&amp;#34;)&amp;#34;]
Prefix --&amp;gt; Switch[&amp;#34;Changer de fenêtre (n/p/0-9)&amp;#34;]
Prefix --&amp;gt; Detach[&amp;#34;Détacher la session (d)&amp;#34;]
Command --&amp;gt; Normal[&amp;#34;Exécuter la commande tmux&amp;#34;]
SplitV --&amp;gt; Normal[&amp;#34;Retour au mode normal&amp;#34;]
SplitH --&amp;gt; Normal[&amp;#34;Retour au mode normal&amp;#34;]
Switch --&amp;gt; Normal[&amp;#34;Retour au mode normal&amp;#34;]
Detach --&amp;gt; [*]
&lt;/pre>
&lt;p>Une pratique courante consiste à éditer &lt;code>~/.tmux.conf&lt;/code> pour changer la touche de préfixe en &lt;code>Ctrl+A&lt;/code> (style GNU Screen), qui est plus facile à appuyer, et à lier le déplacement entre les panneaux aux touches &lt;code>hjkl&lt;/code> (style Vim).&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"># Exemple de ~/.tmux.conf
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"># Changer le préfixe en Ctrl-a
&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"># Touches intuitives pour diviser les panneaux
&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"># Déplacement entre les panneaux comme dans Vim
&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-gestion-des-panneaux-dans-windows-terminal">6.2. Gestion des panneaux dans Windows Terminal
&lt;/h2>&lt;p>Dans les environnements Windows, le dernier &lt;strong>Windows Terminal&lt;/strong> prend en charge nativement la fonctionnalité de division des panneaux. Bien qu&amp;rsquo;il n&amp;rsquo;ait pas de fonctionnalité de persistance de session comme tmux, vous pouvez facilement gérer les panneaux via l&amp;rsquo;interface graphique. En ouvrant les paramètres (&lt;code>settings.json&lt;/code>) et en personnalisant les actions, il est possible de réaliser des opérations entièrement au clavier.&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">// Extrait de settings.json pour Windows Terminal
&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>Ainsi, dans PowerShell, il suffit d&amp;rsquo;appuyer sur &lt;code>Alt+Shift+D&lt;/code> pour diviser l&amp;rsquo;écran, et d&amp;rsquo;utiliser les touches fléchées combinées avec &lt;code>Alt&lt;/code> pour naviguer de manière fluide entre les panneaux.&lt;/p>
&lt;hr>
&lt;h1 id="7-exemple-de-construction-dun-flux-de-travail-pratique">7. Exemple de construction d&amp;rsquo;un flux de travail pratique
&lt;/h1>&lt;p>En combinant les éléments présentés jusqu&amp;rsquo;ici (raccourcis clavier Emacs, PSReadLine, fzf, alias et multiplexeurs), vos tâches quotidiennes seront considérablement accélérées.&lt;/p>
&lt;p>Par exemple, imaginons la tâche suivante : « Vérifier les journaux du serveur lors d&amp;rsquo;une réponse à un incident, et vérifier simultanément l&amp;rsquo;historique des commits du code correspondant avec Git ».&lt;/p>
&lt;ol>
&lt;li>Ouvrez le terminal et tapez &lt;code>z prod&lt;/code> pour vous déplacer instantanément vers le répertoire de travail de l&amp;rsquo;environnement de production.&lt;/li>
&lt;li>Appuyez sur &lt;code>Ctrl+R&lt;/code>, tapez &lt;code>ssh auth&lt;/code> dans la fenêtre contextuelle de &lt;code>fzf&lt;/code> pour rappeler et exécuter une commande de connexion SSH complexe passée.&lt;/li>
&lt;li>Appuyez sur &lt;code>Ctrl+B&lt;/code> &lt;code>|&lt;/code> (division du panneau tmux), puis exécutez &lt;code>gs&lt;/code> (git status) etc. dans le panneau de droite pour examiner le code.&lt;/li>
&lt;li>Si vous trouvez une erreur dans la sortie des journaux du panneau de gauche, entrez en mode copie avec &lt;code>Ctrl+B&lt;/code> &lt;code>[&lt;/code> et copiez (yank) le message d&amp;rsquo;erreur uniquement avec le clavier.&lt;/li>
&lt;li>Collez-le dans votre éditeur pour en identifier la cause.&lt;/li>
&lt;/ol>
&lt;p>Dans cette série d&amp;rsquo;actions, &lt;strong>vous ne touchez pas une seule fois à la souris&lt;/strong>. Les éléments $H$ (Homing) et $P$ (Pointing) de l&amp;rsquo;équation KLM sont complètement éliminés, et l&amp;rsquo;utilisation du terminal suit parfaitement la vitesse de votre pensée.&lt;/p>
&lt;hr>
&lt;h1 id="conclusion">Conclusion
&lt;/h1>&lt;p>Dans cet article, nous avons expliqué de manière très détaillée « l&amp;rsquo;optimisation des opérations du terminal », qui est décisive pour la productivité des développeurs, de la théorie KLM jusqu&amp;rsquo;à l&amp;rsquo;intégration de fzf et tmux, en passant par les raccourcis clavier spécifiques de Bash/PowerShell.&lt;/p>
&lt;p>Au début, vous ressentirez peut-être du stress à devoir penser à taper &lt;code>Ctrl+A&lt;/code> ou &lt;code>Ctrl+E&lt;/code>. Cependant, en continuant à les utiliser consciemment pendant quelques semaines, ces raccourcis s&amp;rsquo;ancreront définitivement dans votre &lt;strong>mémoire musculaire&lt;/strong>. Une fois ancrés, vous serez capable de manipuler le terminal librement et de manière inconsciente, ce qui constituera un atout qui améliorera de façon exponentielle votre expérience de développement (Developer Experience, DX) tout au long de votre vie.&lt;/p>
&lt;p>Dès aujourd&amp;rsquo;hui, ouvrez votre &lt;code>$PROFILE&lt;/code> ou &lt;code>~/.bashrc&lt;/code> et commencez à construire l&amp;rsquo;environnement de terminal ultime, celui qui convient le mieux à vos mains.&lt;/p></description></item></channel></rss>