Do Twojej wiadomości używam Tmux za pośrednictwem aplikacji Terminal Mac OS X.
Do Twojej wiadomości używam Tmux za pośrednictwem aplikacji Terminal Mac OS X.
Odpowiedzi:
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.
bind k send-keys "clear"\; send-keys "Enter"
część usuwania, ale korzystanie z wbudowanego ctrl+l
jest prostsze, a clear-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.
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śnij Ctrl+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 wpisz clear-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.
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
:
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.
tail -f some.log
, prawda? Czy można to ctrl-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 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.
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
clear;
tmux clear-history;
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
bind-key -n C-l send-keys C-l \; send-keys -R \; clear-history
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:
bind-key -n C-l if-shell -F '#{alternate_on}' 'send-keys C-l' 'send-keys -R C-l; clear-history'
Wymaga to włączenia opcji tmux alternate-screen
(która jest domyślnie).
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
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!
Dlaczego nie? bind -n C-l send-keys C-l
-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 i prefix-C
do czyszczenia historii i bufora przewijania i nie zostawiam żadnych linii powyżej, ponieważ uważam to za irytujące.
# 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
# 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 ⌃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 :
# ⌃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 tym tail -f /private/var/log/system.log
czy coś!
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 od default-command
ustawień.
To samo dotyczy testowania końca dopasowania tego polecenia "sh"
; jeśli masz default-command
coś podobnego /bin/bash --login
lub 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.