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

146

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

Это сработало для меня: Notes.jerzygangi.com / ... Mike

Ваш Ответ

12   ответов
0

обнаружил, что когда связано с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'

Для этого требуется опция tmuxalternate-screen быть включен (что по умолчанию).

19

Если хочешь объединитьCTRL-L плюс очистить историю, добавьте это к своему~/.tmux.conf:

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

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

Это, кажется, не работает во время, скажем,tail -f some.log, правильно? Есть ли способ объединитьctrl-Z с этим? Может показаться, что все правильно. Aaron Gibralter
Это то, что я хотел. Bjorn Tipling
1

bind -n C-l send-keys C-l

Прежде всего, это не обязательно:-n C-l в основном говорит: «поймай это», и вы сразу же пропускаете то же самое. (т. е. это не работает). Во-вторых, ваш Намерение выключен, потому что⌃L очищаетэкра, а не прокрутка назад: если вы нажмете⌃B [ и затем прокрутите вверх, вы увидите, что все прокрутки по-прежнему записывается; цель этого вопроса - очистичтрокрутка @ (tmux), а не видимый терминал. ELLIOTTCABLE
Мне бы тоже хотелось узнать, есть ли причина не рекомендовать это. Gaston Sanchez
172

что я придумал. Поместите это в свой файл .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, чтобы очистить ее, но это мир лучше, чем постоянно вводить clear-history.

Ницца. Я делалbind k send-keys "clear"\; send-keys "Enter" для очистки, но с использованием встроенногоctrl+l проще, аclear-history избавиться от истории прокрутки является хорошим дополнением. Henrik N
Yikes. Какую оболочку вы используете? Случайно ли уже есть поведение, определенное для ctrl + k? juanpaco
это связывание заворачивает мои панели, удаляя весь текст со всех панелей и удаляя границы вокруг них! Есть идеи, что с этим случилось? Ian Vaughan
ITerm2. Просто видел, что ctrl + k уже делает это без набора привязки tmux, поэтому это должно быть отображение iTerm2. Ian Vaughan
Weird. Я тоже использую iTerm2. Я не обновлял его в течение некоторого времени, так что может быть разница в версии. Я также больше не использую C-k, потому что это вызвало проблемы с моими привязками vim. Я сейчас использую C-n. juanpaco
49

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

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

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

это не совсем работает для меня: мой tmux не знает ни о какой опции "-R" для отправки ключей ... gatoatigrado
Прямо из документации tmux наsend-keys: «Флаг -R вызывает сброс состояния терминала.» Возможно, вам просто нужно обновить. z5h
Недостаток использования -R состоит в том, что ваша текущая строка ввода становится скрытой, в отличие от того, когда вы очищаете свой терминал с помощью Ctrl + l. Что я сделал, этоbind -n C-l send-keys C-l \; clear-history volpato
@ volpato Мне нравится ваш подход, но я нахожу, что он оставляет один «экран» буфера в прокрутке назад. Понятия не имею почему. -R убирает приглашение, но я «разрешил» его, добавив дополнительный C-m в конце (но тогда это помещает его во вторую строку). Gdogg
Для тех из вас, кто не знает (как я не знал), чтобы прибыть в штат, чтобы войти вclear-history команда, нажмитеCtrl+B, а затем запустите команду с двоеточием :). palswim
18

Если ты просто хочешь делать это время от времени, тебе вообще не нужно картировать ...

Prefix по умолчанию имеет значение<Ctrl-b>

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

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

Можно ввести первые три символаcle, а затем автозаполнить с помощью<tab> в первый раз, затем во второй раз используйте<up arrow> для доступа к предыдущей записи. Таким образом, это довольно быстро. bct
7

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

Все это так:

ЦБС

clear;
tmux clear-history;
Но что, если у вас нет доступа к командной строке. Например, когда сервер работает, а вы смотрите журналы. zudduz
откуда вы будете смотреть логи? Через веб-сервер? Если так, то я не понимаю, почему задействован tmux? Brad Parks
Используете ли вы tmux-сплиты? Если нет, просто разделите ваше окно на 2, и просмотрите свои журналы в одном, и используйте vim в другом, просто запустив `tmux split" внутри сеанса tmux ... Но, возможно, я не понимаю, что вы делаете? Brad Parks
Приятно иметь возможность одновременно просматривать журналы сервера и редактор vim. zudduz
5

очистив экран, выполнив прокрутку, но сохранив подсказку, отображаемую после.

Использует Ctrl-L

bind-key -n C-l send-keys C-l \; send-keys -R \; clear-history
17

Я нашел с помощью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 запускается в отдельном потоке для send-keys.

этого подхода есть одна оговорка, и он заключается в том, что он работает только с локальными оболочками, потому что он отправляет tmux 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" Santi P.
2

чтобы придумать:

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» не будет отправлено в оболочку, что приведет к ошибке).

Клавиши отправки "Вверх" и последние клавиши отправки C-u удаляет последние элементы из внутренней истории ваших оболочек. Даже с указанным выше пробелом внутренняя история оболочки будет содержать строку «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 ...» не потерпела неудачу. Но это чертовски близко!

2

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
1

Пьет подходсверх какое-то время, но я сыт по горло его ограничениями (в основном,⌃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 или что-то

Caveats:

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

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

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

Похожие вопросы