tmux عمليًا: iTerm2 و tmux

مزايا وعيوب استخدام iterm2 مقابل tmux محليًا. كيفية إعداد ملف تعريف iTerm2 لتجاوز تعيينات المفاتيح لتشغيل إجراءات tmux التناظرية

هذا هو الجزء الثاني من سلسلة ما بعد "tmux in Practice".

إذن أنت تستخدم iTerm2 terminal emulator على OSX. وقد سمعت عن tmux ، وقررت تجربته. Google هنا ، Google هناك ، بعد فترة من الوقت تفهم مفاهيم مثل تعدد الإرسال الطرفي ، والنوافذ ، وتقسيم الأجزاء ، وفهم استخدام tmux على الأجهزة البعيدة لاستمرار حالة الجلسة والبقاء على قيد الحياة في حالات انقطاع الاتصال المفاجئ.

في وقت ما ، قد تتساءل عن استخدام tmux محليًا.

"نظرًا لأن iTerm يمكنه بالفعل إنشاء عدة نوافذ افتراضية داخل نافذة" فعلية "واحدة ، ويمكن تقسيم الأجزاء وتبديلها وتغيير حجمها ، فهل أحتاج حقًا إلى استخدام tmux على جهازي المحلي بدلاً من iTerm؟"

عندما كنت أتعلم tmux ، كنت أعود إلى نفس السؤال مرارًا وتكرارًا. لم يكن واضحا دون بعض الممارسة. لذلك قررت أن أجربها ، واليوم يمكنني مشاركة الفوائد والعيوب معك.

iTerm2 مقابل tmux على الجهاز المحلي: الفوائد والعيوب

فوائد:

  • النوافذ المسماة. تشبه علامات التبويب في iTerm ، ولكن يمكنك منحها اسمًا
  • سطر حالة يحتوي على معلومات على مستوى النظام. يتضمن وحدة المعالجة المركزية والذاكرة وحالة الاتصال / عدم الاتصال والبطارية والمستخدم والمضيف ووقت التاريخ.
  • بوجود خط حالة ومجموعة من النوافذ المسماة بداخله ، يمكنني تحويل iTerm إلى وضع ملء الشاشة. هذا يسمح لي بالعمل في بيئة خالية من الإلهاء والحصول أيضًا على 3 صفوف إضافية. تم التقاطها سابقًا بواسطة شريط قوائم OSX وإطار نافذة iTerm وصف علامات تبويب iTerm.
  • نافذة مراقبة للنشاط أو الصمت. عندما أقوم بتشغيل أمر طويل المدى في جزء واحد ، يمكنني التبديل إلى جزء آخر ويتم إخطاري عند عدم ظهور المزيد من الإخراج في الجزء السابق لبعض الفواصل الزمنية

    يحتوي iTerm على شيء مشابه ، ولكنه يتعلق فقط بإخطارك عندما يعود التنفيذ إلى موجه الأوامر ، ويتطلب تثبيت تكامل إضافي مع shell

  • إعادة تعريف تخطيطات الأجزاء. زوجي أفقي ، زوجي عمودي ، أفقي رئيسي ، رئيسي - رأسي ، ومربع
  • القدرة على التبديل بين عدة جلسات tmux المحلية لكل مشروع لتبديل السياق بسهولة
  • إذا كنت تستخدم tmux محليًا وعلى جهاز بعيد ، فستحصل على نفس بيئة المحطة الطرفية المألوفة
  • عندما تستخدم tmux ، فإنك تعتمد على ميزات iTerm2 الفريدة بدرجة أقل بكثير

    هذا يجعل من السهل الترحيل إلى محاكي طرفي مختلف ، سواء كان على نفس نظام التشغيل أو نظام آخر (Linux)

عيوب:

  • يحتفظ tmux بمخزن التمرير الخلفي الخاص به. يصعب الوصول إليه ونسخ النص أكثر من iTerm (فقط قم بالتمرير والاختيار بالماوس)
  • إذا قمت بنسخ نص في tmux ، فسيتم تخزينه في المخزن المؤقت الخاص بـ tmux ، ولا تتم مشاركته مع حافظة نظام التشغيل بشكل افتراضي. لكي تكون صحيحًا بنسبة 100٪ ، تعمل المشاركة مع حافظة النظام في iTerm2 ، ولكن لمجرد أنها تدعم تسلسلات الهروب OSC 52 ANSI التي تتيح لتطبيق مثل tmux الوصول إلى البيانات وتخزينها في الحافظة. iTerm2 حالة خاصة. فقط حاول نسخ النص في tmux الذي يعمل في المحطة الطرفية الافتراضية OSX ، والتي لا تدعم OSC52
  • إذا كنت معتادًا بالفعل على روابط مفاتيح iTerm ، فأنت بحاجة إلى التعلم والتبديل إلى روابط مفاتيح tmux ، والتي تكون مرهقة. بدلاً من ضغطة مفتاح واحدة مثل ⌘⌥-> ، فأنت بحاجة إلى إصلاحين لضغط المفاتيح s: preمتبوعًا بمفتاح آخر ، تم تعيينهما لإجراء tmux محدد.

أنا شخصياً قررت المضي قدمًا في استخدام tmux وميزاته والاعتماد بشكل أقل على ميزات iTerm2 المحددة. في الواقع ، الآن أنا أستخدم iTerm فقط كنفق إلى tmux؟

تعد المشكلات المتعلقة بمخزن التمرير المؤقت والتكامل مع حافظة نظام التشغيل أمرًا حيويًا للغاية ، حتى أنه يمكنك أن تقرر التخلي عن استخدام tmux. سوف نتناول هذه المواضيع في مشاركاتي المستقبلية.

تجاوز تعيينات مفاتيح iTerm لتشغيل إجراء tmux

اليوم ، لنرى كيف يمكننا استخدام روابط مفاتيح iTerm المألوفة أثناء العمل في بيئة tmux. الفكرة هي تعيين ضغطات المفاتيح في iTerm لتشغيل إجراءات tmux.

ستكون الطريقة السهلة هي الذهاب إلى .tmux.confإجراءات tmux وتعيينها لتلك الروابط الأساسية. على سبيل المثال ، لتغيير حجم جزء في iTerm ، نستخدم " ^⌘↑" ، فلنقم بتعيين نفس ضغط المفاتيح في tmux بطريقة ساذجة إلى حد ما:

bind ^⌘↑ resize-pane -U

ومع ذلك ، لن يعمل الرمز أعلاه لأنه لا يمكنك استخدام ⌘ في روابط مفاتيح tmux ، كما أن استخدام SHIFT محدود للغاية. وحتى لو كان ذلك ممكنًا ، كان iTerm يعترض ضغط المفتاح هذا من قبل.

بدلاً من ذلك ، نقوم بإعداد ملف تعريف iTerm جديد ، وتجاوز تعيينات المفاتيح لإرسال تسلسلات مكونة مسبقًا من البايتات ، والتي ستطلق الإجراء المقابل في tmux.

على سبيل المثال ، عند ^⌘↑الضغط على " " ، 0x01 0x1b 0x5b 0x31 0x3b 0x35 0x41يتم إرسال تسلسل البايت عبر الجهاز إلى مثيل tmux قيد التشغيل. يفسرها على أنها C-a C-↑رابط للمفاتيح ومشغلات resize-pane -Uوفقًا لتكويننا .tmux.conf.

إذن كيف يمكنك الحصول على هذه الرموز السداسية؟ استخدم showkey، odأو hexdumpأوامر لعرض التمثيل الثنائي لضغطات المفاتيح من لوحة المفاتيح:

$ showkey -aPress any keys - Ctrl-D will terminate this program
^A 1 0001 0x01^[[1;5A 27 0033 0x1b 91 0133 0x5b 49 0061 0x31 59 0073 0x3b 53 0065 0x35 65 0101 0x41

ملاحظة : showkeyغير متوفر على OSX ، ولكن يمكنك دائمًا استخدام SSH على جهاز Linux البعيد واستخدامه ؟. إذا بدا الأمر وكأنه عبء كبير ، فما عليك سوى استخدام o d أو hexdump.

$ od -t x1
^A^[[1;5A // press C-a C-↑ on your keyboar0000000 01 1b 5b 31 3b 35 410000007

يمكنك إعادة تعيين أي مفتاح بهذه الطريقة ، لكنني أفعل هذا فقط للأكثر شيوعًا ، والتي لها عمل تناظري في tmux.

بحلول نهاية اليوم ، يمكنني إنشاء أجزاء tmux جديدة باستخدام ⌘Dو ⌘⇧D، تحديد الأجزاء باستخدام ⌘⌥→ , ^Tab للتبديل إلى النافذة المستخدمة مؤخرًا ، ⌘⇧أدخل إلى جزء التكبير / التصغير ، ^⌘←لتغيير حجم الجزء إلى اليسار ، ⌘[ لتحديد الجزء السابق ، ⌘Wلإيقاف الجزء الحالي ، وهكذا دواليك. لذلك ، لست بحاجة إلى محاربة ذاكرتي العضلية من أجل معظم الإجراءات الشائعة.

بالنسبة لجميع الإجراءات الأخرى بدون مراسلات ، ما زلت أستخدم طريقة tmux: C-aبادئة متبوعة بمفتاح الإجراء. إذا كنت تشعر بالفضول بشأن القائمة الكاملة لمثل هذه الروابط ، وكيف يعمل كل هذا في العمل ، فتحقق من مستودع tmux-config الخاص بي.

أيضًا ، وجدت أن التخطيطات المحددة مسبقًا مفيدة جدًا: زوجي أفقي ، زوجي عمودي ، رئيسي أفقي ، رئيسي عمودي ، مبلط. عادةً ما أعمل في تخطيط عمودي رئيسي ، وأحتاج إلى تبديل جزء ثانوي بالأمام والخلف. هذا شائع جدًا لدرجة أنني قررت إعداد رابط مفاتيح في كل من tmux (prefix \)و iTerm (⌘\).

# Swap panes back and forth with 1st pane# When in main-(horizontal|vertical) layouts, the biggest/widest panel is always @1bind \ if '[ #{pane_index} -eq 1 ]' \ 'swap-pane -s "!"' \ 'select-pane -t:.1 ; swap-pane -d -t 1 -s "!"'

كخطوة إضافية ، يمكنك إعداد ملف تعريف iTerm الجديد هذا كإعداد افتراضي ، وإخباره بالانتقال إلى جلسة tmux مباشرةً في البداية.

ولا تنس تشغيل iTerm2 في وضع ملء الشاشة. انه يستحق ذلك.

التكامل الأصلي بين iTerm2 و tmux

هناك تكامل بين iTerm2 و tmux مدعوم من iTerm قد يثير اهتمامك.

The idea is that iTerm still handles window and pane management, maintain scrollback buffers, copy/paste as usual, but all windows are backed by tmux session under the hood. It’s tmux session indeed, but abstracted and encapsulated by familiar iTerm environment for you. You can close iTerm, open it back and reattach to previous session, without state lost.

However, it makes little sense for local environment (only useful in case of an iTerm crash which is an extremely rare event). Personally, I don’t like this approach, because it hides me from the fact I’m using tmux, and exposes only those most common tmux features, which have analogues in iTerm (create window, split pane, resize window/pane, close session).

Resources and links

Tmuxintegration · Wiki · George Nachman / iterm2 · GitLab — //gitlab.com/gnachman/iterm2/wikis/TmuxIntegration

خرائط مفاتيح iTerm2 لـ tmux - Dan Lowe - //tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/

بدء تشغيل Tmux تلقائيًا في iTerm2 - Sašo Matejina - متوسط ​​- //medium.com/@sasom/auto-starting-tmux-in-iterm2-4276182d452a

samoshkin / tmux-config: تكوين Tmux ، الذي يشحن tmux الخاص بك لبناء بيئة طرفية مريحة وباردة - //github.com/samoshkin/tmux-config