tmux i praksis: iTerm2 og tmux

Fordele og ulemper ved at bruge iterm2 vs tmux lokalt. Sådan opsættes iTerm2-profil til at tilsidesætte nøgletilknytninger for at udløse analoge tmux-handlinger

Dette er 2. del af "tmux i praksis" -serien.

Så du bruger iTerm2 terminalemulator på OSX. Og du har hørt om tmux og besluttet at prøve det. Google her, Google der, efter et stykke tid griber du begreber som terminalmultiplexing, vinduer, rudesplitning og forstå tmux-brug på eksterne maskiner for at fortsætte sessionstilstanden og overleve pludselige afbrydelser.

På et eller andet tidspunkt spekulerer du måske på tmux-brug lokalt.

"Da iTerm allerede kan oprette flere virtuelle vinduer inde i et enkelt 'fysisk' vindue, kan opdele, bytte og ændre størrelse på ruder, skal jeg virkelig bruge tmux på min lokale maskine i stedet for iTerm?"

Da jeg lærte tmux, var jeg vendt tilbage til det samme spørgsmål igen og igen. Det var ikke klart uden nogen øvelse. Så jeg har besluttet at prøve det, og i dag kan jeg dele fordele og ulemper med dig.

iTerm2 vs tmux på lokal maskine: fordele og ulemper

Fordele:

  • Navngivne vinduer. Svarende til faner i iTerm, men du kan give dem et navn
  • En statuslinje med systemomfattende information. Inkluderer CPU, hukommelse, online / offline status, batteri, bruger, vært og dato.
  • Efter at have statuslinje og sæt navngivne vinduer inde i det, kan jeg vende iTerm til fuldskærmstilstand. Dette giver mig mulighed for at arbejde i et distraktionsfrit miljø og også få 3 ekstra rækker. Disse blev tidligere taget af OSX menulinje, iTerm-vinduesramme og iTerm-fanerække.
  • Overvågningsvindue for aktivitet eller stilhed. Når jeg kører en langvarig kommando i en rude, kan jeg skifte til en anden rude og få besked, når der ikke vises mere output i den forrige rude i et interval

    iTerm har noget lignende, men det handler kun om at underrette dig, når udførelsen vender tilbage til kommandoprompten og kræver installation af ekstra shellintegration

  • Omdefinerede ruder layout. Jævn-vandret, lige-lodret, hoved-vandret, hoved-lodret og flisebelagt
  • Mulighed for at skifte mellem flere lokale tmux-sessioner pr. Projekt for nemt at skifte kontekst
  • Hvis du bruger tmux både lokalt og på en ekstern maskine, får du det samme velkendte terminalmiljø
  • Når du bruger tmux, stoler du på iTerm2 unikke funktioner meget mindre

    Dette gør det lettere at migrere til en anden terminalemulator , det være sig på samme operativsystem eller en anden (Linux)

Ulemper:

  • tmux opretholder sin egen scrollback-buffer. Det er sværere at få adgang til det og kopiere tekst end i iTerm (bare rul og vælg med musen)
  • Hvis du kopierer tekst i tmux, gemmes den i tmux egen buffer og deles ikke som standard med dit OS-udklipsholder. For at være 100% korrekt fungerer deling med systemudklipsholder i iTerm2, men bare fordi det understøtter OSC 52 ANSI escape-sekvenser, der gør det muligt for applikationer som tmux at få adgang til og gemme data i udklipsholderen. iTerm2 er et specielt tilfælde. Prøv bare at kopiere tekst i tmux, der kører i OSX-standardterminal, som ikke understøtter OSC52
  • Hvis du allerede er vant til iTerm-tastbindinger, skal du lære og skifte til tmux-tastbindinger , som er besværlige. I stedet for et enkelt tastetryk som ⌘⌥-> har du brug for to keystoke- s: prerettelser efterfulgt af en anden tast, kortlagt til specifik tmux-handling.

Personligt besluttede jeg at gå videre med tmux og dets funktioner og stole mindre på iTerm2-specifikke funktioner. Faktisk bruger jeg lige nu iTerm som en tunnel til tmux?

Problemer med scrollback-buffer og integration med OS-udklipsholder er meget vigtige , at du endda kan beslutte at opgive vedtagelsen af ​​tmux. Vi behandler disse emner i mine fremtidige indlæg.

Tilsidesæt iTerm-nøgletilknytninger for at udløse tmux-handling

Lad os i dag se, hvordan vi kan bruge velkendte iTerm-nøglebindinger, mens vi arbejder i tmux-miljø. Ideen er at kortlægge tastetryk i iTerm for at udløse tmux-handlinger.

Den nemme måde ville bare være at gå til .tmux.confog kortlægge tmux-handlinger til disse tastebindinger. For eksempel for at ændre størrelse på rude i iTerm bruger vi “ ^⌘↑”, lad os kortlægge det samme tastetryk i tmux på en noget naiv måde:

bind ^⌘↑ resize-pane -U

Koden ovenfor fungerer dog ikke, fordi du ikke kan bruge ⌘ i tmux-tastebindinger, og SHIFT-brugen er også meget begrænset. Og selv om det var muligt, ville iTerm opfange det tastetryk før.

I stedet opsætter vi ny iTerm-profil og tilsidesætter nøgletilknytninger for at sende forudkonfigurerede sekvenser af bytes, der vil udløse tilsvarende handling i tmux.

Når der f.eks. Trykkes på “ ^⌘↑”, 0x01 0x1b 0x5b 0x31 0x3b 0x35 0x41sendes rækkefølge af bytes gennem terminalen til den kørende tmux-forekomst. Det fortolker dem som C-a C-↑nøglebinding og udløser i resize-pane -Uhenhold til vores .tmux.confkonfiguration.

Så hvordan kan du få disse hex-koder? Brug showkey, odeller hexdumpkommandoer for at se binær repræsentation af tastetryk fra tastaturet:

$ 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

Bemærk : showkeyer ikke tilgængelig på OSX, men du kan altid SSH på Linux-fjernmaskine og bruge den?. Hvis det lyder som et stort overhead, skal du bare bruge o d eller hexdump.

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

Du kan kortlægge hvilken som helst nøgle på denne måde, men jeg gør det kun for de mest almindelige, som har analog handling i tmux.

Ved slutningen af ​​dagen kan jeg oprette nye tmux-ruder ved hjælp af ⌘Dog ⌘⇧Dvælge ruder ved hjælp af ⌘⌥→ , ^Tab for at skifte til det senest anvendte vindue, ⌘⇧Enter for at zoome rude, for ^⌘←at ændre størrelse på rude til venstre, for ⌘[ at vælge forrige rude, for ⌘Wat dræbe nuværende rude, og så videre. Så jeg behøver ikke kæmpe mod min muskelhukommelse for de mest almindelige handlinger.

For alle andre handlinger uden korrespondance bruger jeg stadig tmux måde: C-apræfiks efterfulgt af handlingstast. Hvis du er nysgerrig efter en komplet liste over sådanne tastebindinger, og hvordan alt dette fungerer i aktion, skal du tjekke mit tmux-config-lager.

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

Automatisk start af Tmux i iTerm2 - Sašo Matejina - Medium - //medium.com/@sasom/auto-starting-tmux-in-iterm2-4276182d452a

samoshkin / tmux-config: Tmux-konfiguration, der overbelaster din tmux for at opbygge hyggeligt og køligt terminalmiljø - //github.com/samoshkin/tmux-config