<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Bash on kenji.blog</title><link>http://kenji.blog/ru/tags/bash/</link><description>Recent content in Bash on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>ru</language><copyright>kenjinote</copyright><lastBuildDate>Sat, 12 Sep 2026 12:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/ru/tags/bash/index.xml" rel="self" type="application/rss+xml"/><item><title>Терминал (PowerShell/Bash) для разработчиков: шорткаты для повышения эффективности</title><link>http://kenji.blog/ru/p/terminal-efficiency-powershell-bash-shortcuts/</link><pubDate>Sat, 12 Sep 2026 12:00:00 +0900</pubDate><guid>http://kenji.blog/ru/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 Терминал (PowerShell/Bash) для разработчиков: шорткаты для повышения эффективности" />&lt;h1 id="введение-повышение-производительности-за-счет-оптимизации-работы-в-терминале">Введение: Повышение производительности за счет оптимизации работы в терминале
&lt;/h1>&lt;p>В современной разработке программного обеспечения терминал (интерфейс командной строки) является важнейшим инструментом, служащим «руками и ногами» разработчика. Управление облачной инфраструктурой, сборка контейнеров, управление версиями с помощью Git, выполнение различных скриптов — не будет преувеличением сказать, что разработчики проводят большую часть своего дня в терминале.&lt;/p>
&lt;p>Однако многие разработчики, хотя и хорошо знакомы с базовыми командами терминала (&lt;code>cd&lt;/code>, &lt;code>ls&lt;/code>, &lt;code>git&lt;/code>, &lt;code>docker&lt;/code> и т. д.), часто упускают из виду важность &lt;strong>«оптимизации самого процесса ввода в терминале»&lt;/strong>. Тянуться к мыши, перемещать курсор, многократно нажимать клавиши со стрелками, чтобы исправить опечатку в команде&amp;hellip; Накопление этих небольших потерь с течением времени приводит к огромной трате времени и когнитивной нагрузке.&lt;/p>
&lt;p>В этой статье, руководствуясь философией «никогда не убирайте руки с клавиатуры», мы подробно и с технической точки зрения рассмотрим шорткаты, настройки привязки клавиш (keybindings), оптимизацию поиска по истории и использование терминальных мультиплексоров для максимального повышения эффективности работы в средах Bash и PowerShell.&lt;/p>
&lt;hr>
&lt;h1 id="1-теоретические-основы-модель-уровня-нажатия-клавиш-klm-и-формула-временных-затрат">1. Теоретические основы: Модель уровня нажатия клавиш (KLM) и формула временных затрат
&lt;/h1>&lt;p>Чтобы количественно оценить преимущества оптимизации, давайте применим &lt;strong>Модель уровня нажатия клавиш (Keystroke-Level Model, KLM)&lt;/strong>, разновидность &lt;strong>модели GOMS&lt;/strong>, используемую в области HCI (Human-Computer Interaction - Взаимодействие человека и компьютера).&lt;/p>
&lt;p>KLM — это модель для прогнозирования времени, которое потребуется опытному пользователю для выполнения определенной задачи без ошибок. Время выполнения задачи $T_{execute}$ формулируется следующим математическим уравнением:&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>Здесь каждая переменная имеет следующее значение:&lt;/p>
&lt;ul>
&lt;li>$K$ : Нажатие клавиши (Keystroking). Действие однократного нажатия клавиши на клавиатуре.&lt;/li>
&lt;li>$P$ : Указание (Pointing). Действие указания на цель с помощью мыши или другого указывающего устройства.&lt;/li>
&lt;li>$H$ : Возврат (Homing). Действие перемещения руки с клавиатуры на мышь или наоборот.&lt;/li>
&lt;li>$M$ : Ментальная подготовка (Mental preparation). Когнитивное время на размышление, планирование и подготовку к следующему физическому действию.&lt;/li>
&lt;li>$R$ : Ответ системы (System Response). Время ожидания пользователем ответа системы.&lt;/li>
&lt;/ul>
&lt;p>Среднее требуемое время ($t$) для каждого действия обычно оценивается следующим образом:&lt;/p>
&lt;ul>
&lt;li>$t_{k} \approx 0.2$ секунды (для опытной машинистки)&lt;/li>
&lt;li>$t_{p} \approx 1.1$ секунды&lt;/li>
&lt;li>$t_{h} \approx 0.4$ секунды&lt;/li>
&lt;li>$t_{m} \approx 1.35$ секунды&lt;/li>
&lt;/ul>
&lt;p>Когда вы пытаетесь исправить часть команды в терминале с помощью клавиш со стрелками или мыши, происходит возврат ($H$) и указание ($P$), что приводит к штрафу примерно в 1.5–2.0 секунды за каждое исправление. С другой стороны, если вы освоите соответствующие шорткаты терминала, вы сможете свести $H$ и $P$ к &lt;strong>нулю&lt;/strong> и достичь своей цели только с помощью нажатий клавиш ($K$).&lt;/p>
$$ 500 \text{ раз/день} \times 2 \text{ секунды} = 1000 \text{ секунд/день} \approx 16.6 \text{ минут/день} $$&lt;p>
Если пересчитать это на год (240 рабочих дней), получится &lt;strong>около 66 часов (примерно 8 рабочих дней)&lt;/strong> сэкономленного времени. Еще важнее то, что за счет сокращения ментальной подготовки ($M$) вы получаете неизмеримое преимущество в виде &lt;strong>«непрерывного потока мыслей (сохранения состояния потока)»&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h1 id="2-глубины-bash-readline-и-привязки-клавиш-emacs">2. Глубины Bash Readline и привязки клавиш Emacs
&lt;/h1>&lt;p>Bash, стандартная оболочка для Linux и macOS, использует внутреннюю библиотеку &lt;strong>GNU Readline&lt;/strong> для обработки ввода в командной строке. Настройкой по умолчанию для Readline является &lt;strong>Emacs keybindings (привязки клавиш Emacs)&lt;/strong>, и овладение ими — это первый шаг к повышению эффективности работы в терминале.&lt;/p>
&lt;h2 id="21-шорткаты-навигации">2.1. Шорткаты навигации
&lt;/h2>&lt;p>Перемещение курсора на один символ за раз с помощью клавиш со стрелками крайне неэффективно. Вбейте следующие шорткаты в свою «мышечную память».&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;code>Ctrl + A&lt;/code>&lt;/strong> : Перемещение в начало строки (Start of line). Используется очень часто.&lt;/li>
&lt;li>&lt;strong>&lt;code>Ctrl + E&lt;/code>&lt;/strong> : Перемещение в конец строки (End of line).&lt;/li>
&lt;li>&lt;strong>&lt;code>Alt + B&lt;/code>&lt;/strong> (Meta+B) : Возврат на одно слово назад (Backward word). Быстрое перемещение по словам, используя слеши и пробелы в качестве разделителей.&lt;/li>
&lt;li>&lt;strong>&lt;code>Alt + F&lt;/code>&lt;/strong> (Meta+F) : Перемещение на одно слово вперед (Forward word).&lt;/li>
&lt;/ul>
&lt;pre class="mermaid">
flowchart LR
Start[&amp;#34;Начало строки (Ctrl+A)&amp;#34;] --- Cursor[&amp;#34;Текущая позиция курсора&amp;#34;]
Cursor --- End[&amp;#34;Конец строки (Ctrl+E)&amp;#34;]
Cursor --&amp;gt; BackwardWord[&amp;#34;Слово назад (Alt+B)&amp;#34;]
Cursor --&amp;gt; ForwardWord[&amp;#34;Слово вперед (Alt+F)&amp;#34;]
&lt;/pre>
&lt;h2 id="22-шорткаты-редактирования-kill-и-yank">2.2. Шорткаты редактирования (Kill и Yank)
&lt;/h2>&lt;p>В терминологии Emacs вырезание (cut) текста называется &amp;ldquo;Kill&amp;rdquo;, а вставка (paste) - &amp;ldquo;Yank&amp;rdquo;.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;code>Ctrl + U&lt;/code>&lt;/strong> : Kill (удаление) от позиции курсора до начала строки. Позволяет мгновенно очистить строку при ошибке ввода пароля или если вы хотите переписать команду с самого начала.&lt;/li>
&lt;li>&lt;strong>&lt;code>Ctrl + K&lt;/code>&lt;/strong> : Kill от позиции курсора до конца строки.&lt;/li>
&lt;li>&lt;strong>&lt;code>Ctrl + W&lt;/code>&lt;/strong> : Kill одного слова перед курсором. Очень удобно, когда нужно удалить один аргумент и переписать его.&lt;/li>
&lt;li>&lt;strong>&lt;code>Alt + D&lt;/code>&lt;/strong> (Meta+D) : Kill одного слова после курсора.&lt;/li>
&lt;li>&lt;strong>&lt;code>Ctrl + Y&lt;/code>&lt;/strong> : Yank (вставка) последнего удаленного (kill) содержимого. Позволяет делать сложные вещи, например, удалить команду с помощью &lt;code>Ctrl+U&lt;/code>, перейти в другую директорию и восстановить ее с помощью &lt;code>Ctrl+Y&lt;/code>.&lt;/li>
&lt;li>&lt;strong>&lt;code>Ctrl + _&lt;/code>&lt;/strong> (или &lt;code>Ctrl + x, Ctrl + u&lt;/code>) : Отмена (Undo). Позволяет восстановить случайно удаленный текст.&lt;/li>
&lt;/ul>
&lt;h2 id="23-другие-важные-шорткаты">2.3. Другие важные шорткаты
&lt;/h2>&lt;ul>
&lt;li>&lt;strong>&lt;code>Ctrl + L&lt;/code>&lt;/strong> : Очистка экрана (эквивалентно команде &lt;code>clear&lt;/code>).&lt;/li>
&lt;li>&lt;strong>&lt;code>Ctrl + C&lt;/code>&lt;/strong> : Отмена текущего ввода команды или прерывание запущенного процесса.&lt;/li>
&lt;li>&lt;strong>&lt;code>Ctrl + D&lt;/code>&lt;/strong> : Отправка EOF (End Of File). Закрывает оболочку (&lt;code>exit&lt;/code>), если не введено никаких символов.&lt;/li>
&lt;/ul>
&lt;h2 id="24-настройка-readline-через-inputrc">2.4. Настройка Readline через ~/.inputrc
&lt;/h2>&lt;p>Эти привязки клавиш можно дополнительно оптимизировать, отредактировав файл &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;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"># Пример настройки ~/.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>Благодаря этому, если вы введете &lt;code>docker &lt;/code> и нажмете стрелку вверх, вы сможете быстро перемещаться только по истории команд, начинающихся с &lt;code>docker&lt;/code>.&lt;/p>
&lt;hr>
&lt;h1 id="3-powershell-и-psreadline-работа-в-стиле-bash-в-среде-windows">3. PowerShell и PSReadLine: Работа в стиле Bash в среде Windows
&lt;/h1>&lt;p>PowerShell, стандартная оболочка в Windows, в своих ранних версиях имела такую же бедную среду ввода, как и командная строка (cmd.exe). Однако с появлением модуля &lt;strong>PSReadLine&lt;/strong>, он приобрел расширенные возможности редактирования командной строки, сравнимые или даже превосходящие Bash (Readline).&lt;/p>
&lt;h2 id="31-включение-psreadline-и-режим-emacs">3.1. Включение PSReadLine и режим Emacs
&lt;/h2>&lt;p>PSReadLine встроен в PowerShell 5.1 и более поздние версии (и PowerShell Core). Чтобы пользователи Windows могли повысить производительность терминала до уровня Linux, обязательно нужно изменить режим редактирования PSReadLine с режима Windows по умолчанию (похожего на cmd) на &lt;strong>режим Emacs&lt;/strong>.&lt;/p>
&lt;p>Отредактируйте профиль PowerShell (&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;/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"># Откройте $PROFILE в 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>Добавьте следующие настройки в &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"># Импорт модуля PSReadLine (если требуется явный импорт)&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"># Установка режима редактирования на Emacs и включение шорткатов в стиле 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"># Отключение звукового сигнала (звука ошибки)&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>Теперь привязки клавиш в стиле Emacs/Bash, такие как &lt;code>Ctrl+A&lt;/code> (начало строки), &lt;code>Ctrl+E&lt;/code> (конец строки), &lt;code>Ctrl+U&lt;/code> (удаление до начала) и &lt;code>Alt+B&lt;/code> / &lt;code>Alt+F&lt;/code> (перемещение по словам), будут отлично работать в PowerShell на Windows.&lt;/p>
&lt;h2 id="32-predictive-intellisense-и-расширенный-поиск-по-истории">3.2. Predictive IntelliSense и расширенный поиск по истории
&lt;/h2>&lt;p>Одной из мощных функций PSReadLine является &lt;strong>Predictive IntelliSense (Предиктивный IntelliSense)&lt;/strong>, основанный на истории ввода или внешних плагинах прогнозирования. По мере ввода текста предлагается наиболее вероятная полная команда из истории тускло-серым цветом (внутри строки). Чтобы принять предложение, просто нажмите клавишу со стрелкой вправо (или &lt;code>Alt+F&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;/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"># Добавьте в $PROFILE: Включение предиктивной функции (требуется 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"># Если вы хотите отображать в виде списка, укажите 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-переопределение-поведения-клавиш-вверхвниз-поиск-по-префиксу-в-стиле-bash">3.3. Переопределение поведения клавиш вверх/вниз (поиск по префиксу в стиле Bash)
&lt;/h2>&lt;p>По умолчанию клавиши вверх и вниз в PowerShell просто последовательно перемещают вас по истории. Мы переназначим их на функцию «поиска в истории, совпадающей с текущей введенной строкой», аналогично &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"># Добавьте в $PROFILE: Регистрация обработчиков поиска по истории с совпадением префикса&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>Это позволяет вам интуитивно составлять, искать и выполнять команды даже в среде Windows с точно такими же движениями пальцев, как в Linux. Унификация когнитивной нагрузки ($M$) на разных платформах крайне важна для инженеров DevOps.&lt;/p>
&lt;hr>
&lt;h1 id="4-вершина-поиска-по-истории-интеграция-fzf-fuzzy-finder">4. Вершина поиска по истории: Интеграция fzf (Fuzzy Finder)
&lt;/h1>&lt;p>Одно из наиболее частых действий при работе в терминале — это &lt;strong>«поиск сложной команды, выполненной в прошлом, в истории и ее повторное выполнение»&lt;/strong>. Стандартный &lt;code>Ctrl+R&lt;/code> (обратный поиск) требует точного совпадения, поэтому бывает трудно вспомнить команду по смутным воспоминаниям вроде «кажется, я использовал docker run и монтировал том&amp;hellip;».&lt;/p>
&lt;p>Эта проблема элегантно решается с помощью сверхбыстрого универсального инструмента нечеткого поиска &lt;strong>&lt;code>fzf&lt;/code>&lt;/strong>, написанного на языке Go.&lt;/p>
&lt;h2 id="41-конвейер-нечеткого-поиска-с-помощью-fzf">4.1. Конвейер нечеткого поиска с помощью fzf
&lt;/h2>&lt;p>При интеграции &lt;code>fzf&lt;/code> для поиска по истории команд обработка выполняется по следующему конвейеру.&lt;/p>
&lt;pre class="mermaid">
flowchart TD
A[&amp;#34;Пользовательский ввод (Ctrl+R)&amp;#34;] --&amp;gt; B[&amp;#34;fzf перехватывает нажатие клавиши&amp;#34;]
B --&amp;gt; C[&amp;#34;Чтение .bash_history или файла истории PSReadLine&amp;#34;]
C --&amp;gt; D{&amp;#34;Механизм нечеткого поиска (Go)&amp;#34;}
D --&amp;gt; E[&amp;#34;Обновление интерактивного UI выбора в терминале&amp;#34;]
E --&amp;gt; F[&amp;#34;Пользователь выбирает команду (Enter)&amp;#34;]
F --&amp;gt; G[&amp;#34;Возврат выбранной команды в буфер оболочки&amp;#34;]
G --&amp;gt; H[&amp;#34;Выполнение или редактирование команды&amp;#34;]
&lt;/pre>
&lt;p>Когда пользователь вводит несколько ключевых слов, разделенных пробелами (например, &lt;code>docker ubuntu bash&lt;/code>), механизм сопоставления fzf сканирует весь файл истории и мгновенно выводит список тех команд, которые содержат эти ключевые слова в любом порядке и на любом расстоянии друг от друга.&lt;/p>
&lt;h2 id="42-интеграция-fzf-в-bash">4.2. Интеграция fzf в Bash
&lt;/h2>&lt;p>В средах Linux, таких как Ubuntu/Debian, его легко установить с помощью apt. Кроме того, запустив скрипт установки, вы автоматически перезапишете привязки клавиш 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"># Установка 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>Благодаря этому при нажатии &lt;code>Ctrl+R&lt;/code> на весь экран (или на панель tmux) появится интерактивный пользовательский интерфейс fzf, позволяющий вам интуитивно искать по истории. В интерфейсе поиска вы можете выбирать элементы с помощью &lt;code>Ctrl+N&lt;/code> (вниз) / &lt;code>Ctrl+P&lt;/code> (вверх).&lt;/p>
&lt;h2 id="43-интеграция-psfzf-в-powershell">4.3. Интеграция PSFzf в PowerShell
&lt;/h2>&lt;p>В среде Windows PowerShell вы можете получить точно такой же опыт, используя модуль &lt;code>PSFzf&lt;/code>. Сначала установите бинарный файл fzf (удобно использовать Scoop и т.п.), а затем установите модуль.&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"># Установка бинарного файла fzf с помощью 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"># Установка модуля 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>Затем добавьте настройки в &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;/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"># Добавьте в $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"># Привязка Ctrl+R к поиску по истории 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>Теперь и в Windows можно мгновенно осуществлять нечеткий поиск по огромной истории PowerShell с помощью &lt;code>Ctrl+R&lt;/code>.&lt;/p>
&lt;hr>
&lt;h1 id="5-минимизация-количества-нажатий-с-помощью-алиасов-и-функций-оберток">5. Минимизация количества нажатий с помощью алиасов и функций-оберток
&lt;/h1>&lt;p>В дополнение к шорткатам и поиску по истории, наиболее прямой способ сократить количество нажатий клавиш ($K$) — это использование алиасов (псевдонимов) и функций-оберток.&lt;/p>
&lt;h2 id="51-минимизация-операций-git">5.1. Минимизация операций Git
&lt;/h2>&lt;p>Git используется бесчисленное количество раз каждый день. Каждый раз вводить &lt;code>git status&lt;/code> или &lt;code>git commit&lt;/code> полностью — это огромная трата времени с точки зрения модели KLM.&lt;/p>
&lt;p>&lt;strong>Пример для 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>Пример для 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>※ В PowerShell &lt;code>Set-Alias&lt;/code> не может фиксировать аргументы, поэтому лучше всего определять алиасы с опциями в виде функций (function), как показано выше.&lt;/p>
&lt;h2 id="52-оптимизация-навигации-по-директориям-z--zoxide">5.2. Оптимизация навигации по директориям (z / zoxide)
&lt;/h2>&lt;p>Переходить в глубоко вложенные директории с помощью команды &lt;code>cd&lt;/code> утомительно. В последние годы стандартом стал инструмент &lt;strong>&lt;code>zoxide&lt;/code>&lt;/strong> (написанный на Rust), который изучает историю и частоту переходов пользователя (Frecency: Frequency + Recency - Частота + Недавность) и позволяет мгновенно переходить в нужную директорию, введя лишь часть пути.&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"># После установки zoxide используйте z вместо cd&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">z proj &lt;span class="c1"># Мгновенный переход в /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 совместим с Bash, Zsh и PowerShell, обеспечивая одинаково быструю навигацию по директориям на разных платформах.&lt;/p>
&lt;hr>
&lt;h1 id="6-терминальные-мультиплексоры-и-управление-панелями">6. Терминальные мультиплексоры и управление панелями
&lt;/h1>&lt;p>Если вы запустите один процесс (например, локальный сервер) в одном окне терминала, вам придется открыть новое окно терминала для выполнения другой работы. Переключение окон (&lt;code>Alt+Tab&lt;/code>) требует перемещения взгляда и приводит к затратам на переключение контекста (увеличение ментальной подготовки $M$).&lt;/p>
&lt;p>Эту проблему решают &lt;strong>терминальные мультиплексоры&lt;/strong>, которые могут разделить экран на несколько панелей (panes) и поддерживать работу нескольких сессий в фоновом режиме.&lt;/p>
&lt;h2 id="61-архитектура-tmux-и-переходы-состояний-linux--macos">6.1. Архитектура tmux и переходы состояний (Linux / macOS)
&lt;/h2>&lt;p>&lt;code>tmux&lt;/code> — это мощный мультиплексор с клиент-серверной архитектурой. Чтобы шорткаты &lt;code>tmux&lt;/code> не конфликтовали с другими программами, его работа устроена так, что вы всегда должны сначала нажимать &lt;strong>префиксную клавишу (по умолчанию Ctrl+B)&lt;/strong>.&lt;/p>
&lt;p>Следующая диаграмма состояний Mermaid иллюстрирует базовый рабочий процесс tmux.&lt;/p>
&lt;pre class="mermaid">
stateDiagram-v2
[*] --&amp;gt; Normal[&amp;#34;Нормальный режим&amp;#34;]
Normal --&amp;gt; Prefix[&amp;#34;Режим префикса (Ctrl+B)&amp;#34;]
Prefix --&amp;gt; Command[&amp;#34;Командная строка (:)&amp;#34;]
Prefix --&amp;gt; SplitV[&amp;#34;Вертикальное разделение панели (%)&amp;#34;]
Prefix --&amp;gt; SplitH[&amp;#34;Горизонтальное разделение панели (\&amp;#34;)&amp;#34;]
Prefix --&amp;gt; Switch[&amp;#34;Переключение окон (n/p/0-9)&amp;#34;]
Prefix --&amp;gt; Detach[&amp;#34;Отсоединение сессии (d)&amp;#34;]
Command --&amp;gt; Normal[&amp;#34;Выполнение команды tmux&amp;#34;]
SplitV --&amp;gt; Normal[&amp;#34;Возврат в нормальный режим&amp;#34;]
SplitH --&amp;gt; Normal[&amp;#34;Возврат в нормальный режим&amp;#34;]
Switch --&amp;gt; Normal[&amp;#34;Возврат в нормальный режим&amp;#34;]
Detach --&amp;gt; [*]
&lt;/pre>
&lt;p>Обычной практикой является редактирование &lt;code>~/.tmux.conf&lt;/code>, чтобы изменить префиксную клавишу на более удобную &lt;code>Ctrl+A&lt;/code> (в стиле GNU Screen), и привязать перемещение по панелям к клавишам &lt;code>hjkl&lt;/code> в стиле 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"># Пример ~/.tmux.conf
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"># Изменение префикса на 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"># Интуитивно понятные клавиши для разделения панелей
&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
&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-управление-панелями-в-windows-terminal">6.2. Управление панелями в Windows Terminal
&lt;/h2>&lt;p>В среде Windows новейший &lt;strong>Windows Terminal&lt;/strong> стандартно поддерживает функцию разделения на панели. У него нет функций сохранения сессий, как в tmux, но он позволяет легко управлять панелями через графический интерфейс. Открыв настройки (&lt;code>settings.json&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;/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">// Часть settings.json в 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>В результате, просто нажав &lt;code>Alt+Shift+D&lt;/code> в PowerShell, вы разделите экран, а использование клавиш со стрелками в сочетании с &lt;code>Alt&lt;/code> позволит вам плавно перемещаться между панелями.&lt;/p>
&lt;hr>
&lt;h1 id="7-пример-построения-практического-рабочего-процесса">7. Пример построения практического рабочего процесса
&lt;/h1>&lt;p>Объединив представленные до сих пор элементы (привязки клавиш Emacs, PSReadLine, fzf, алиасы, мультиплексоры), вы сможете кардинально ускорить выполнение повседневных задач.&lt;/p>
&lt;p>Например, представим себе такую задачу: «при реагировании на сбой проверить логи сервера и одновременно изучить историю коммитов соответствующего кода в Git».&lt;/p>
&lt;ol>
&lt;li>Откройте терминал, введите &lt;code>z prod&lt;/code> и мгновенно переместитесь в рабочую директорию production-окружения.&lt;/li>
&lt;li>Нажмите &lt;code>Ctrl+R&lt;/code> и во всплывающем окне &lt;code>fzf&lt;/code> введите &lt;code>ssh auth&lt;/code>, чтобы найти и выполнить сложную команду входа по SSH из истории.&lt;/li>
&lt;li>Нажмите &lt;code>Ctrl+B&lt;/code> &lt;code>|&lt;/code> (разделение панели tmux), и в правой панели выполните &lt;code>gs&lt;/code> (git status) или другие команды для исследования кода.&lt;/li>
&lt;li>Если вы обнаружите ошибку в выводе логов в левой панели, нажмите &lt;code>Ctrl+B&lt;/code> &lt;code>[&lt;/code>, чтобы войти в режим копирования, и скопируйте (yank) сообщение об ошибке, используя только клавиатуру.&lt;/li>
&lt;li>Вставьте его в редактор, чтобы определить причину.&lt;/li>
&lt;/ol>
&lt;p>В этой серии действий &lt;strong>вы ни разу не коснетесь мыши&lt;/strong>. В уравнении KLM полностью исключаются $H$ (Возврат) и $P$ (Указание), и скорость работы с терминалом будет полностью соответствовать скорости вашей мысли.&lt;/p>
&lt;hr>
&lt;h1 id="заключение">Заключение
&lt;/h1>&lt;p>В этой статье мы очень подробно разобрали «повышение эффективности работы в терминале», которое определяет производительность разработчика, начиная от теории KLM до конкретных привязок клавиш в Bash/PowerShell и интеграции fzf и tmux.&lt;/p>
&lt;p>Поначалу вы можете испытывать стресс, пытаясь осознанно использовать &lt;code>Ctrl+A&lt;/code> и &lt;code>Ctrl+E&lt;/code>. Однако после нескольких недель осознанного использования эти шорткаты гарантированно укоренятся в вашей &lt;strong>мышечной памяти&lt;/strong>. Как только они закрепятся, вы сможете свободно управлять терминалом подсознательно, и это станет активом, который значительно улучшит ваш опыт разработчика (Developer Experience, DX) на всю жизнь.&lt;/p>
&lt;p>Пожалуйста, откройте свой &lt;code>$PROFILE&lt;/code> или &lt;code>~/.bashrc&lt;/code> прямо сегодня и начните создавать идеальную среду терминала, которая наилучшим образом подходит именно вам.&lt;/p></description></item></channel></rss>