Как я могу очистить буфер прокрутки в Tmux?
к вашему сведению, я использую Tmux через Mac OS X Terminal app.
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
или что-то!
предостережения:
здесь есть одно важное замечание: это невидимо изменение размера панель очищается, если это не снаряд. Это может вызвать изменение размера поведения в некоторых приложениях командной строки прослушивания
SIGWINCH
es; но я рассуждаю, что это не большая проблема, потому что это программы, которые вы, скорее всего, не будете пытаться "очистить" в любом случае.кроме того, ситуация с цитированием оболочки уже беспорядок, и может легко стать больше одного при встраивании
#{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
найдено, что это лучше всего работает в 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
на (которое по умолчанию).