<?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/ar/tags/bash/</link><description>Recent content in Bash on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>ar</language><copyright>kenjinote</copyright><lastBuildDate>Sat, 12 Sep 2026 12:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/ar/tags/bash/index.xml" rel="self" type="application/rss+xml"/><item><title>اختصارات لزيادة كفاءة سطر الأوامر (PowerShell/Bash) للمطورين</title><link>http://kenji.blog/ar/p/terminal-efficiency-powershell-bash-shortcuts/</link><pubDate>Sat, 12 Sep 2026 12:00:00 +0900</pubDate><guid>http://kenji.blog/ar/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>في تطوير البرمجيات الحديثة، يعد سطر الأوامر (واجهة سطر الأوامر) الأداة الأهم التي تشكل &amp;ldquo;أيدي وأرجل&amp;rdquo; المطور. ليس من المبالغة القول إن المطورين يقضون معظم يومهم في سطر الأوامر، سواء في إدارة البنية التحتية السحابية، بناء الحاويات، إدارة الإصدارات باستخدام 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>&amp;ldquo;تحسين إدخال سطر الأوامر نفسه&amp;rdquo;&lt;/strong>. الوصول إلى الفأرة، تحريك المؤشر، الضغط المتكرر على مفاتيح الأسهم لتصحيح الأخطاء المطبعية في الأوامر&amp;hellip; تراكم هذه الخسائر الصغيرة يؤدي إلى ضياع هائل في الوقت وعبء إدراكي كبير على المدى الطويل.&lt;/p>
&lt;p>في هذه المقالة، وانطلاقاً من فلسفة &amp;ldquo;لا ترفع يديك عن لوحة المفاتيح&amp;rdquo;، سنشرح بالتفصيل وبطريقة تقنية كيفية تحسين عمليات سطر الأوامر في بيئات Bash و PowerShell إلى أقصى حد، متضمنة اختصارات لوحة المفاتيح، إعدادات ربط المفاتيح (Keybindings)، تحسين البحث في السجل (History)، واستخدام مضاعفات سطر الأوامر (Terminal Multiplexers).&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).&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>&amp;ldquo;عدم انقطاع التفكير (الحفاظ على حالة التدفق أو Flow)&amp;rdquo;&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&lt;/strong>، وإتقان ذلك هو الخطوة الأولى نحو كفاءة سطر الأوامر.&lt;/p>
&lt;h2 id="21-اختصارات-التنقل">2.1. اختصارات التنقل
&lt;/h2>&lt;p>تحريك المؤشر حرفًا بحرف باستخدام مفاتيح الأسهم هو قمة عدم الكفاءة. دعونا نحفر الاختصارات التالية في &amp;ldquo;الذاكرة العضلية&amp;rdquo;.&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-and-yank">2.2. اختصارات التحرير (القص واللصق أو Kill and 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>: قص (مسح) كل شيء من موضع المؤشر إلى بداية السطر. عند كتابة كلمة مرور بشكل خاطئ، أو عندما تريد إعادة كتابة الأمر من البداية، يمكنك مسحه في لحظة.&lt;/li>
&lt;li>&lt;strong>&lt;code>Ctrl + K&lt;/code>&lt;/strong>: قص من موضع المؤشر إلى نهاية السطر.&lt;/li>
&lt;li>&lt;strong>&lt;code>Ctrl + W&lt;/code>&lt;/strong>: قص الكلمة السابقة لموضع المؤشر. مفيد جداً عند الرغبة في مسح وسيط (Argument) واحد لإعادة كتابته.&lt;/li>
&lt;li>&lt;strong>&lt;code>Alt + D&lt;/code>&lt;/strong> (Meta+D): قص الكلمة التالية لموضع المؤشر.&lt;/li>
&lt;li>&lt;strong>&lt;code>Ctrl + Y&lt;/code>&lt;/strong>: لصق (Yank) آخر ما تم قصه. يمكنك القيام بأشياء متقدمة مثل استخدام &lt;code>Ctrl+Y&lt;/code> لاستعادة أمر تم مسحه بـ &lt;code>Ctrl+U&lt;/code> بعد الانتقال إلى دليل (Directory) آخر.&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). إذا لم يتم إدخال أي أحرف، فسيقوم بإنهاء الصدفة (Shell) باستخدام (&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> في المجلد الرئيسي (Home directory). على سبيل المثال، بإضافة الإعداد التالي، يمكنك استخدام مفتاحي الأسهم للأعلى وللأسفل للبحث فقط في السجلات (History) التي تتطابق بادئتها مع النص الجاري إدخاله.&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>الآن، حتى في PowerShell على Windows، ستعمل مفاتيح ربط نمط 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> (انتقال بين الكلمات).&lt;/p>
&lt;h2 id="32-التنبؤ-الذكي-predictive-intellisense-والبحث-المتقدم-في-السجل">3.2. التنبؤ الذكي (Predictive IntelliSense) والبحث المتقدم في السجل
&lt;/h2>&lt;p>من أهم ميزات PSReadLine الميزة القوية &lt;strong>التنبؤ الذكي (Predictive 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 هو مجرد انتقال تسلسلي عبر السجل. نعيد تعيين هذا إلى وظيفة &amp;ldquo;البحث في السجل الذي يتطابق في البادئة مع السلسلة التي يتم إدخالها حاليًا&amp;rdquo;، تمامًا مثل &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>&amp;ldquo;العثور على أمر معقد تم تنفيذه في الماضي من السجل وإعادة تنفيذه&amp;rdquo;&lt;/strong>. نظرًا لأن البحث العكسي القياسي &lt;code>Ctrl+R&lt;/code> هو بحث بتطابق تام، فمن الصعب استرجاع أمر من ذاكرة غامضة مثل &amp;ldquo;أتذكر أنني استخدمت docker run وقمت بعمل volume mount &amp;hellip;&amp;rdquo;.&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;تحديث واجهة الاختيار التفاعلية في سطر الأوامر&amp;#34;]
E --&amp;gt; F[&amp;#34;يختار المستخدم الأمر (Enter)&amp;#34;]
F --&amp;gt; G[&amp;#34;إرجاع الأمر المحدد إلى ذاكرة الصدفة (Shell)&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>يؤدي هذا إلى ظهور واجهة fzf التفاعلية في وضع ملء الشاشة (أو في جزء tmux) عند الضغط على &lt;code>Ctrl+R&lt;/code>، مما يتيح لك البحث في السجل بشكل بديهي للغاية. في واجهة البحث، يمكنك تحديد عنصر باستخدام &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>باستخدام هذا، يمكن إجراء بحث عشوائي (Fuzzy search) فوريًا من السجل الضخم لـ PowerShell في Windows بمجرد الضغط على &lt;code>Ctrl+R&lt;/code>.&lt;/p>
&lt;hr>
&lt;h1 id="5-تقليل-عدد-ضغطات-المفاتيح-عبر-الأسماء-المستعارة-aliases-والدوال-التغليفية-wrapper-functions">5. تقليل عدد ضغطات المفاتيح عبر الأسماء المستعارة (Aliases) والدوال التغليفية (Wrapper Functions)
&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>※ نظرًا لأنه لا يمكن لـ &lt;code>Set-Alias&lt;/code> في PowerShell تثبيت الوسائط (Arguments)، فمن الأفضل تحديد الأسماء المستعارة التي تحتوي على خيارات كدوال (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-مضاعف-سطر-الأوامر-terminal-multiplexer-وإدارة-الأجزاء-panes">6. مضاعف سطر الأوامر (Terminal Multiplexer) وإدارة الأجزاء (Panes)
&lt;/h1>&lt;p>إذا بدأت عملية (مثل خادم محلي) في نافذة سطر أوامر واحدة، فسيتعين عليك فتح نافذة سطر أوامر جديدة تمامًا للقيام بعمل آخر. تبديل النوافذ (&lt;code>Alt+Tab&lt;/code>) يتضمن حركة العين ويؤدي إلى تكلفة تبديل السياق (زيادة في الاستعداد الذهني $M$).&lt;/p>
&lt;p>الحل هو &lt;strong>مضاعف سطر الأوامر (Terminal Multiplexer)&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> هو مضاعف قوي يتمتع ببنية خادم-عميل. لتجنب تعارض اختصارات tmux مع البرامج الأخرى، يجب دائمًا الضغط على &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>على سبيل المثال، افترض أن لديك مهمة &amp;ldquo;التحقق من سجلات الخادم أثناء الاستجابة لمشكلة، وفي نفس الوقت فحص سجل التزامات (Commits) الكود المقابل في Git&amp;rdquo;.&lt;/p>
&lt;ol>
&lt;li>افتح سطر الأوامر، واكتب &lt;code>z prod&lt;/code> للقفز فوراً إلى دليل العمل الخاص ببيئة الإنتاج.&lt;/li>
&lt;li>اضغط &lt;code>Ctrl+R&lt;/code>، واكتب &lt;code>ssh auth&lt;/code> في النافذة المنبثقة لـ &lt;code>fzf&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>. يتم التخلص من $H$ (التمركز) و $P$ (التأشير) تماماً في معادلة KLM، وعمليات سطر الأوامر ستواكب سرعة تفكيرك تماماً.&lt;/p>
&lt;hr>
&lt;h1 id="الخلاصة">الخلاصة
&lt;/h1>&lt;p>في هذا المقال، شرحنا بالتفصيل موضوع &amp;ldquo;تحسين عمليات سطر الأوامر&amp;rdquo;، الذي يحدد إنتاجية المطورين، بدءاً من نظرية KLM إلى الروابط الفعلية لمفاتيح Bash/PowerShell، وحتى دمج fzf و tmux.&lt;/p>
&lt;p>في البداية، قد تشعر بالتوتر عند محاولة تذكر كتابة &lt;code>Ctrl+A&lt;/code> أو &lt;code>Ctrl+E&lt;/code>. ولكن، مع الاستخدام المتعمد لعدة أسابيع، ستصبح هذه الاختصارات جزءاً راسخاً من &lt;strong>الذاكرة العضلية (Muscle Memory)&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>