Jak wyczyścić bufor przewijania w Tmux?
FYI, używam Tmux przez Mac OS X Terminal app.
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.
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.
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.
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.
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.
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;
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!
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 SIGWINCH
es; 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.
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
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
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
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).
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