de Alexey Samoshkin

tmux în practică: iTerm2 și tmux

Avantajele și dezavantajele utilizării iterm2 vs tmux la nivel local. Cum să configurați profilul iTerm2 pentru a suprascrie mapările cheie pentru a declanșa acțiuni tmux analogice

Aceasta este a doua parte a „tmux în practică”Post seria.

tmux in practica iTerm2 si
experiență tmux în iTerm cu ecran complet cu 2 sesiuni la distanță imbricate într-una locală

Deci, utilizați emulatorul de terminal iTerm2 pe OSX. Și ați auzit despre tmux și ați decis să încercați. Google aici, Google acolo, după un timp înțelegeți concepte precum multiplexarea terminalelor, ferestrele, împărțirea panoului și înțelegeți utilizarea tmux pe mașinile la distanță pentru a persista starea sesiunii și a supraviețui deconectărilor bruste.

La un moment dat, s-ar putea să vă întrebați despre utilizarea tmux la nivel local.

„Având în vedere că iTerm poate crea mai multe ferestre virtuale într-o singură fereastră„ fizică ”, poate împărți, schimba și redimensiona panourile, chiar am nevoie să folosesc tmux pe mașina mea locală în loc de iTerm?”

Când învățam tmux, mă întorceam la aceeași întrebare din nou și din nou. Nu era clar fără o anumită practică. Așa că am decis să încerc și astăzi vă pot împărtăși beneficii și dezavantaje.

iTerm2 vs tmux pe mașina locală: avantaje și dezavantaje

Beneficii:

  • Ferestre numite. Similar cu filele din iTerm, dar le puteți da un nume
  • O linie de stare cu informații la nivel de sistem. Include procesor, memorie, stare online / offline, baterie, utilizator, gazdă și dată.
  • Având linie de stare și un set de ferestre numite în interiorul său, pot transforma iTerm în modul ecran complet. Acest lucru îmi permite să lucrez în un mediu lipsit de distragere a atenției și, de asemenea, obțineți 3 rânduri suplimentare. Acestea au fost preluate anterior de bara de meniu OSX, cadrul ferestrei iTerm și rândul de file iTerm.
  • Monitorizați fereastra pentru activitate sau tăcere. Când rulez o comandă de lungă durată într-un panou, pot trece la un alt panou și pot fi notificat când nu mai apare nicio ieșire în panoul anterior pentru un anumit interval
    iTerm are ceva similar, dar este vorba doar despre notificarea dvs. când executarea revine la promptul de comandă și necesită instalarea suplimentară integrare shell
  • Structuri de panouri redefinite. Par-orizontal, par-vertical, principal-orizontal, principal-vertical și cu gresie
  • Abilitatea de a comuta între mai multe sesiuni tmux locale per proiect pentru a schimba cu ușurință contextul
  • Dacă utilizați tmux atât local, cât și pe mașină la distanță, veți primi același mediu terminal familiar
  • Când utilizați tmux, vă bazați pe caracteristicile unice iTerm2 mult mai puțin
    Aceasta o face mai ușor de migrat către un alt emulator terminal, fie pe același sistem de operare sau pe altul (Linux)

Dezavantaje:

  • tmux își menține propriul buffer de derulare. Este mai dificil să îl accesați și să copiați text decât în ​​iTerm (doar derulați și selectați cu mouse-ul)
  • Dacă copiați text în tmux, acesta este stocat în tamponul propriu tmux și nu este partajat în mod implicit cu clipboard-ul sistemului dvs. de operare. Pentru a fi 100% corect, partajarea cu clipboardul sistemului funcționează în iTerm2, dar doar pentru că acceptă secvențe de evacuare OSC 52 ANSI care permit aplicației precum tmux să acceseze și să stocheze date în clipboard. iTerm2 este un caz special. Încercați doar să copiați text în tmux care rulează în terminalul implicit OSX, care nu acceptă OSC52
  • Dacă sunteți deja obișnuiți cu legăturile de taste iTerm, trebuie să învățați și să treceți la legăturile de taste tmux, care sunt greoaie. În loc de o singură apăsare de tastă, cum ar fi ⌘⌥->, aveți nevoie de două apăsări de tastes: prefix, urmat de o altă cheie, mapată la acțiunea tmux specifică.

Personal, am decis să merg mai departe cu tmux și caracteristicile sale și să mă bazez mai puțin pe caracteristicile specifice iTerm2. Într-adevăr, chiar acum folosesc iTerm doar ca un tunel către tmux?

Problemele cu buffer-ul scrollback și integrarea cu clipboard-ul OS sunt extrem de vitale, acea puteți decide chiar să renunțați la adoptarea tmux. Vom aborda aceste subiecte în postările mele viitoare.

Înlocuiți mapările cheilor iTerm pentru a declanșa acțiunea tmux

Astăzi, să vedem cum putem folosi legăturile de taste iTerm familiare în timp ce lucrăm în mediul tmux. Ideea este să mapezi apăsările de taste în iTerm pentru a declanșa acțiuni tmux.

Calea ușoară ar fi doar să mergi la .tmux.conf și mapați acțiunile tmux la acele legături de taste. De exemplu, pentru a redimensiona panoul din iTerm, folosim „^⌘↑”, Să mapăm aceeași apăsare de tastă în tmux într-un mod oarecum naiv:

bind ^⌘↑ resize-pane -U

Cu toate acestea, codul de mai sus nu va funcționa, deoarece nu puteți utiliza ⌘ în legăturile de taste tmux, iar utilizarea SHIFT este, de asemenea, foarte limitată. Și chiar dacă era posibil, iTerm ar intercepta acea apăsare de tastă înainte.

În schimb, configurăm un nou profil iTerm și anulăm mapările cheilor pentru a trimite secvențe de octeți preconfigurate, care vor declanșa acțiunea corespunzătoare în tmux.

1612077607 917 tmux in practica iTerm2 si
Crearea profilului dedicat și suprascrierea mapărilor cheilor

De exemplu, când „^⌘↑”Apăsat, secvență de octeți 0x01 0x1b 0x5b 0x31 0x3b 0x35 0x41 este trimis prin terminal către instanța tmux care rulează. Le interpretează ca C-a C-↑ legarea de taste și declanșatoare resize-pane -U conform nostru .tmux.conf configurare.

Deci, cum puteți obține aceste coduri hex? Utilizare showkey, od sau hexdump comenzi pentru vizualizarea reprezentării binare a apăsărilor de taste de la tastatură:

$ 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

Note: showkey is not available on OSX, but you can always SSH on Linux remote machine and use it ?. If it sounds like a huge overhead, just use od or hexdump.

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

You can remap whatever key in this way, but I do this only for most common, which have analogue action in 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 "!" '

Ca un pas suplimentar, puteți configura acest nou profil iTerm ca implicit și îi puteți spune să treacă în sesiunea tmux chiar la început.

1612077607 169 tmux in practica iTerm2 si

Și nu uitați să vă rulați iTerm2 în modul ecran complet. Se merită.

Integrare nativă între iTerm2 și tmux

Este un integrare între iTerm2 și tmux alimentat de iTerm în care ați putea fi interesant.

Ideea este că iTerm încă se ocupă de gestionarea ferestrelor și a panoului, menține tampoane de derulare, copiere / lipire ca de obicei, dar toate ferestrele sunt susținute de sesiunea tmux sub capotă. Este într-adevăr sesiunea tmux, dar abstractizată și încapsulată de mediul iTerm familiar pentru dvs. Puteți închide iTerm, deschide-l înapoi și reatașa la sesiunea anterioară, fără a pierde starea.

Cu toate acestea, nu are prea mult sens pentru mediul local (util numai în cazul unui accident iTerm care este un eveniment extrem de rar). Personal, nu-mi place această abordare, deoarece mă ascunde de faptul că folosesc tmux și expune doar acele caracteristici tmux cele mai comune, care au analogi în iTerm (creați fereastră, împărțiți panoul, redimensionați fereastra / panoul, închideți sesiune).

Tmuxintegrare · Wiki · George Nachman / iterm2 · GitLab – https://gitlab.com/gnachman/iterm2/wikis/TmuxIntegration

Hărți cheie iTerm2 pentru tmux – Dan Lowe – http://tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/

Pornire automată Tmux în iTerm2 – Sašo Matejina – Mediu – https://medium.com/@sasom/auto-starting-tmux-in-iterm2-4276182d452a

samoshkin / tmux-config: configurație Tmux, care vă supraîncarcă tmux-ul pentru a crea un mediu terminal confortabil și răcoros – https://github.com/samoshkin/tmux-config