Відповіді:
Це ж питання мучить мене вже досить давно. Ось найкраще, що я придумав. Вставте це у свій .tmux.conf файл:
bind -n C-k clear-history
Це пов'язує ctrl-k з командою очищення історії tmux. Прив'язка -n after прив'язує її, тому вам не доведеться видавати префікс команди tmux (за замовчуванням ctrl-b). Я використовую bash, тому ctrl-l вже робить еквівалент набору "clear" в командному рядку. За допомогою цих двох клавіш я отримую хороший комбінат ctrl-l, ctrl-k, який переміщує весь буфер прокрутки з екрана ("ясний"), а потім видаляє всю цю історію (команда tmux "clear-history").
Це не так приємно, як комбінації терміналів, iTerm або Konsole за допомогою одного ключа для його очищення, але це світ краще, ніж весь час вводити в чітку історію.
bind k send-keys "clear"\; send-keys "Enter"
очищенням частини, але використовувати вбудований ctrl+l
простіше, і clear-history
позбутися історії прокрутки - хороше доповнення.
Як правильно сказано @juanpaco, clear-history
це команда очистити буфер прокрутки.
Додам, що мені подобається також очистити те, що на екрані в тій же команді. Видача send-keys -R
екрана (очищення) екрана, тому я використовую наступне у своєму.tmux.conf
bind-key b send-keys -R \; clear-history
Це очищає екран і буфер прокрутки.
send-keys
: "Прапор -R викликає скидання стану терміналу." Напевно, вам просто потрібно оновити.
bind -n C-l send-keys C-l \; clear-history
clear-history
команду, натисніть Ctrl+B
, а потім запустіть команду двокрапкою ( :
).
send-keys -R C-l \; clear-history
.
Кожна відповідь тут говорить про додавання нових ключових прив’язок.
Якщо ви просто хочете це робити час від часу, вам зовсім не потрібно картування ...
За замовчуванням префікс до <Ctrl-b>
Просто введіть <prefix>:
відповідну область, а потім введіть clear-history
та натисніть клавішу Enter.
Однією з цікавих речей щодо tmux є те, що ви можете просто запустити будь-яку з таких команд ... або запустити їх у оболонці / скрипті, як-от tmux command
... або зробити комбінацію клавіш для них.
cle
, а потім автоматично заповнити <tab>
перший раз, потім у другий час використовувати <up arrow>
для доступу до попереднього запису. Цей шлях досить швидкий.
<Ctrl-b> the
клавіші c, встановлюється нове вікно.
:
вона дає вам інтерактивне підказку - саме там ви введете 'c'
Якщо ви хочете поєднати CTRL-L
плюс чисту історію, додайте це до своєї ~/.tmux.conf
:
bind u send-keys C-l \; run-shell "sleep .3s" \; clear-history
Це навіть працює, якщо, наприклад, ви знаходитесь в оболонці MySQL.
tail -f some.log
, правда? Чи є спосіб поєднати ctrl-Z
це? Може здатися, що це правильно.
Я виявив використання send-keys -R
трохи повільним - ось ще один спосіб очищення екрана та історії за допомогою однієї команди
bind-key C send-keys "clear && tmux clear-history" \; send-keys "Enter"
Вкладений виклик tmux використовується як більш очевидний
bind-key C send-keys "clear" \; send-keys "Enter" \; clear-history
не вдається очистити поточний текст на екрані з історії - видається, що команда очищення історії працює в окремому потоці для передачі ключів.
bind-key E send-keys "C-k" \; send-keys "C-u" \; send-keys "clear" \; send-keys "Enter" \; run-shell "sleep .3s; tmux clear-history"
Шлях простіше, ніж більшість, я просто створив скрипт оболонки, який називається cls
, і запускати його, коли я хочу очистити екран і буфер прокрутки.
Все, що це:
cls
clear;
tmux clear-history;
Ctrl-L використовується в консольних програмах для перемальовування екрана. Я виявив, що при прив'язці до send-keys -R
нього клавіші зі стрілками більше не працюватимуть належним чином у деяких програмах (наприклад, vim, mc).
Щоб зберегти функцію перемальовування в консольних програмах, я використав:
bind-key -n C-l if-shell -F '#{alternate_on}' 'send-keys C-l' 'send-keys -R C-l; clear-history'
Для цього потрібно ввімкнути опцію tmux alternate-screen
(що це за замовчуванням).
Я використовував деякі з перерахованих вище та інші джерела, щоб придумати:
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
Провідний простір у "clear && tmux clear-history" запобігає запису команди в файл історії (за умови, що ви налаштуєте свою оболонку, щоб таким чином обробляти провідні пробіли; google "hist ignore space" + ім'я оболонки для отримання додаткової інформації інформація). Мені подобається, що ця команда не відображається в моїй історії, оскільки це більше відповідає ctrl-k в Терміналі.
Перші клавіші відправлення Cu та клавіші відправлення Ck очистять все, що введено в даний момент під час підказки, щоб забезпечити успіх "clear && tmux clear-history" (наприклад, якщо ви ввели запит "ABCDEFG" і підключили ваш курсор між D і E, це гарантує, що "ABCD clear && tmux clear-historyEFG" не буде надіслано до оболонки, що може вийти з ладу).
Клавіші відправки "Вгору" та останні клавіші відправлення Cu очищають останні елементи з внутрішньої історії оболонок. Навіть при згадуваному вище пробілі внутрішня історія оболонки буде включати рядок "ясно ...". Відправлення і Ctrl-u позбавляється від цього.
Нарешті, в iTerm я встановив ctrl-k для відображення на ctrl-a k (у мене мій префікс tmux встановлений на ctrl-a), тому я можу набрати ctrl-k - це те, що мої руки хочу зробити за стільки років роботи так. Я роблю це, перейшовши в iTerm> Налаштування> Профілі> Клавіші та додавши ярлик, щоб надіслати шістнадцятковий код "0x01 0x6B". Тут є чудова стаття, яка надає більше інформації про використання шістнадцяткових кодів з tmux та iTerm: http://tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/
Це в значній мірі дає мені ctrl-k з tmux. Єдине, що все одно мене кидає, - це те, що у справжнього ctrl-k без tmux не виникає проблем, якщо у вас в даний момент щось введено під час запиту і збереже те, що ви набрали під час очищення екрана. Як уже згадувалося, цей підхід повинен зрозуміти, що введено, щоб команда "clear ..." не вийшла з ладу. Але це досить чортово близько!
чому ні? bind -n C-l send-keys C-l
-n C-l
основному кажуть "зловити це", і тоді ти негайно передаєш те саме. (Тобто це не є не-оп.) ... По- друге, ваше намір вимкнений, тому що ⌃L
очищає частини екрану , а НЕ сувій назад: якщо ви натиснете ⌃B [
і потім виконайте прокрутку вгору, ви побачите , що все ще прокрутка записується; мета цього питання - зрозуміти, що (tmux's) прокрутка, а не видимий термінал.
Після безлічі досліджень та витрачання часу. Я знайшов найкращий спосіб для мене на zsh та terminal.app
Я використовую prefix-c
для очищення екрана, prefix-C
очищення історії та буфера прокрутки, не залишаючи рядків вище, тому що мені це дратує.
# 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
Таким чином, я деякий час використовую підхід плагіна зверху , але мені надоєли його обмеження (в основному, ⌃L
проходження через безглузде, якщо це не стосується програми, яка його розуміє.)
Тож я вдосконалював різні підходи в різних відповідях на цю тему; Хоча і складний, цей підхід працює як з оболонками, так і з іншими командами :
# ⌃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"
Спробуйте це tail -f /private/var/log/system.log
чи щось!
Тут є одна важлива примітка: це непомітно змінює розмір очищеного вікна, якщо це не оболонка. Це може викликати зміни розміру в деяких програмах командного рядка, які прослуховують SIGWINCH
es; але мої міркування, що це не є великою проблемою, тому що ті програми , ви, ймовірно , не буде намагатися «ясно» в будь-якому випадку .
Крім того, ситуація з цитуванням оболонок вже є безладом, і вона легко може стати більшою частиною під час вбудовування #{pane_current_command}
, тому будьте обережні, можливо, вам доведеться змінити це, виходячи зі своїх default-command
налаштувань.
Те саме стосується мого тестування кінця відповідності команди "sh"
; якщо у вас є default-command
щось подібне /bin/bash --login
або щось складне із залученням exec
, фактична команда може не закінчуватися "sh"
; використовувати ⌃B :
для виконання, display-message '#{pane_current_command}'
якщо ви хочете побачити, на що тестується.