Ответы:
Этот же вопрос мучает меня уже довольно давно. Вот лучшее, что я придумал. Поместите это в ваш файл .tmux.conf:
bind -n C-k clear-history
Это связывает ctrl-k с командой tmux clear-history. -N после связывания делает это таким образом, что вам не нужно вводить префикс команды tmux (по умолчанию ctrl-b). Я использую bash, поэтому ctrl-l уже делает то же самое, что набирать «clear» в командной строке. С этими двумя ключами я получаю хорошую комбинацию ctrl-l, ctrl-k, которая перемещает весь буфер прокрутки за пределы экрана («очистить»), а затем удаляет всю эту историю (команда tmux «clear-history»).
Она не так хороша, как комбинация из 1-й клавиши Terminal, 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`, устанавливается создание нового окна.
:
чтобы получить интерактивную подсказку - вот где вы
Если вы хотите объединить 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
не удается очистить текущий текст экрана из истории - команда 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
и запускаю его всякий раз, когда хочу очистить экран и буфер прокрутки.
Все это так:
ЦБС
clear;
tmux clear-history;
Обнаружил, что это лучше всего работает в TMUX 2.6, очистка экрана, прокрутка, но сохранение запроса, отображаемого после.
Использует Ctrl-L
bind-key -n C-l send-keys C-l \; send-keys -R \; 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 игнорировать пробел» + имя вашей оболочки для более подробной информации). Информация). Мне нравится, чтобы эта команда не появлялась в моей истории, так как она больше встроена в Ctrl-k в Терминале.
Первые ключи отправки Cu и ключи отправки Ck очистят все, что в данный момент набрано в приглашении, чтобы убедиться, что «clear && tmux clear-history» успешна (например, если вы набрали «ABCDEFG» в приглашении и имеете ваш курсор между D и E, это гарантирует, что «ABCD clear && tmux clear-historyEFG» не будет отправлено в оболочку, что приведет к ошибке).
Клавиши отправки "Вверх" и последние клавиши отправки Cu очищают последние элементы из внутренней истории ваших оболочек. Даже с указанным выше пробелом внутренняя история оболочки будет содержать строку «clear ...». Отправка и 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 в), а не видимый терминал.
После долгих исследований и тратить время. Я нашел лучший способ для меня на 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
Итак, я какое-то время пользовался подходом plu сверху , но я уже устал от его ограничений (в основном, ⌃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}'
если вы хотите увидеть, что проверяется.