Вопрос или проблема
Как очистить как историю tmux (tmux clear-history
), так и zsh (zle clear-screen
) с помощью одной комбинации клавиш?
Обычный способ очистки экрана — ^L
, и я попробовал добавить следующее в .tmux.conf
:
bind -Troot C-l send-keys C-l\; clear-history
Таким образом, ^L
очищает экран и почти всю историю, кроме последнего экрана.
Следующий ^L
очищает всё.
Можно ли добиться того же с помощью одной комбинации клавиш?
bind -Troot C-l send-keys C-l\; clear-history\; send-keys C-l\; clear-history
не работает. Ни следующее:
bind -Troot C-l send-keys C-l C-l\; clear-history
Попробуйте:
bind -n C-k clear-history
Это связывает ctrl-k с командой tmux clear-history. Сигнальщик -n после bind делает так, что не нужно вводить префикс команды tmux (по умолчанию ctrl-b). Я использую bash, поэтому ctrl-l уже выполняет эквивалент команды “clear” в командной строке. С помощью этих двух клавиш я получаю приятную комбинацию ctrl-l, ctrl-k, которая перемещает весь буфер прокрутки с экрана (то есть “очистка”) и затем удаляет всю эту историю (командой tmux “clear-history”).
Также выполнение send-keys -R
сбрасывает (очищает) экран:
bind-key b send-keys -R \; clear-history
Это очищает и экран, и буфер прокрутки.
Я в конечном итоге сделал это иначе, из самого zsh
:
# ~/.zshrc
clear-scrollback-and-screen () {
zle clear-screen
tmux clear-history
}
zle -N clear-scrollback-and-screen
bindkey -v '^L' clear-scrollback-and-screen
По одной простой причине – у меня была привязка C-l в Vim, и случайное нажатие очищало экран Vim.
Но есть один недостаток в этом решении, оно работает только в оболочке.
Графическое решение:
-
В gnome вы можете настроить пользовательское сочетание клавиш для выполнения команд/скриптов эта статья объясняет, как это сделать
-
В KDE вы также можете настроить пользовательское сочетание клавиш для выполнения команд/скриптов эта статья объясняет, как это сделать
Решение для оболочки:
Вы можете использовать алиас и функцию оболочки для выполнения этой команды… в файле ~/.zshrc
Например, добавьте это в ~/.zshrc
и перезапустите оболочку:
c() {
tmux clear-history
clear-history
clear
reset
}
alias cc="clear"
Вы можете использовать c
или cc
(как команду) для выполнения того, что вы хотите.
Принятое решение использует виджет zsh для сброса экрана и истории.
Я хочу предложить решение, непосредственно связанное с вопросом автора.
В tmux.conf
добавьте:
bind-key -T prefix C-k send-keys C-l \; run-shell "sleep 0" \; clear-history
чтобы привязать к <prefix>
+CTRL-k
(измените букву по вашему желанию).
Вы также можете привязать это напрямую к CTRL-k без префикса tmux, используя
bind-key -n C-k send-keys C-l \; run-shell "sleep 0" \; clear-history
Обратите внимание, что важно иметь sleep 0
, чтобы обеспечить правильный порядок выполнения. Скорее всего, для достижения того же эффекта могут быть использованы другие команды, если sleep
недоступен.
Ответ или решение
Как очистить историю tmux и zsh одним сочетанием клавиш
Очистка истории в терминале является частой задачей для пользователей, работающих с tmux и zsh. Вопрос, как сделать это одним нажатием клавиши, требует комплексного подхода и создания нужных привязок. В этом руководстве мы рассмотрим несколько методов, которые помогут вам упростить этот процесс.
Проблема
Основная задача заключается в том, чтобы очистить как историю терминала zsh, так и историю в tmux с помощью одного сочетания клавиш. По умолчанию, команды, такие как clear-history
в tmux и zle clear-screen
в zsh, нужно вызывать отдельно, что не всегда удобно.
Решение через .tmux.conf
-
Настройка привязки клавиш в tmux:
Для начала необходимо внести изменения в файл конфигурации tmux (~/.tmux.conf
). Здесь мы можем создать привязку, которая отправляет команды для очистки экрана и истории. Приведённый ниже код использует комбинациюCTRL-K
для этого:bind-key -n C-k send-keys C-l \; run-shell "sleep 0" \; clear-history
bind-key -n C-k
привязывает клавишуCTRL-K
без использования префикса tmux.send-keys C-l
посылает команду для очистки экрана.run-shell "sleep 0"
помогает обеспечить порядок выполнения команд. Это необходимо, так как tmux может не сразу выполнять следующие команды без небольшой задержки.
-
Перезапуск tmux:
Не забудьте перезапустить tmux или перезагрузить конфигурацию, используяtmux source-file ~/.tmux.conf
, чтобы изменения вступили в силу.
Метод через .zshrc
Если вы предпочитаете настраивать клавиши через zsh, то следующим способом можно создать собственную функцию, которая объединяет эти команды:
-
Создание пользовательской функции в
~/.zshrc
:clear-scrollback-and-screen() { zle clear-screen tmux clear-history } zle -N clear-scrollback-and-screen bindkey -v '^L' clear-scrollback-and-screen
В этом случае:
- Создаётся функция
clear-scrollback-and-screen
, которая вызывает команды для очистки экрана и истории tmux. - Привязываем
CTRL-L
к этой функции, что позволит вам использовать одну комбинацию клавиш для выполнения обеих операций.
- Создаётся функция
-
Перезапустите zsh:
Чтобы изменения вступили в силу, перезапустите свою оболочку zsh.
GUI решение
Если вы работаете в графическом окружении, например, GNOME или KDE, вы также можете настроить сочетания клавиш для запуска кастомной команды или скрипта:
-
GNOME:
Вы можете создать настраиваемую комбинацию клавиш через настройки системы. Для этого ознакомьтесь с этой инструкцией. -
KDE:
Аналогично, настраиваемые сочетания клавиш можно установить в KDE. Смотрите это руководство.
Заключение
С помощью описанных методов вы сможете настроить очистку истории терминала zsh и tmux одним нажатием клавиши. Какой бы метод вы ни выбрали, это значительно упростит ваш рабочий процесс и повысит эффективность работы в терминале. Попробуйте различные подходы, чтобы выбрать наиболее удобный для вас.