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

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

 Mike29 февр. 2016 г., 12:32
Это сработало для меня: Notes.jerzygangi.com / ...

Ответы на вопрос(12)

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

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 ...» не потерпела неудачу. Но это чертовски близко!

обнаружил, что когда связано с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 быть включен (что по умолчанию).

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

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

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

 Gdogg05 февр. 2015 г., 21:02
@ volpato Мне нравится ваш подход, но я нахожу, что он оставляет один «экран» буфера в прокрутке назад. Понятия не имею почему. -R убирает приглашение, но я «разрешил» его, добавив дополнительный C-m в конце (но тогда это помещает его во вторую строку).
 volpato26 мар. 2014 г., 17:44
Недостаток использования -R состоит в том, что ваша текущая строка ввода становится скрытой, в отличие от того, когда вы очищаете свой терминал с помощью Ctrl + l. Что я сделал, этоbind -n C-l send-keys C-l \; clear-history
 palswim20 мая 2014 г., 01:11
Для тех из вас, кто не знает (как я не знал), чтобы прибыть в штат, чтобы войти вclear-history команда, нажмитеCtrl+B, а затем запустите команду с двоеточием :).
 gatoatigrado13 окт. 2012 г., 02:18
это не совсем работает для меня: мой tmux не знает ни о какой опции "-R" для отправки ключей ...
 z5h13 окт. 2012 г., 17:59
Прямо из документации tmux наsend-keys: «Флаг -R вызывает сброс состояния терминала.» Возможно, вам просто нужно обновить.

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

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

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

 Bjorn Tipling03 июн. 2014 г., 17:48
Это то, что я хотел.
 Aaron Gibralter22 июн. 2015 г., 23:37
Это, кажется, не работает во время, скажем,tail -f some.log, правильно? Есть ли способ объединитьctrl-Z с этим? Может показаться, что все правильно.
Решение Вопроса

что я придумал. Поместите это в свой файл .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.

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

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

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

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

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

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

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

Все это так:

ЦБС

clear;
tmux clear-history;
 zudduz27 окт. 2016 г., 20:23
Но что, если у вас нет доступа к командной строке. Например, когда сервер работает, а вы смотрите журналы.
 zudduz28 окт. 2016 г., 17:11
Приятно иметь возможность одновременно просматривать журналы сервера и редактор vim.
 Brad Parks27 окт. 2016 г., 20:32
откуда вы будете смотреть логи? Через веб-сервер? Если так, то я не понимаю, почему задействован tmux?
 Brad Parks28 окт. 2016 г., 18:05
Используете ли вы tmux-сплиты? Если нет, просто разделите ваше окно на 2, и просмотрите свои журналы в одном, и используйте vim в другом, просто запустив `tmux split" внутри сеанса tmux ... Но, возможно, я не понимаю, что вы делаете?

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

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

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

Я нашел с помощью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.

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

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

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

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

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

Ваш ответ на вопрос