To samo pytanie nęka mnie od dłuższego czasu. Oto najlepsze, jakie wymyśliłem. Umieść to w pliku .tmux.conf:
bind -n C-k clear-history
To wiąże ctrl-k z komendą tmux clear-history. Opcja -n after bind sprawia, że nie trzeba wydawać prefiksu polecenia tmux (domyślnie ctrl-b). Używam bash, więc ctrl-l już odpowiada wpisaniu „wyczyść” w wierszu poleceń. Za pomocą tych dwóch klawiszy otrzymuję ładną kombinację ctrl-l, ctrl-k, która przenosi cały bufor przewijania z ekranu („wyczyść”), a następnie usuwa całą tę historię (polecenie tmux „wyczyść historię”).
Nie jest tak przyjemny jak jednoprzyciskowe kombinacje terminala, iTerma lub Konsoli, aby je usunąć, ale jest to świat lepszy niż ciągłe wpisywanie czystej historii.
Miły. Robiłem bind k send-keys "clear"\; send-keys "Enter"część usuwania, ale korzystanie z wbudowanego ctrl+ljest prostsze, a clear-historypozbywanie się historii przewijania jest dobrym dodatkiem.
Henrik N
1
to wiązanie zepsuło moje panele, usuwając cały tekst ze wszystkich paneli i usuwając otaczające je ramki! Jakieś pomysły na to, co jest grane?
Ian Vaughan
Yikes. Jakiego programu powłoki używasz? Czy przez przypadek zdefiniowano już jakieś zachowanie dla Ctrl + K?
juanpaco
iTerm2. Właśnie zobaczyłem, że ctrl + k już to robi bez zestawu wiązania tmux, więc musi to być mapowanie iTerm2.
Ian Vaughan
Dziwne. Używam również iTerm2. Nie aktualizowałem go przez jakiś czas, więc może to być różnica wersji. Nie używam już również Ck, ponieważ spowodowało to problemy z moimi powiązaniami vima. Teraz używam Cn.
juanpaco
58
Jak poprawnie stwierdził @juanpaco, clear-historyjest to polecenie wyczyszczenia bufora przewijania.
Dodam, że chcę również wyczyścić zawartość ekranu za pomocą tego samego polecenia. Wydawanie send-keys -Rresetuje (czyści) ekran, więc używam następujących w moim.tmux.conf
bind-key b send-keys -R \; clear-history
Spowoduje to wyczyszczenie ekranu ORAZ bufora przewijania.
Bezpośrednio z dokumentacji tmux na send-keys: „Flaga -R powoduje zresetowanie stanu terminala.” Prawdopodobnie musisz tylko zaktualizować.
z5h
20
Wadą użycia -R jest to, że twoja bieżąca linia wejściowa zostaje ukryta, inaczej niż po wyczyszczeniu terminala za pomocą Ctrl + l. To, co zrobiłem, tobind -n C-l send-keys C-l \; clear-history
volpato,
6
Dla tych z was, którzy nie wiedzą (jak ja nie), aby przejść do stanu, aby wprowadzić clear-historypolecenie, naciśnij Ctrl+B, a następnie uruchom polecenie za pomocą dwukropka ( :).
palswim
1
@ volpato Podoba mi się twoje podejście, ale wydaje mi się, że wciąż pozostawia jeden „ekran” bufora w przewijanym wstecz. Nie mam pojęcia dlaczego. -R wykasowuje monit, ale „rozwiązałem” go przez dodanie dodatkowego Cm na końcu (ale to umieszcza go w drugiej linii).
Gdogg
2
Możesz to skondensować send-keys -R C-l \; clear-history.
ivan,
35
Każda odpowiedź tutaj mówi o dodawaniu nowych powiązań klawiszy.
Jeśli chcesz to zrobić od czasu do czasu, wcale nie potrzebujesz mapowania ...
Prefiks ma wartość domyślną <Ctrl-b>
Po prostu wpisz <prefix>:odpowiedni panel, a następnie wpisz clear-historyi naciśnij klawisz Enter.
Jedną z fajnych rzeczy w tmux jest to, że możesz po prostu uruchomić dowolne z takich poleceń ... lub uruchomić je w powłoce / skrypcie tak jak tmux command... lub utworzyć dla nich skrót klawiaturowy.
Możliwe jest wpisanie pierwszych trzech znaków cle, a następnie autouzupełnianie za <tab>pierwszym razem, a następnie za drugim razem, <up arrow>aby uzyskać dostęp do poprzedniego wpisu. W ten sposób jest dość szybki.
bct
1
To nie działa dla mnie, ponieważ kiedy zaczynam pisać po naciśnięciu <Ctrl-b> the klawisza c, jest ustawione, aby utworzyć nowe okno.
fraxture
@fraxture Myślę, że źle zrozumiałeś - po naciśnięciu klawisza <Ctrl-b>, a następnie naciśnięciu :wyświetla interaktywny monit - w tym miejscu można wpisać „c”
JonnyRaa
21
Jeśli chcesz połączyć CTRL-Lplus przejrzystą historię, dodaj to do ~/.tmux.conf:
bind u send-keys C-l \; run-shell "sleep .3s" \; clear-history
Działa to nawet, jeśli jesteś na przykład w powłoce MySQL.
Wydaje się, że to nie działa podczas, powiedzmy tail -f some.log, prawda? Czy można to ctrl-Zz tym połączyć ? Wygląda na to, że wszystko działa poprawnie.
Aaron Gibralter
19
Zauważyłem, że jestem send-keys -Rtrochę powolny - 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 usuwa bieżącego tekstu z ekranu z historii - polecenie wyczyść historię wydaje się działać w osobnym wątku do kluczy wysyłania.
jest jedno zastrzeżenie dotyczące tego podejścia i polega ono na tym, że działa ono tylko na lokalnych powłokach, ponieważ wysyła tmux clear-history jako ciąg znaków do zapisania w aktywnym okienku. Dostosowałem go do:bind-key E send-keys "C-k" \; send-keys "C-u" \; send-keys "clear" \; send-keys "Enter" \; run-shell "sleep .3s; tmux clear-history"
Santi P.,
12
O wiele prostsze niż większość, właśnie utworzyłem skrypt powłoki o nazwie clsi uruchamiam go za każdym razem, gdy chcę wyczyścić ekran i bufor przewijania.
Ale co, jeśli nie masz dostępu do wiersza poleceń. Na przykład, gdy serwer jest uruchomiony i oglądasz dzienniki.
zudduz
skąd oglądasz dzienniki? Przez serwer WWW? Jeśli tak, to nie rozumiem, dlaczego Tmux jest zaangażowany?
Brad Parks
1
Miło jest móc jednocześnie oglądać dzienniki serwera i edytor vim.
zudduz
Czy używasz podziałów Tmux? Jeśli nie, po prostu podziel okno na 2 i przeglądaj swoje dzienniki w jednym, a używaj vima w drugim, po prostu uruchamiając `tmux split" w sesji tmux ... Ale może nie rozumiem, co robisz?
Brad Parks,
10
Stwierdzono, że działa to najlepiej w TMUX 2.6, czyszcząc ekran, przewijając, ale utrzymując monit wyświetlany po.
Ctrl-L jest używany w aplikacjach konsolowych do przerysowywania ekranu. Odkryłem, że po związaniu z send-keys -Rnim klawisze strzałek przestałyby działać poprawnie w niektórych aplikacjach (np. Vim, mc).
Aby zachować funkcję przerysowywania w aplikacjach konsolowych, użyłem:
Wiodąca spacja w „clear && tmux clear-history” zapobiega zapisywaniu polecenia w pliku historii (pod warunkiem, że masz konfigurację powłoki do traktowania wiodących spacji w ten sposób; google „hist ignoruje spację” + nazwa twojej powłoki, aby uzyskać więcej informacje). Lubię, aby to polecenie nie wyświetlało się w mojej historii, ponieważ jest ono bardziej zgodne z ctrl-k w terminalu.
Pierwsze klucze wysyłania Cu i klucze wysyłania Ck wyczyszczą wszystko, co jest aktualnie wpisane w wierszu polecenia, aby upewnić się, że „wyczyść & & tmux wyczyść historię” powiodło się (np. Jeśli wpisałeś „ABCDEFG” w wierszu polecenia i masz kursor między literą D i literą E zapewnia to, że „ABCD clear && tmux clear-historyEFG” nie zostanie wysłane do powłoki, co by się nie udało.
Klawisze wysyłania „W górę” i ostatnie klucze wysyłania Cu usuwają ostatnie elementy z wewnętrznej historii muszli. Nawet w przypadku wspomnianej wyżej spacji wewnętrznej historia powłoki zawiera linię „wyczyść ...”. Wysyłanie i Ctrl-u się tego pozbywa.
Na koniec w iTerm ustawiam ctrl-k na mapowanie na ctrl-a k (mam mój prefiks tmux ustawiony na ctrl-a), więc mogę wpisać ctrl-k, co moje ręce chcą robić po tylu latach pracy więc. Robię to, przechodząc do iTerm> Preferencje> Profile> Klucze i dodając skrót, aby wysłać kod szesnastkowy „0x01 0x6B”. Jest tutaj świetny artykuł, który zawiera więcej informacji na temat używania kodów szesnastkowych z tmux i iTerm: http://tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/
To prawie daje mi ctrl-k z tmux. Jedyną rzeczą, która wciąż mnie trochę wkurza jest to, że prawdziwy ctrl-k bez tmuxa nie ma problemów, jeśli aktualnie masz coś wpisanego w linii poleceń i zachowa to, co napisałeś podczas czyszczenia ekranu. Jak wspomniano, takie podejście musi wyczyścić wpisane słowa, aby polecenie „wyczyść ...” nie zawiodło. Ale jest cholernie blisko!
Chciałbym też wiedzieć, czy nie ma powodu, aby tego nie polecać.
Gaston Sanchez
2
Po pierwsze, nie jest to konieczne: w -n C-lzasadzie mówi „złap to”, a następnie natychmiast przekazujesz to samo. (tj. jest to brak możliwości.)… Po drugie, twoje zamiary są wyłączone, ponieważ ⌃Lusuwa ekran , a nie przewijanie wstecz: jeśli naciśniesz, ⌃B [a następnie przewiniesz w górę, zobaczysz, że całe przewijanie jest nadal nagrywane; Celem tego pytania jest jasne , że przewijania (tmux) nie jest widoczny terminal.
ELLIOTTCABLE,
2
Po wielu badaniach i spędzaniu czasu. Znalazłem najlepszy sposób dla mnie na zsh i terminal.app
Używam prefix-cdo czyszczenia ekranu i prefix-Cdo czyszczenia historii i bufora przewijania i nie zostawiam żadnych linii powyżej, ponieważ uważam to za irytujące.
Bez Vima
# 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 Vimem
# 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
Tak więc od jakiegoś czasu stosuję podejście plu z góry , ale mam już dość jego ograniczeń (w zasadzie ⌃Lprzejście przez to nie ma znaczenia, chyba że zostanie przekazane do programu, który to rozumie.)
Poprawiłem różne podejścia w różnych odpowiedziach na ten wątek; chociaż złożone, to podejście działa zarówno z powłokami, jak i innymi poleceniami :
Spróbuj z tym tail -f /private/var/log/system.logczy coś!
Ostrzeżenia:
Jest tu jedna ważna uwaga: jest to niewidocznie zmiana rozmiaru usuwanego okienka, jeśli nie jest to powłoka. Może to wyzwalać zmianę rozmiaru w niektórych aplikacjach wiersza poleceń nasłuchujących SIGWINCHes; ale moje rozumowanie jest to, że nie jest to duży problem, ponieważ są to programy jesteś bardzo prawdopodobne, nie będzie próbował „jasne” i tak .
Ponadto sytuacja cytowania powłoki jest już bałaganem i może łatwo stać się jednym z nich podczas osadzania #{pane_current_command}, więc bądź ostrożny, być może będziesz musiał to zmodyfikować w zależności od default-commandustawień.
To samo dotyczy testowania końca dopasowania tego polecenia "sh"; jeśli masz default-commandcoś podobnego /bin/bash --loginlub coś skomplikowanego exec, rzeczywiste polecenie może się nie kończyć "sh"; użyj, ⌃B :aby wykonać, display-message '#{pane_current_command}'jeśli chcesz zobaczyć, na czym polega testowanie.
Odpowiedzi:
To samo pytanie nęka mnie od dłuższego czasu. Oto najlepsze, jakie wymyśliłem. Umieść to w pliku .tmux.conf:
To wiąże ctrl-k z komendą tmux clear-history. Opcja -n after bind sprawia, że nie trzeba wydawać prefiksu polecenia tmux (domyślnie ctrl-b). Używam bash, więc ctrl-l już odpowiada wpisaniu „wyczyść” w wierszu poleceń. Za pomocą tych dwóch klawiszy otrzymuję ładną kombinację ctrl-l, ctrl-k, która przenosi cały bufor przewijania z ekranu („wyczyść”), a następnie usuwa całą tę historię (polecenie tmux „wyczyść historię”).
Nie jest tak przyjemny jak jednoprzyciskowe kombinacje terminala, iTerma lub Konsoli, aby je usunąć, ale jest to świat lepszy niż ciągłe wpisywanie czystej historii.
źródło
bind k send-keys "clear"\; send-keys "Enter"
część usuwania, ale korzystanie z wbudowanegoctrl+l
jest prostsze, aclear-history
pozbywanie się historii przewijania jest dobrym dodatkiem.Jak poprawnie stwierdził @juanpaco,
clear-history
jest to polecenie wyczyszczenia bufora przewijania.Dodam, że chcę również wyczyścić zawartość ekranu za pomocą tego samego polecenia. Wydawanie
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
Spowoduje to wyczyszczenie ekranu ORAZ bufora przewijania.
źródło
send-keys
: „Flaga -R powoduje zresetowanie stanu terminala.” Prawdopodobnie musisz tylko zaktualizować.bind -n C-l send-keys C-l \; clear-history
clear-history
polecenie, naciśnijCtrl+B
, a następnie uruchom polecenie za pomocą dwukropka (:
).send-keys -R C-l \; clear-history
.Każda odpowiedź tutaj mówi o dodawaniu nowych powiązań klawiszy.
Jeśli chcesz to zrobić od czasu do czasu, wcale nie potrzebujesz mapowania ...
Prefiks ma wartość domyślną
<Ctrl-b>
Po prostu wpisz
<prefix>:
odpowiedni panel, a następnie wpiszclear-history
i naciśnij klawisz Enter.Jedną z fajnych rzeczy w tmux jest to, że możesz po prostu uruchomić dowolne z takich poleceń ... lub uruchomić je w powłoce / skrypcie tak jak
tmux command
... lub utworzyć dla nich skrót klawiaturowy.źródło
cle
, a następnie autouzupełnianie za<tab>
pierwszym razem, a następnie za drugim razem,<up arrow>
aby uzyskać dostęp do poprzedniego wpisu. W ten sposób jest dość szybki.<Ctrl-b> the
klawisza c, jest ustawione, aby utworzyć nowe okno.:
wyświetla interaktywny monit - w tym miejscu można wpisać „c”Jeśli chcesz połączyć
CTRL-L
plus przejrzystą historię, dodaj to do~/.tmux.conf
:Działa to nawet, jeśli jesteś na przykład w powłoce MySQL.
źródło
tail -f some.log
, prawda? Czy można toctrl-Z
z tym połączyć ? Wygląda na to, że wszystko działa poprawnie.Zauważyłem, że jestem
send-keys -R
trochę powolny - oto inny sposób na wyczyszczenie ekranu i historii za pomocą jednego poleceniaZagnieżdżone wywołanie tmux jest używane jako bardziej oczywiste
bind-key C send-keys "clear" \; send-keys "Enter" \; clear-history
nie usuwa bieżącego tekstu z ekranu z historii - polecenie wyczyść historię wydaje się działać w osobnym wątku do kluczy wysyłania.
źródło
bind-key E send-keys "C-k" \; send-keys "C-u" \; send-keys "clear" \; send-keys "Enter" \; run-shell "sleep .3s; tmux clear-history"
O wiele prostsze niż większość, właśnie utworzyłem skrypt powłoki o nazwie
cls
i uruchamiam go za każdym razem, gdy chcę wyczyścić ekran i bufor przewijania.Wszystko to jest to:
cls
źródło
Stwierdzono, że działa to najlepiej w TMUX 2.6, czyszcząc ekran, przewijając, ale utrzymując monit wyświetlany po.
Używa Ctrl-L
źródło
Ctrl-L jest używany w aplikacjach konsolowych do przerysowywania ekranu. Odkryłem, że po związaniu z
send-keys -R
nim klawisze strzałek przestałyby działać poprawnie w niektórych aplikacjach (np. Vim, mc).Aby zachować funkcję przerysowywania w aplikacjach konsolowych, użyłem:
Wymaga to włączenia opcji tmux
alternate-screen
(która jest domyślnie).źródło
Użyłem niektórych z powyższych oraz innych źródeł, aby wymyślić:
Wiodąca spacja w „clear && tmux clear-history” zapobiega zapisywaniu polecenia w pliku historii (pod warunkiem, że masz konfigurację powłoki do traktowania wiodących spacji w ten sposób; google „hist ignoruje spację” + nazwa twojej powłoki, aby uzyskać więcej informacje). Lubię, aby to polecenie nie wyświetlało się w mojej historii, ponieważ jest ono bardziej zgodne z ctrl-k w terminalu.
Pierwsze klucze wysyłania Cu i klucze wysyłania Ck wyczyszczą wszystko, co jest aktualnie wpisane w wierszu polecenia, aby upewnić się, że „wyczyść & & tmux wyczyść historię” powiodło się (np. Jeśli wpisałeś „ABCDEFG” w wierszu polecenia i masz kursor między literą D i literą E zapewnia to, że „ABCD clear && tmux clear-historyEFG” nie zostanie wysłane do powłoki, co by się nie udało.
Klawisze wysyłania „W górę” i ostatnie klucze wysyłania Cu usuwają ostatnie elementy z wewnętrznej historii muszli. Nawet w przypadku wspomnianej wyżej spacji wewnętrznej historia powłoki zawiera linię „wyczyść ...”. Wysyłanie i Ctrl-u się tego pozbywa.
Na koniec w iTerm ustawiam ctrl-k na mapowanie na ctrl-a k (mam mój prefiks tmux ustawiony na ctrl-a), więc mogę wpisać ctrl-k, co moje ręce chcą robić po tylu latach pracy więc. Robię to, przechodząc do iTerm> Preferencje> Profile> Klucze i dodając skrót, aby wysłać kod szesnastkowy „0x01 0x6B”. Jest tutaj świetny artykuł, który zawiera więcej informacji na temat używania kodów szesnastkowych z tmux i iTerm: http://tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/
To prawie daje mi ctrl-k z tmux. Jedyną rzeczą, która wciąż mnie trochę wkurza jest to, że prawdziwy ctrl-k bez tmuxa nie ma problemów, jeśli aktualnie masz coś wpisanego w linii poleceń i zachowa to, co napisałeś podczas czyszczenia ekranu. Jak wspomniano, takie podejście musi wyczyścić wpisane słowa, aby polecenie „wyczyść ...” nie zawiodło. Ale jest cholernie blisko!
źródło
Dlaczego nie?
bind -n C-l send-keys C-l
źródło
-n C-l
zasadzie mówi „złap to”, a następnie natychmiast przekazujesz to samo. (tj. jest to brak możliwości.)… Po drugie, twoje zamiary są wyłączone, ponieważ⌃L
usuwa ekran , a nie przewijanie wstecz: jeśli naciśniesz,⌃B [
a następnie przewiniesz w górę, zobaczysz, że całe przewijanie jest nadal nagrywane; Celem tego pytania jest jasne , że przewijania (tmux) nie jest widoczny terminal.Po wielu badaniach i spędzaniu czasu. Znalazłem najlepszy sposób dla mnie na zsh i terminal.app
Używam
prefix-c
do czyszczenia ekranu iprefix-C
do czyszczenia historii i bufora przewijania i nie zostawiam żadnych linii powyżej, ponieważ uważam to za irytujące.Bez Vima
Z Vimem
źródło
Aby szybko naprawić wyczyszczenie poszczególnych paneli tmux, możesz ustawić alias ...
źródło
Tak więc od jakiegoś czasu stosuję podejście plu z góry , ale mam już dość jego ograniczeń (w zasadzie
⌃L
przejście przez to nie ma znaczenia, chyba że zostanie przekazane do programu, który to rozumie.)Poprawiłem różne podejścia w różnych odpowiedziach na ten wątek; chociaż złożone, to podejście działa zarówno z powłokami, jak i innymi poleceniami :
Spróbuj z tym
tail -f /private/var/log/system.log
czy coś!Ostrzeżenia:
Jest tu jedna ważna uwaga: jest to niewidocznie zmiana rozmiaru usuwanego okienka, jeśli nie jest to powłoka. Może to wyzwalać zmianę rozmiaru w niektórych aplikacjach wiersza poleceń nasłuchujących
SIGWINCH
es; ale moje rozumowanie jest to, że nie jest to duży problem, ponieważ są to programy jesteś bardzo prawdopodobne, nie będzie próbował „jasne” i tak .Ponadto sytuacja cytowania powłoki jest już bałaganem i może łatwo stać się jednym z nich podczas osadzania
#{pane_current_command}
, więc bądź ostrożny, być może będziesz musiał to zmodyfikować w zależności oddefault-command
ustawień.To samo dotyczy testowania końca dopasowania tego polecenia
"sh"
; jeśli maszdefault-command
coś podobnego/bin/bash --login
lub coś skomplikowanegoexec
, rzeczywiste polecenie może się nie kończyć"sh"
; użyj,⌃B :
aby wykonać,display-message '#{pane_current_command}'
jeśli chcesz zobaczyć, na czym polega testowanie.źródło