FYI, я использую Tmux через приложение Mac OS X Terminal.
Как очистить буфер прокрутки в Tmux?
Ответ 1
Этот же вопрос довольно часто меня пугал. Здесь лучшее, что я придумал. Поместите это в ваш .tmux.conf файл:
bind -n C-k clear-history
Это связывает ctrl-k с командой tmux clear-history. -n после bind делает так, что вам не нужно вызывать префикс команды tmux (по умолчанию ctrl-b). Я использую bash, поэтому ctrl-l уже выполняет эквивалент ввода "clear" в командной строке. С этими двумя ключами я получаю хороший ctrl-l, ctrl-k combo, который перемещает весь буфер прокрутки с экрана ( "очистить" ), а затем удаляет всю эту историю (команда tmux "clear-history" ).
Это не так хорошо, как комманды "Терминал", "iTerm" или "Консоль" с 1 ключом, чтобы очистить ее, но это мир лучше, чем печатать в ясной истории все время.
Ответ 2
Как правильно указано @juanpaco, clear-history
- это команда очистки буфера прокрутки.
Я добавлю, что мне нравится также очищать то, что на экране в той же команде.
Выдача send-keys -R
сбрасывает (очищает) экран, поэтому я использую следующее в своем .tmux.conf
bind-key b send-keys -R \; clear-history
Это очищает экран и буфер прокрутки.
Ответ 3
Я нашел использование 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 в отдельном потоке для отправки ключей.
Ответ 4
Если вы хотите объединить CTRL-L
plus clear-history, добавьте это в свой ~/.tmux.conf
:
bind u send-keys C-l \; run-shell "sleep .3s" \; clear-history
Это даже работает, если вы, например, находитесь в оболочке MySQL.
Ответ 5
Проще, чем большинство, я только что создал оболочку script под названием cls
и запускаю ее всякий раз, когда хочу очистить свой экран и буфер прокрутки.
Все это так:
ЦБС
clear;
tmux clear-history;
Ответ 6
Я использовал некоторые из вышеперечисленных и других источников, чтобы придумать:
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 и send-keys Ck очистят все, что в настоящее время введено в строке, чтобы убедиться, что "clear && tmux clear-history" успешно (например, если вы набрали "ABCDEFG" "в подсказке и поместите курсор между D и E, это гарантирует, что" ABCD clear & tmux clear-historyEFG "не отправляется в оболочку, что не получится).
Клавиши отправки "Вверх" и последние клавиши отправки C-u очищают последние элементы из внутренней истории вашей оболочки. Даже с упомянутым выше задним пространством внутренняя история оболочки будет включать в себя строку "clear...". Отправка и Ctrl-u избавляются от этого.
Наконец, в iTerm я устанавливаю ctrl-k для сопоставления ctrl-a k (у меня есть префикс tmux, установленный на ctrl-a), поэтому я могу набрать ctrl-k, что и мои руки хотят делать из многих лет этого. Я делаю это, перейдя в iTerm > Preferences > Profiles > Keys и добавив ярлык для отправки шестнадцатеричного кода "0x01 0x6B". Там есть замечательная статья, в которой содержится дополнительная информация об использовании шестнадцатеричных кодов с tmux и iTerm: http://tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/
Это в значительной степени дает мне ctrl-k с tmux. Единственное, что до сих пор на меня наводит, это то, что реальный ctrl-k без tmux не имеет проблем, если у вас в настоящее время что-то напечатано в подсказке и сохранит то, что вы набрали при очистке экрана. Как уже упоминалось, этот подход должен очистить введенное значение, поэтому команда "clear..." не подводит. Но это довольно чертовски близко!
Ответ 7
Итак, я использовал 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}'
, если вы хотите увидеть, что тестируется.
Ответ 8
почему бы и нет? bind -n C-l send-keys C-l
Ответ 9
После долгих исследований и времени проведения. Я нашел лучший способ для меня на zsh и terminal.app
Я использую prefix-c
, чтобы очистить экран и prefix-c
, чтобы очистить историю и буфер прокрутки и не оставлять строк выше, потому что я нахожу это раздражающим.
Без 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
С помощью 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
Ответ 10
Обнаружено, что это лучше всего работает в TMUX 2.6, очищая экран, прокрутку, но сохраняя подсказку, отображаемую после.
Использует Ctrl-L
bind-key -n C-l send-keys C-l \; send-keys -R \; clear-history
Ответ 11
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
(который он по умолчанию).