Jak wyczyścić bufor przewijania w Tmux?

FYI, używam Tmux przez Mac OS X Terminal app.

 134
Author: Arslan Ali, 2012-05-11

12 answers

To samo pytanie dręczy mnie od dłuższego czasu. Oto najlepsze, co wymyśliłem. Włóż to do swojego .tmux.plik conf:

bind -n C-k clear-history

Wiąże ctrl-k z poleceniem tmux clear-history. Opcja-n Po bind sprawia, że nie musisz wydawać przedrostka polecenia tmux (domyślnie ctrl-B). Używam Basha, więc ctrl-l już robi odpowiednik wpisania "clear" w wierszu poleceń. Z tych dwóch klawiszy dostaję ładny Ctrl-l, Ctrl-k combo, który przesuwa cały bufor przewijania off ekran ("wyczyść"), a następnie usuwa całą historię (polecenie tmux" Wyczyść-historię").

To nie jest tak ładne jak Terminal, iTerm, lub Konsole 1-Klawisz combo do wyczyszczenia go, ale to świat lepszy niż wpisywanie w clear-historia cały czas.

 165
Author: juanpaco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-11 15:06:36

Jak poprawnie stwierdził @juanpaco, {[0] } jest poleceniem do wyczyszczenia bufora przewijania.
Dodam, że lubię również wyczyścić to, co jest na ekranie w tym samym poleceniu. Wydanie send-keys -R resetuje (czyści) ekran, więc używam następujących w moim .tmux.conf

bind-key b send-keys -R \; clear-history

To czyści ekran i bufor przewijania.

 45
Author: z5h,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-17 14:49:10

Jeśli chcesz połączyć CTRL-L plus Wyczyść historię, dodaj to do swojego ~/.tmux.conf:

bind u send-keys C-l \; run-shell "sleep .3s" \; clear-history

To działa nawet, jeśli jesteś w powłoce MySQL na przykład.

 17
Author: plu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-25 15:28:05

Uznałem, że użycie send-keys -R jest trochę powolne - oto inny sposób na wyczyszczenie ekranu i historii za pomocą jednego polecenia

bind-key C send-keys "clear && tmux clear-history" \; send-keys "Enter"  

Zagnieżdżone wywołanie tmux jest używane jako bardziej oczywiste

bind-key C send-keys "clear" \; send-keys "Enter" \; clear-history

Nie udaje się wyczyścić bieżący tekst ekranu z historii-polecenie Wyczyść historię wydaje się działać w osobnym wątku, aby wysłać klucze.

 16
Author: cage433,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-25 20:53:17

Każda odpowiedź tutaj mówi o dodawaniu nowych wiązań klawiszy.

Jeśli chcesz to robić od czasu do czasu, nie potrzebujesz mapowania...

Prefiks Domyślnie <Ctrl-b>

Po prostu wpisz <prefix>: w odpowiednim okienku, a następnie wpisz clear-history i naciśnij enter.

Jedną z fajnych rzeczy w tmux jest to, że możesz po prostu uruchomić dowolne polecenia w ten sposób... lub uruchomić je w powłoce / script them like tmux command... lub zrób dla nich skrót klawiaturowy.

 8
Author: Jonny Leeds,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-06 15:00:03

O wiele prostsze niż większość, po prostu stworzyłem skrypt powłoki o nazwie cls i uruchamiałem go, gdy chcę wyczyścić ekran i bufor przewijania.

Wszystko to jest to:

Cls

clear;
tmux clear-history;
 5
Author: Brad Parks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-16 18:48:10

Użyłem niektórych z powyższych oraz innych źródeł, aby wymyślić:

bind k send-keys C-u \; send-keys C-k \; send-keys " clear && tmux clear-history" \; send-keys "Enter" \; run-shell "sleep .3s" \; send-keys "Up" \; send-keys C-u 

Spacja wiodąca w "clear & & tmux clear-history" zapobiega zapisywaniu polecenia do pliku historii (pod warunkiem, że masz konfigurację powłoki, aby traktować wiodące spacje w ten sposób; google "hist ignoruj spację" + nazwa powłoki, aby uzyskać więcej informacji). Lubię mieć to polecenie nie pojawia się w mojej historii, ponieważ jest to bardziej inline z ctrl-k W Terminalu.

Pierwszy send-keys C-u I send-keys C-k wyczyści to, co jest aktualnie wpisane w oknie dialogowym, aby upewnić się, że "Wyczyść && tmux clear-history" jest pomyślne (np. jeśli wpisałeś "ABCDEFG" w oknie dialogowym i masz kursor między D i E, to gwarantuje, że "ABCD clear && tmux clear-historyEFG" nie zostanie wysłany do powłoki, co nie powiedzie się).

Send-keys " Up " I last send-keys C-u czyści ostatnie elementy z wewnętrznej historii powłoki. Nawet ze wspomnianą wyżej przestrzenią ciągłą, wewnętrzna historia powłoka będzie zawierać " clear ..."linia. Wysyłanie i Ctrl-u pozbywa się tego.

Wreszcie, w iTerm ustawiłem Ctrl-k na mapowanie do ctrl-A k (mam prefiks tmux ustawiony na ctrl-a), więc mogę wpisać ctrl-k, co moje ręce chcą robić od tak wielu lat. Robię to, przechodząc do iTerm > Preferencje > profile > klucze i dodając skrót, aby wysłać kod hex "0x01 0x6b". Jest tu świetny artykuł, który daje więcej informacji na temat korzystania z kodów hex z tmux i iTerm: http://tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/

To daje mi ctrl-k z tmux. Jedyną rzeczą, która nadal trochę mnie dręczy, jest to, że prawdziwe ctrl-k bez tmux nie ma problemów, jeśli obecnie masz coś wpisanego w monitorze i zachowa to, co wpisałeś podczas czyszczenia ekranu. Jak wspomniano, podejście to musi wyjaśnić, co jest wpisane tak " jasne ..."dowództwo nie zawodzi. Ale jest cholernie blisko!

 2
Author: Brett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-02 06:15:42

Więc, używam plu's podejście z góry przez jakiś czas, ale mam dość ich ograniczeń (zasadniczo, ⌃L przekazywane jest bez znaczenia, chyba że piped do programu, który to rozumie.)

Więc udoskonaliłem różne podejścia w różnych odpowiedziach do tego wątku; chociaż złożone, to podejście działa z obie powłoki i inne polecenia :

# ⌃K: Clears the current pane (from <https://stackoverflow.com/a/34162098>)
bind-key -n C-k \
   if-shell "test \"$(printf '#{pane_current_command}' | tail -c 2)\" = sh" \
      "send-keys C-l ; run-shell 'sleep .3s' ; clear-history" \
      "split-window -vp 100 ; clear-history -t ! ; kill-pane"

Spróbuj z tail -f /private/var/log/system.log lub coś!


Zastrzeżenia:

Jest tu jedna ważna uwaga: jest to niewidoczne zmiana rozmiaru okno jest czyszczone, jeśli nie jest powłoką. Może to wywołać zmianę rozmiaru w niektórych aplikacjach wiersza poleceń nasłuchujących SIGWINCHes; ale moim rozumowaniem jest to, że nie jest to duży problem, ponieważ są to programy, których prawdopodobnie nie będziesz próbował "wyczyścić" w każdym razie .

Ponadto sytuacja z cytowaniem powłoki jest już bałaganem i może łatwo stać się więcej jednego podczas osadzania #{pane_current_command}, więc bądź ostrożny, być może będziesz musiał zmodyfikować to na podstawie ustawień default-command.

To samo dotyczy mojego testowania końca tego dopasowania komend "sh"; Jeśli masz default-command coś w rodzaju /bin/bash --login lub coś skomplikowanego z udziałem exec, rzeczywiste polecenie może nie kończyć się "sh"; użyj ⌃B :, aby wykonać display-message '#{pane_current_command}', jeśli chcesz zobaczyć, na czym jest testowane.

 2
Author: ELLIOTTCABLE,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:50

Po wielu badaniach i spędzeniu czasu. Znalazłem najlepszy sposób na zsh i terminal.app

Używam prefix-c, aby wyczyścić ekran i prefix-C, aby wyczyścić historię i bufor przewijania i nie pozostawiając żadnych linii powyżej, ponieważ uważam to za denerwujące.

Bez Vim

# clear screen
bind c send-keys 'C-l'
# clear screen and history
bind C send-keys -R \; send-keys C-l \; clear-history \; send-keys

Z Vim

# check if the pane is running vim
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \ | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"

# clear screen
bind c if-shell "$is_vim" "send-keys c" "send-keys 'C-l'"
# clear screen and history
bind C send-keys -R \; send-keys C-l \; clear-history \; send-keys
 2
Author: Rahul Katariya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-20 11:13:21

Dlaczego nie? bind -n C-l send-keys C-l

 1
Author: klebervirgilio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-20 16:58:52

Okazało się, że działa to najlepiej w TMUX 2.6, Czyszczenie ekranu, przewijanie, ale utrzymanie monit wyświetlany po.

Używa Ctrl-L

bind-key -n C-l send-keys C-l \; send-keys -R \; clear-history
 1
Author: ideasman42,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-07 08:02:53

Ctrl-L jest używany w aplikacjach konsolowych do przerysowania ekranu. Okazało się, że po połączeniu z send-keys -R spowoduje to, że klawisze strzałek nie będą już działać poprawnie w niektórych aplikacjach (np.

Aby zachować funkcjonalność redraw w aplikacjach konsolowych, użyłem:

bind-key -n C-l if-shell -F '#{alternate_on}' 'send-keys C-l' 'send-keys -R C-l; clear-history'

Wymaga włączenia opcji tmux alternate-screen (która jest domyślnie włączona).

 0
Author: Phil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-20 07:01:34