Как очистить буфер прокрутки в Tmux?

FYI, я использую Tmux через приложение Mac OS X Terminal.

Ответ 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 (который он по умолчанию).