tmux a gyakorlatban: iTerm2 és tmux

Az iterm2 vs tmux helyi használatának előnyei és hátrányai. Hogyan állítsuk be az iTerm2 profilt a kulcs leképezések felülírására az analóg tmux műveletek kiváltásához

Ez a „tmux gyakorlatban” posztsorozat 2. része.

Tehát az iTerm2 terminál emulátort használja OSX rendszeren. És hallott a tmux-ról, és úgy döntött, hogy kipróbálja. Google itt, Google ott, egy idő után olyan fogalmakat fog fel, mint a terminál multiplexelése, az ablakok, az ablaktáblák felosztása, és megérti a távoli gépek tmux használatát a munkamenet állapotának fenntartása és a hirtelen lekapcsolások túlélése érdekében.

Valamikor elgondolkodhat a tmux helyi használatán.

"Mivel az iTerm már képes létrehozni több virtuális ablakot egyetlen" fizikai "ablakban, képes felosztani, felcserélni és átméretezni az ablaktáblákat, valóban a tmux-ot kell használnom a helyi gépemen az iTerm helyett?"

Amikor a tmuxot tanultam, újra és újra visszatértem ugyanahhoz a kérdéshez. Némi gyakorlat nélkül nem volt világos. Ezért úgy döntöttem, hogy kipróbálom, és ma megoszthatom veletek az előnyöket és hátrányokat.

iTerm2 vs tmux a helyi gépen: előnyök és hátrányok

Előnyök:

  • Nevezett ablakok. Hasonló az iTerm lapjaihoz, de nevet adhat nekik
  • Állapotsor egész rendszerre kiterjedő információkkal. Tartalmazza a CPU-t, a memóriát, az online / offline állapotot, az akkumulátort, a felhasználót, a gazdagépet és a dátumot.
  • Állapotsor és megnevezett ablakok vannak benne, így az iTerm-et teljes képernyős módba kapcsolhatom. Ez lehetővé teszi számomra, hogy zavaró környezetben dolgozzak, és további 3 sort is kapjak. Ezeket korábban az OSX menüsor, az iTerm ablakkeret és az iTerm fülek sor vette fel.
  • Monitor ablak aktivitás vagy csend. Ha egy régóta futó parancsot futtatok egy ablaktáblán, átkapcsolhatok egy másik ablaktáblára, és értesítést kapok, ha bizonyos időközönként nem jelenik meg több kimenet az előző ablaktáblában

    Az iTermnek van valami hasonlója, de ez csak arról szól, hogy értesítsen, amikor a végrehajtás visszatér a parancssorba, és extra héjintegrációt kell telepítenie

  • Újradefiniált ablaktáblák elrendezése. Páros vízszintes, egyenletes függőleges, fő vízszintes, fő függőleges és csempézett
  • Váltás projektenként több helyi tmux munkamenet között a kontextus egyszerű váltása érdekében
  • Ha helyileg és távoli gépen is használja a tmux-ot, ugyanazt a megszokott terminál-környezetet kapja
  • A tmux használatakor sokkal kevésbé támaszkodik az iTerm2 egyedi szolgáltatásaira

    Ez megkönnyíti a migrációt egy másik terminál emulátorba , legyen az ugyanazon az operációs rendszeren vagy egy másik (Linux)

Hátrányok:

  • A tmux fenntartja saját görgetési pufferét. Nehezebb hozzá férni és szöveget másolni, mint az iTermnél (csak görgessen és válasszon egérrel)
  • Ha a szöveget tmux-ban másolja, akkor azt a tmux saját pufferében tárolja, és alapértelmezés szerint nem osztja meg az operációs rendszer vágólapjával. Hogy 100% -osan helytálló legyek, a rendszer vágólapjával való megosztás működik az iTerm2-ben, de csak azért, mert támogatja az OSC 52 ANSI menekülési szekvenciákat, amelyek lehetővé teszik az alkalmazások, például a tmux számára, az adatok elérését és tárolását a vágólapon. Az iTerm2 egy speciális eset. Csak próbálja meg másolni a szöveget az OSX alapértelmezett terminálján futó tmux-ban, amely nem támogatja az OSC52-et
  • Ha már megszokta az iTerm billentyűkötéseket, akkor meg kell tanulnia és át kell váltania a tmux billentyűkötésekre , amelyek nehézkesek. Egyetlen billentyűleütés helyett, mint például ⌘⌥->, két billentyűleütés-javításra van szükség, s: preamelyet egy másik billentyű követ, adott tmux művelethez hozzárendelve.

Személy szerint úgy döntöttem, hogy folytatom a tmux-ot és annak jellemzőit, és kevésbé támaszkodom az iTerm2 specifikus szolgáltatásaira. Valóban, most az iTerm-et csak alagútként használom a tmux-hoz?

Problémák a scrollback puffer és integráció OS vágólapra nagyon fontos , hogy akkor is úgy dönt, hogy feladja elfogadása tmux. Ezekkel a témákkal a jövőbeni bejegyzéseimben foglalkozunk.

Az iTerm kulcs-hozzárendelések felülbírálása a tmux művelet elindításához

Ma nézzük meg, hogyan használhatjuk a megszokott iTerm billentyűkötéseket, miközben tmux környezetben dolgozunk. Az ötlet az, hogy feltérképezzük az iTerm billentyűleütéseit a tmux műveletek kiváltására.

A legegyszerűbb módszer az lenne, ha elmennénk .tmux.confés feltérképeznénk a tmux műveleteket ezekhez a billentyűkötésekhez. Például az iTerm ablaktábla átméretezéséhez használjuk a „ ^⌘↑” -t, térképezzük ugyanezt a billentyűleütést tmux-ban kissé naiv módon:

bind ^⌘↑ resize-pane -U

A fenti kód azonban nem fog működni, mert a mu nem használható a tmux billentyűkötésekben, és a SHIFT használata szintén nagyon korlátozott. És még az is lehetséges volt, hogy az iTerm korábban elfogta ezt a billentyűleütést.

Ehelyett új iTerm-profilt állítunk be, és felülírjuk a kulcs-hozzárendeléseket az előre konfigurált bájtsorozatok küldéséhez, amelyek a megfelelő műveletet indítják el tmux-ban.

Például a „ ^⌘↑” megnyomásakor a bájtsorozat 0x01 0x1b 0x5b 0x31 0x3b 0x35 0x41a terminálon keresztül eljut a futó tmux példányhoz. C-a C-↑Kulcsmegkötésként értelmezi őket és konfigurációnknak resize-pane -Umegfelelően aktivál .tmux.conf.

Tehát hogyan lehet megszerezni ezeket a hex kódokat? Használja showkey, odvagy hexdumpparancsokkal jelenítheti bináris billentyűlenyomás- billentyűzetről:

$ 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

Megjegyzés : showkeynem érhető el OSX-en, de mindig SSH-t használhat Linux távoli gépen és használhatja? Ha hatalmas rezsiként hangzik, csak használja az o d vagy a h billentyűtexdump.

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

Bármely kulcsot át lehet alakítani ily módon, de ezt csak a leggyakoribbak számára teszem, amelyek tmux-ban rendelkeznek analóg művelettel.

A nap végére új tmux ablaktáblákat hozhatok létre a ⌘Dés ⌘⇧Dsegítségével, a ⌘⌥→ , ^Tab segítségével választhatok ablaktáblákat a legutóbb használt ablakra való váltáshoz, az ⌘⇧Entert a nagyításhoz, ^⌘←a bal oldali átméretezéshez, ⌘[ az előző ablaktábla kijelöléséhez, ⌘Waz aktuális ablaktábla megöléséhez, és így tovább. Tehát a leggyakoribb cselekedetekért nem kell küzdenem az izommemóriám ellen.

Minden egyéb, levelezés nélküli műveletnél továbbra is a tmux way: C-aprefixet követem, amelyet a műveletkulcs követ. Ha kíváncsi az ilyen billentyűkapcsolatok teljes listájára, és arra, hogy mindez hogyan működik, nézze meg a tmux-config tárat.

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