tmux στην πράξη: iTerm2 και tmux

Οφέλη και μειονεκτήματα της τοπικής χρήσης του iterm2 έναντι του tmux. Πώς να ρυθμίσετε το προφίλ iTerm2 για να παρακάμψετε τις βασικές αντιστοιχίσεις για να ενεργοποιήσετε αναλογικές ενέργειες tmux

Αυτό είναι το 2ο μέρος της σειράς «tmux in praktise».

Χρησιμοποιείτε λοιπόν τον εξομοιωτή τερματικού iTerm2 σε OSX. Και έχετε ακούσει για το tmux και αποφασίσατε να το δοκιμάσετε. Google εδώ, Google εκεί, μετά από λίγο καταλαβαίνετε έννοιες όπως τερματική πολυπλεξία, παράθυρα, διαχωρισμός παραθύρων και κατανοείτε τη χρήση tmux σε απομακρυσμένα μηχανήματα για να διατηρήσετε την κατάσταση συνεδρίας και να επιβιώσετε απότομες αποσυνδέσεις.

Κάποια στιγμή, ίσως αναρωτιέστε για τη χρήση tmux τοπικά.

«Δεδομένου ότι το iTerm μπορεί ήδη να δημιουργήσει πολλά εικονικά παράθυρα μέσα σε ένα μόνο« φυσικό »παράθυρο, να χωρίσει, να αλλάξει και να αλλάξει το μέγεθος των παραθύρων, πρέπει πραγματικά να χρησιμοποιήσω το tmux στον τοπικό υπολογιστή μου αντί για το iTerm;»

Όταν έμαθα το tmux, επέστρεφα ξανά στην ίδια ερώτηση. Δεν ήταν ξεκάθαρο χωρίς κάποια πρακτική. Αποφάσισα λοιπόν να το δοκιμάσω και σήμερα μπορώ να μοιραστώ τα οφέλη και τα μειονεκτήματά σας.

iTerm2 vs tmux σε τοπικό μηχάνημα: οφέλη και μειονεκτήματα

Οφέλη:

  • Ονομαζόμενα παράθυρα. Παρόμοια με τις καρτέλες στο iTerm, αλλά μπορείτε να τους δώσετε ένα όνομα
  • Μια γραμμή κατάστασης με πληροφορίες σε όλο το σύστημα. Περιλαμβάνει CPU, μνήμη, κατάσταση online / offline, μπαταρία, χρήστη, κεντρικό υπολογιστή και ώρα ημερομηνίας.
  • Έχοντας γραμμή κατάστασης και σύνολο ονομάτων παραθύρων μέσα σε αυτό, μπορώ να μετατρέψω το iTerm σε λειτουργία πλήρους οθόνης. Αυτό μου επιτρέπει να δουλεύω σε περιβάλλον χωρίς περισπασμούς και να λαμβάνω επιπλέον 3 σειρές. Αυτά είχαν ληφθεί προηγουμένως από τη γραμμή μενού OSX, το πλαίσιο παραθύρου iTerm και τη σειρά καρτελών iTerm.
  • Παρακολούθηση παραθύρου για δραστηριότητα ή σιωπή. Όταν εκτελώ μια εντολή που εκτελείται σε ένα παράθυρο, μπορώ να αλλάξω σε άλλο παράθυρο και να ειδοποιηθώ όταν δεν εμφανίζεται πλέον έξοδος στο προηγούμενο παράθυρο για κάποιο διάστημα

    Το iTerm έχει κάτι παρόμοιο, αλλά είναι μόνο για να σας ειδοποιεί όταν η εκτέλεση επιστρέφει στη γραμμή εντολών και απαιτεί εγκατάσταση επιπλέον ενσωμάτωσης κελύφους

  • Επαναπροσδιορισμένη διάταξη παραθύρων. Οριζόντια-οριζόντια, ομοιόμορφα, κύρια-οριζόντια, κύρια-κατακόρυφα και πλακάκια
  • Δυνατότητα εναλλαγής μεταξύ πολλών τοπικών συνεδριών tmux ανά έργο για εύκολη εναλλαγή περιβάλλοντος
  • Εάν χρησιμοποιείτε το tmux τόσο τοπικά όσο και σε απομακρυσμένο μηχάνημα, θα έχετε το ίδιο οικείο τερματικό περιβάλλον
  • Όταν χρησιμοποιείτε το tmux, βασίζεστε σε μοναδικά χαρακτηριστικά του iTerm2 πολύ λιγότερο

    Αυτό διευκολύνει τη μετεγκατάσταση σε διαφορετικό εξομοιωτή τερματικού , είτε στο ίδιο λειτουργικό σύστημα είτε σε άλλο (Linux)

Μειονεκτήματα:

  • Το tmux διατηρεί το δικό του buffer scrollback. Είναι πιο δύσκολο να αποκτήσετε πρόσβαση σε αυτό και να αντιγράψετε κείμενο από ό, τι στο iTerm (απλώς κάντε κύλιση και επιλέξτε με ποντίκι)
  • Εάν αντιγράψετε κείμενο σε tmux, αποθηκεύεται σε προσωρινή μνήμη tmux και δεν είναι κοινόχρηστο με το πρόχειρο του λειτουργικού σας συστήματος από προεπιλογή. Για να είναι 100% σωστή, η κοινή χρήση με το πρόχειρο συστήματος λειτουργεί στο iTerm2, αλλά απλώς και μόνο επειδή υποστηρίζει OSC 52 ANSI ακολουθίες διαφυγής που επιτρέπουν σε εφαρμογές όπως tmux να έχουν πρόσβαση και να αποθηκεύουν δεδομένα στο πρόχειρο. Το iTerm2 είναι μια ειδική περίπτωση. Απλώς προσπαθήστε να αντιγράψετε κείμενο σε tmux που εκτελείται στο προεπιλεγμένο τερματικό OSX, το οποίο δεν υποστηρίζει OSC52
  • Εάν είστε ήδη εξοικειωμένοι με τους συνδέσμους πλήκτρων iTerm, πρέπει να μάθετε και να μεταβείτε σε συνδέσεις κλειδιών tmux , οι οποίες είναι δυσκίνητες. Αντί για απλή πληκτρολόγηση όπως ⌘⌥->, χρειάζεστε δύο s: preεπιδιόρθωση πλήκτρων ακολουθούμενη από ένα άλλο πλήκτρο, αντιστοιχισμένο σε συγκεκριμένη ενέργεια tmux.

Προσωπικά, αποφάσισα να προχωρήσω με το tmux και τα χαρακτηριστικά του, και βασίζομαι λιγότερο σε συγκεκριμένες λειτουργίες του iTerm2. Μάλιστα, τώρα χρησιμοποιώ το iTerm ως σήραγγα για να το κάνω;

Τα ζητήματα με την προσωρινή μνήμη κύλισης και την ενσωμάτωση με το πρόχειρο λειτουργικού συστήματος είναι εξαιρετικά ζωτικής σημασίας , που μπορείτε ακόμη και να αποφασίσετε να σταματήσετε να υιοθετείτε το tmux. Θα εξετάσουμε αυτά τα θέματα στις μελλοντικές αναρτήσεις μου.

Παράκαμψη αντιστοιχίσεων κλειδιών iTerm για ενεργοποίηση ενέργειας

Σήμερα, ας δούμε πώς μπορούμε να χρησιμοποιήσουμε γνωστά πλήκτρα iTerm ενώ εργαζόμαστε σε περιβάλλον tmux. Η ιδέα είναι να χαρτογραφήσετε πατήματα πλήκτρων στο iTerm για να ενεργοποιήσετε δράσεις tmux.

Ο εύκολος τρόπος θα ήταν απλώς να μεταβείτε .tmux.confκαι να αντιστοιχίσετε τις ενέργειες σας σε αυτούς τους βασικούς δεσμούς. Για παράδειγμα, για να αλλάξετε το μέγεθος του παραθύρου στο iTerm, χρησιμοποιούμε το " ^⌘↑", ας χαρτογραφήσουμε την ίδια πληκτρολόγηση στο tmux με κάπως αφελές τρόπο:

bind ^⌘↑ resize-pane -U

Ωστόσο, ο παραπάνω κώδικας δεν θα λειτουργήσει επειδή δεν μπορείτε να χρησιμοποιήσετε ⌘ σε συνδέσεις πλήκτρων, και η χρήση SHIFT είναι επίσης πολύ περιορισμένη. Και ακόμη και αυτό ήταν δυνατό, ο iTerm θα παρεμπόδιζε αυτό το πλήκτρο στο παρελθόν.

Αντ 'αυτού, ρυθμίζουμε το νέο προφίλ iTerm και παρακάμπτουμε τις αντιστοιχίσεις κλειδιών για την αποστολή προκαθορισμένων ακολουθιών bytes, που θα ενεργοποιήσουν την αντίστοιχη ενέργεια στο tmux.

Για παράδειγμα, όταν ^⌘↑πατηθεί " ", η ακολουθία byte 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.

By the end of the day, I can create new tmux panes using ⌘D and ⌘⇧D, select panes using ⌘⌥→ , ^Tab to switch to most recently used window, ⌘⇧Enter to zoom pane, ^⌘← to resize pane to the left, ⌘[ to select previous pane, ⌘W to kill current pane, and so forth. So, I don’t need to fight against my muscle memory for most common actions.

For all other actions without correspondence I still use tmux way:C-a prefix followed by action key. If you’re curious about complete list of such keybindings, and how all this works in action, check out my tmux-config repository.

Also, I’ve found predefined layouts to be very useful: even-horizontal, even-vertical, main-horizontal, main-vertical, tiled. I usually work in main-vertical layout, and need to swap secondary pane with main forth and back. This is so common, that I decide to setup a keybinding both in tmux (prefix \) and 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 "!"'

As an extra step, you can setup this new iTerm profile as default, and tell it to jump into tmux session right at the start.

And don’t forget to run you iTerm2 in full screen mode. It’s worth it.

Native integration between iTerm2 and tmux

There is an integration between iTerm2 and tmux powered by iTerm that you might be interesting in.

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 - //medium.com/@sasom/auto-starting-tmux-in-iterm2-4276182d452a

samoshkin / tmux-config: Διαμόρφωση Tmux, που υπερφορτίζει το tmux σας για να δημιουργήσετε ένα άνετο και δροσερό περιβάλλον τερματικού - //github.com/samoshkin/tmux-config