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


к вашему сведению, я использую Tmux через Mac OS X Terminal app.

12 134

12 ответов:

этот же вопрос мучает меня уже довольно давно. Вот лучшее, что я придумал. Положите это в свой .tmux.файл conf:

bind -n C-k clear-history

это связывает ctrl-k с командой tmux clear-history. -N после привязки делает это так, что вам не нужно выдавать префикс команды tmux (ctrl-b по умолчанию). Я использую bash, поэтому ctrl-l уже делает эквивалент ввода "clear" в командной строке. С помощью этих двух ключей я получаю хороший сочетание клавиш Ctrl-л, сочетание клавиш Ctrl-к-комбо, которое перемещает все прокрутить буфер с экрана ("очистить"), а затем удаляет всю эту историю (команда tmux" clear-history").

Это не так хорошо, как терминалы, iTerm или Konsole 1-key combos для очистки его, но это мир лучше, чем печатать в clear-history все время.

как правильно сказал @juanpaco,clear-history - Это команда для очистки буфера прокрутки.
Я добавлю, что мне нравится также очищать то, что находится на экране в той же команде. Выдав send-keys -R сбрасывает (очищает) экран, поэтому я использую следующее в моем .tmux.conf

bind-key b send-keys -R \; clear-history

это очищает экран и буфер прокрутки.

Если вы хотите совместить CTRL-L плюс clear-history, добавьте это в свой ~/.tmux.conf:

bind u send-keys C-l \; run-shell "sleep .3s" \; clear-history

Это даже работает, если вы находитесь в оболочке MySQL, например.

С 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 запускается в отдельном потоке для отправки ключей.

каждый ответ здесь говорит о добавлении новых Привязок клавиш.

если вы просто хотите сделать это иногда вам не нужно отображение на всех...

по умолчанию префикс <Ctrl-b>

просто типа <prefix>: в соответствующей области, а затем введите clear-history и нажмите enter.

одна из интересных вещей о tmux является то, что вы можете просто запустить любую из команд, как это... или запустите их в оболочке / скрипте им нравится tmux command ... или сделать сочетание клавиш для их.

способ проще, чем большинство, я только что создал сценарий оболочки под названием cls, и запустить его всякий раз, когда я хочу, чтобы очистить экран и буфер прокрутки.

все это так:

cls

clear;
tmux clear-history;

я использовал некоторые из вышеперечисленных плюс другие источники, чтобы придумать:

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 в терминале.

первые ключи отправки С-U и отправить-клавиши C-K будет ясно, что в настоящее время набирается в командной строке для того, чтобы "очистить && tmux понятно-история" успеха (например, если вы ввели "ABCDEFG" в командной строке и курсор между D и Е, это гарантирует, что "АБВГД ясный && tmux понятно-historyEFG" не отправляется оболочки, которое привело бы к ошибке).

send-keys " Up " и last send-keys C-u очищает последние элементы из внутренней истории ваших оболочек. Даже с задним пространством, упомянутым выше внутренняя история оболочки будет включать в себя " ясно ..." линия. Отправка вверх и 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 не имеет проблем, если у вас в настоящее время что-то набрано в приглашении и сохранит то, что вы набрали при очистке экрана. Как уже упоминалось, этот подход должен очистить то, что набрано так " ясно ..."команда не выполнена. Но это чертовски близко!

Итак, я использую 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 или что-то!


предостережения:

здесь есть одно важное замечание: это невидимо изменение размера панель очищается, если это не снаряд. Это может вызвать изменение размера поведения в некоторых приложениях командной строки прослушивания SIGWINCHes; но я рассуждаю, что это не большая проблема, потому что это программы, которые вы, скорее всего, не будете пытаться "очистить" в любом случае.

кроме того, ситуация с цитированием оболочки уже беспорядок, и может легко стать больше одного при встраивании #{pane_current_command}, так что будьте осторожны, возможно, вам придется изменить это на основе ваших default-command настройка.

то же самое относится к моему тестированию конца этой команды matching "sh"; если default-command что-то вроде /bin/bash --login или что-то сложное с участием exec на команда не может закончиться с "sh"; используйте ⌃B : для выполнения display-message '#{pane_current_command}' если вы хотите увидеть, что будет проверяться.

после многих исследований и тратить время. Я нашел лучший способ для меня на zsh и терминал.приложение

Я использую 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

почему бы и нет? bind -n C-l send-keys C-l

найдено, что это лучше всего работает в 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 на (которое по умолчанию).