tmux a gyakorlatban: scrollback buffer

A különbség a terminál és a tmux görgetési pufferek között, valamint a másolási mód, a görgetés és a tmux viselkedés egér kiválasztásának módja.

Ez a gyakorlatban a tmuxom 3. része.

Általában a terminálemulátorok visznek vissza puffert, így felfedezheti a múltbeli kimenetet, amikor az elmozdul a látómezőből. A tmux, mint más teljes képernyős terminálalkalmazások, például a vim, a szülőterminál úgynevezett alternatív képernyő pufferében fut. Az alternatív puffer pontos szélességi és magassági méretekkel rendelkezik, mint az ablak fizikai mérete.

Az alternatív puffer használatának számos hatása van:

  • Minden kimenet, amely meghaladja az alternatív puffer látható részét, elvész. Amint a vonalak eltűnnek a szem elől, elvesznek. Az előzmények elvesztésének megakadályozása érdekében a tmux saját „belső” görgetési puffert valósít meg. Ennek az a következménye, hogy a tmux belső visszagörgetéssel nem lehet dolgozni, mint általában a terminálon belül.
  • A tmux belsejében előállított kimenet (ugyanez vonatkozik a vim, nano, man, kevesebb és így tovább) nem terjed át a külső terminál visszagörgetési előzményeire. Amikor bezárja a teljes képernyős alkalmazást, ugyanabba az állapotba kerül, amikor elindította az alkalmazást, és többé nem látja az alkalmazás belsejéből származó kimenetet.

A gyakorlatban, ha megszokja a visszagörgetést ⌘↑az iTerm használatával , és ha ugyanezt fogja megtenni a tmux munkamenet futásán belül, akkor a külső iTerm visszagörgetési pufferét fogja vezérelni és görgetni, nem pedig a tmux belső görgetési pufferét.

A megoldás az, hogy tmux specifikus ellenőrzések hozzáférni saját scrollback puffer: Ctrl-bmajd [Másolás módba vált, használata Down/Upnyilakkal vagy PageDownés PageUpgombokat, qvagy Entera kilépéshez másolási üzemmódban.

Néhány ember, aki ezt bosszantónak találja - konfigurálja a tmux görgetési puffert úgy, hogy megjelenjen a szülőterminál görgetési pufferében -, így csak ismerős görgetési vezérlőket használhatnak. Lásd ezt a bejegyzést. Ez a megoldás azonban csak arra korlátozódik, hogy csak 1 ablakkal és 1 ablaktáblával rendelkezzen tmux munkamenet. És amikor leválaszt vagy bezár egy tmux munkamenetet, a szülőterminál szennyeződik a tmux ablak kimenetével.

Személy szerint a tmux scrollback-et használom a fenti feltörések nélkül, de barátságosabbá és ismertebbé alakítom a konfigurációját.

Először is, nem szeretek prefix,[másolási módba lépni. Már hozzászoktam, hogy ⌘↑kezdeni görgetés iTerm, és adtam alábbi gyökér billentyűkombináció:

# trigger copy mode bybind -n M-Up copy-mode

Miután másolási módban van, folytathatja a megnyomást M-Upaz 1 sor felfelé görgetéséhez. A szokásos PageDownés a PageUpkezelőszervek állnak rendelkezésre a teljes képernyő, az extra M-PageDownés M-PageUpa képernyő fele közötti görgetéshez (nagyon kényelmes).

# Scroll up/down by 1 line, half screen, whole screenbind -T copy-mode-vi M-Up send-keys -X scroll-upbind -T copy-mode-vi M-Down send-keys -X scroll-downbind -T copy-mode-vi M-PageUp send-keys -X halfpage-upbind -T copy-mode-vi M-PageDown send-keys -X halfpage-downbind -T copy-mode-vi PageDown send-keys -X page-downbind -T copy-mode-vi PageUp send-keys -X page-up

Sőt, még akkor is, ha belépek a tmux munkamenetbe, továbbra is folytathatom a belső tmux visszagörgetési puffer használatát ⌘↑és ⌘↓vezérlését, az iTerm helyett. Lehetőség van az egyedi iTerm-profil használatával, néhány billentyűmegkötéssel felülbírálva a tmux műveletek elindításához. Az ⌘↑iTermben így megnyomva csak M-Upbillentyűleütést küld a tmux munkamenetnek.

További részletekért olvassa el a „tmux gyakorlatban” sorozat előző részét: tmux a gyakorlatban: iTerm2 és tmux integráció.

Egy másik tmux alapértelmezett beállítás, amelyet szívesebben megváltoztatnék, az egér görgője. 5 sorral görget, ami nagy ugrásnak tűnik. Csökkentjük, hogy 2 sorral görgethessünk:

# When scrolling with mouse wheel, reduce number of scrolled rows per tick to "2" (default is 5)
bind -T copy-mode-vi WheelUpPane select-pane \; send-keys -X -N 2 scroll-upbind -T copy-mode-vi WheelDownPane select-pane \; send-keys -X -N 2 scroll-down

Nos, most beszéljünk a szöveg másolásáról, ha másolás módban van. Megszokom a szöveg másolását egérrel. Engedélyezzük az egér támogatását:

set -g mouse on

Alapértelmezés szerint, amikor az egérrel tmux-ban választja ki a szöveget, az átmásolódik a pufferbe, és azonnal kilép a másolási módból. Az aktuális görgetési pozíciót a kimenet végére visszaállítja, és parancssori módba kerül. Lássuk ezt működés közben:

Amint észreveszi, minden alkalommal, amikor az egérrel szöveget választok, ez kikapcsol a másolási módból. Nagyon idegesítő. Általában, amikor elakadtam valamilyen feladattal, hajlamos vagyok ide vagy oda kiválasztani néhány szöveget, csak meditáció céljából (ez segít összpontosítani?) Vagy érdemes csak kiválasztania néhány szöveget, amelyet kiemel a mellette ülő kollégának.

Szóval csípjük meg ezt. Nem akarjuk, hogy elindítsuk a másolási módot. Nem akarjuk, hogy a kijelölés törlődjön az egér húzási eseményén. A kijelölés szövege utólag az egér bal gombjával átmásolható.

# Do not copy selection and cancel copy mode on drag end event# Prefer iTerm style selection: select, then mouse click to copy to bufferunbind -T copy-mode-vi MouseDragEnd1Panebind -T copy-mode-vi MouseDown1Pane select-pane \;\ send-keys -X copy-pipe "pbcopy" \;\ send-keys -X clear-selection

Nézzük meg az eredményt:

Ahhoz, hogy a másolat puffer elemek és illessze be a legutóbbi tétel, használata C-pés p:

bind p paste-bufferbind C-p choose-buffer

Ez a mai nap. Maradjon velünk. A „tmux gyakorlatban” sorozat következő részében a vágólap integrációjáról és arról, hogyan lehet megosztani a tmux belsejében másolt szöveget a rendszer vágólapjával (mind helyben, mind távmunkában, OSX-en és Linuxon).

BTW, láthatja az összes konfigurációs módosítást működés közben, csak fizesse meg a tmux-config repót.

Trükk

Ha teljesen meg akarja kerülni a tmux másolási módot, és az iTerm segítségével választja ki a szöveget, tartsa lenyomva a gombot pt> key while dragging you mouse.

Resources and links

shell — What exactly is scrollback and scrollback buffer? — Unix & Linux Stack Exchange — //unix.stackexchange.com/questions/145050/what-exactly-is-scrollback-and-scrollback-buffer

tmux scrollback with iTerm2 • dan.carley.co — //dan.carley.co/blog/2013/01/11/tmux-scrollback-with-iterm2/

tmux copy mouse selected text to clipboard automatically on mouse release — Stack Overflow — //stackoverflow.com/questions/36815879/tmux-copy-mouse-selected-text-to-clipboard-automatically-on-mouse-release

keyboard shortcuts — tmux — scroll up/down with shift + page up/down into a pane — Super User — //superuser.com/questions/702189/tmux-scroll-up-down-with-shift-page-up-down-into-a-pane

[question/request] copy-mode without automatically selecting a pane? · Issue #1021 · tmux/tmux — //github.com/tmux/tmux/issues/1021

ssh — Leaving tmux scrollback in terminal (iTerm2) — Stack Overflow — //stackoverflow.com/questions/12865559/leaving-tmux-scrollback-in-terminal-iterm2

command line — Use terminal scrollbar with tmux — Super User — //superuser.com/questions/310251/use-terminal-scrollbar-with-tmux