tmux u praksi: iTerm2 i tmux

Prednosti i nedostaci korištenja iterm2 u odnosu na tmux lokalno. Kako postaviti iTerm2 profil da poništi mapiranje ključeva za pokretanje analognih tmux radnji

Ovo je drugi dio serije "tmux u praksi".

Dakle, koristite emulator terminala iTerm2 na OSX-u. A čuli ste za tmux i odlučili probati. Google ovdje, Google tamo, nakon nekog vremena shvaćate koncepte kao što su multipleksiranje terminala, prozori, razdvajanje okna i razumijete upotrebu tmux-a na udaljenim računalima kako biste nastavili sa sesijom i preživjeli nagle prekide veze.

U nekom trenutku, mogli biste se zapitati o lokalnoj upotrebi tmuxa.

"S obzirom na to da iTerm već može stvoriti više virtualnih prozora unutar jednog 'fizičkog' prozora, može podijeliti, zamijeniti i promijeniti veličinu okna, trebam li zaista koristiti tmux na svom lokalnom računalu umjesto iTerma?"

Kad sam učio tmux, iznova sam se vraćao istom pitanju. Nije bilo jasno bez neke prakse. Stoga sam odlučio pokušati i danas s vama mogu podijeliti prednosti i nedostatke.

iTerm2 vs tmux na lokalnom stroju: prednosti i nedostaci

Prednosti:

  • Imenovani prozori. Slično karticama u iTermu, ali možete im dati ime
  • Redak stanja s informacijama za cijeli sustav. Uključuje procesor, memoriju, mrežni / izvanmrežni status, bateriju, korisnika, domaćina i vrijeme.
  • Imajući statusnu liniju i skup imenovanih prozora unutar nje, mogu iTerm pretvoriti u način cijelog zaslona. To mi omogućuje rad u okruženju bez ometanja, a uz to dobivam i dodatna 3 reda. Prethodno su ih snimili OSX traka izbornika, okvir prozora iTerm i red kartica iTerm.
  • Prozor monitora radi aktivnosti ili tišine. Kad pokrenem dugotrajnu naredbu u jednom oknu, mogu se prebaciti na drugo okno i dobiti obavijest kada se u prethodnom oknu više ne pojavi izlaz za neki interval

    iTerm ima nešto slično, ali radi se samo o tome da vas obavijesti kada se izvršenje vrati u naredbeni redak i zahtijeva instaliranje dodatne integracije ljuske

  • Redefinirani raspored okna. Ravno-vodoravno, ujednačeno-okomito, glavno-vodoravno, glavno-okomito i popločano
  • Sposobnost prebacivanja između nekoliko lokalnih tmux sesija po projektu za jednostavno prebacivanje konteksta
  • Ako tmux koristite lokalno i na udaljenom računalu, dobili biste isto poznato okruženje terminala
  • Kada koristite tmux, puno se manje oslanjate na jedinstvene značajke iTerm2

    To olakšava migraciju na drugi emulator terminala , bio on na istom OS-u ili drugom (Linux)

Nedostaci:

  • tmux održava vlastiti međuspremnik za pomicanje. Teže mu je pristupiti i kopirati tekst nego u iTermu (samo pomičite i odaberite mišem)
  • Ako kopirate tekst u tmuxu, on se pohranjuje u vlastiti međuspremnik tmuxa i prema zadanim postavkama ne dijeli se s međuspremnikom OS-a. Da bismo bili 100% ispravni, dijeljenje sa međuspremnikom sustava funkcionira u iTerm2, ali samo zato što podržava OSC 52 ANSI izlazne sekvence koje aplikacijama poput tmuxa omogućavaju pristup i pohranu podataka u međuspremnik. iTerm2 je poseban slučaj. Samo pokušajte kopirati tekst u tmuxu koji se izvodi u zadanom OSX terminalu, koji ne podržava OSC52
  • Ako ste se već navikli na iTerm veze s tipkama, morate naučiti i prijeći na veze tipki tmux , koje su glomazne. Umjesto jednog pritiska tipke poput ⌘⌥->, trebaju vam dva s: prepopravka unosa tipki nakon kojih slijedi još jedan ključ, preslikan na određenu tmux akciju.

Osobno sam odlučio nastaviti s tmuxom i njegovim značajkama, a manje se oslanjati na specifične značajke iTerm2. Doista, trenutno koristim iTerm samo kao tunel za tmux?

Problemi s unatrag tampon i integraciju s OS prijenosnik vrlo bitno , da čak možete odlučiti odustati usvajanje tmux. Ovim ćemo se temama pozabaviti u mojim budućim postovima.

Nadjačajte preslikavanja iTerm ključeva da biste pokrenuli tmux akciju

Danas, da vidimo kako možemo koristiti poznate iTerm veze za tipke dok radimo u tmux okruženju. Ideja je mapirati pritiske tipki u iTermu kako bi se pokrenule tmux akcije.

Jednostavan način bio bi samo otići .tmux.confi preslikati tmux akcije na te tipkovnice. Na primjer, da bismo promijenili veličinu okna u iTermu, koristimo “ ^⌘↑”, mapirajmo isti pritisak tipke u tmux na pomalo naivan način:

bind ^⌘↑ resize-pane -U

Međutim, gornji kod neće raditi jer ne možete koristiti ⌘ u vezicama tipkovnice tmux, a upotreba SHIFT-a također je vrlo ograničena. Pa čak i da je to bilo moguće, iTerm bi prije presreo taj pritisak tipke.

Umjesto toga postavljamo novi iTerm profil i nadjačavamo mapiranje ključeva za slanje unaprijed konfiguriranih sekvenci bajtova, što će pokrenuti odgovarajuću akciju u tmuxu.

Na primjer, kada se ^⌘↑pritisne “ ”, slijed bajtova 0x01 0x1b 0x5b 0x31 0x3b 0x35 0x41šalje se preko terminala na pokrenutu instancu tmux. Interpretira ih kao C-a C-↑vezivanje tipki i okidače resize-pane -Uprema našoj .tmux.confkonfiguraciji.

Pa kako možete dobiti te hex kodove? Koristite showkey, odili hexdumpnaredbe za prikaz binarnog zastupljenost pritisaka na tipke iz tipkovnice:

$ 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

Napomena : showkeynije dostupan na OSX-u, ali uvijek možete SSH na Linux udaljenom stroju i koristiti ga?. Ako zvuči kao ogroman trošak, samo upotrijebite o d ili hexdump.

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

Na ovaj način možete remapirati bilo koji ključ, ali ja to radim samo za najčešće, koji imaju analogno djelovanje u tmuxu.

Do kraja dana mogu stvoriti nova tmux okna koristeći ⌘Di ⌘⇧D, odabrati okna pomoću ⌘⌥→ , ^Tab za prelazak na nedavno korišteni prozor, ⌘⇧Enter za zumiranje okna, ^⌘←za promjenu veličine okna u lijevo, ⌘[ za odabir prethodnog okna, ⌘Wza ubijanje trenutnog okna, i tako dalje. Dakle, ne trebam se boriti protiv svog mišićnog pamćenja za najčešće akcije.

Za sve ostale radnje bez korespondencije i dalje koristim tmux way: C-aprefiks praćen akcijskim ključem. Ako vas zanima potpuni popis takvih povezivanja tipki i kako sve to djeluje na djelu, pogledajte moje spremište tmux-config.

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 keymaps for tmux — Dan Lowe — //tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/

Auto-Starting Tmux in iTerm2 — Sašo Matejina — Medium — //medium.com/@sasom/auto-starting-tmux-in-iterm2-4276182d452a

samoshkin/tmux-config: Tmux configuration, that supercharges your tmux to build cozy and cool terminal environment — //github.com/samoshkin/tmux-config