Как очистить историю tmux и zsh одним нажатием клавиши?

Вопрос или проблема

Как очистить как историю 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

  1. Настройка привязки клавиш в 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 может не сразу выполнять следующие команды без небольшой задержки.
  2. Перезапуск tmux:
    Не забудьте перезапустить tmux или перезагрузить конфигурацию, используя tmux source-file ~/.tmux.conf, чтобы изменения вступили в силу.

Метод через .zshrc

Если вы предпочитаете настраивать клавиши через zsh, то следующим способом можно создать собственную функцию, которая объединяет эти команды:

  1. Создание пользовательской функции в ~/.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 к этой функции, что позволит вам использовать одну комбинацию клавиш для выполнения обеих операций.
  2. Перезапустите zsh:
    Чтобы изменения вступили в силу, перезапустите свою оболочку zsh.

GUI решение

Если вы работаете в графическом окружении, например, GNOME или KDE, вы также можете настроить сочетания клавиш для запуска кастомной команды или скрипта:

  1. GNOME:
    Вы можете создать настраиваемую комбинацию клавиш через настройки системы. Для этого ознакомьтесь с этой инструкцией.

  2. KDE:
    Аналогично, настраиваемые сочетания клавиш можно установить в KDE. Смотрите это руководство.

Заключение

С помощью описанных методов вы сможете настроить очистку истории терминала zsh и tmux одним нажатием клавиши. Какой бы метод вы ни выбрали, это значительно упростит ваш рабочий процесс и повысит эффективность работы в терминале. Попробуйте различные подходы, чтобы выбрать наиболее удобный для вас.

Оцените материал
Добавить комментарий

Капча загружается...