история-поиск-назад, но игнорировать префикс sudo в zsh?

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

Согласно этой странице: https://zsh.sourceforge.io/Doc/Release/Zsh-Line-Editor.html

history-search-backward: “Искать назад в истории строку, начинающуюся с первого слова в буфере.”

Но когда команда имеет префикс sudo, это все ломает. Могу ли я сделать так, чтобы zsh игнорировал sudo для этой команды?

Также хочу применить то же самое для history-search-forward

.

Ответ или решение

Для того чтобы нормально функционировать в командной строке, особенно в интерактивной оболочке, такой как Zsh, эффективное управление историей команд может значительно повысить вашу продуктивность. В контексте задания команды history-search-backward и history-search-forward играют важную роль в поиске предыдущих команд, которые начинаются с той же строки, что и введенная вами. Однако, когда команды предваряются префиксом sudo, это может нарушить ожидаемое поведение команды поиска в истории, поскольку оболочка будет рассматривать sudo как первую строку буфера. В этом случае возникает задача сделать так, чтобы Zsh игнорировал префикс sudo при выполнении этих команд.

Теоретические основы

Когда вы вводите команды в Zsh, оболочка сохраняет каждую введенную вами команду в специальный файл истории. Это позволяет вам в дальнейшем легко управлять вашими предыдущими командами без необходимости их повторного ввода. Классические сочетания клавиш, такие как <Ctrl+R>, помогают быстро находить ранее введенные команды. Однако стандартный механизм поиска будет учитывать каждое введенное слово, включая такие префиксы, как sudo.

История выполнения команд и префиксы

history-search-backward и history-search-forward позволяют эффективно проходить по истории выполнения команд, начиная с команд, которые совпадают с введенным словом. Однако дефолтно их работа такова, что любое первое слово в буфере, включая sudo, будет считаться основной строкой поиска. Это может быть неудобно, так как общие команды, запускаемые с sudo, как правило, имеют одну и ту же раскладку, но ранее использованное содержание часто теряется внутри истории под таким префиксом.

Применение решения

Для того чтобы игнорировать sudo при поиске в истории команд, вам необходимо внести изменения в конфигурацию Zsh через файл настройки (обычно это .zshrc). Это можно сделать, написав пользовательскую функцию, которая будет переопределять стандартное поведение поиска и игнорировать слово sudo, если оно стоит в начале.

Пример функции и ключевых шагов

Ниже приведен пример пользовательской функции, которую можно добавить к вашему .zshrc, чтобы игнорировать слово sudo в начале команды:

# Функция для поиска без учета "sudo"
zle_history_search_backward() {
  local cur
  cur=${BUFFER}
  if [[ $cur == sudo\ * ]]; then
    cur=${cur#sudo }
  fi
  LBUFFER=$cur
  zle history-search-backward
}

zle_history_search_forward() {
  local cur
  cur=${BUFFER}
  if [[ $cur == sudo\ * ]]; then
    cur=${cur#sudo }
  fi
  LBUFFER=$cur
  zle history-search-forward
}

# Переприсвоение горячих клавиш
zle -N zle_history_search_backward
zle -N zle_history_search_forward
bindkey '^[[A' zle_history_search_backward  # Устанавливаем стрелку вверх для предыдущего
bindkey '^[[B' zle_history_search_forward   # Устанавливаем стрелку вниз для следующего

Применение

  1. Добавление в .zshrc: Откройте файл .zshrc в вашем домашнем каталоге, используя любой текстовый редактор, например nano или vim, и добавьте вышеуказанный код.

  2. Перезапуск оболочки: Чтобы изменения вступили в силу, перезапустите вашу Zsh оболочку с помощью команды source ~/.zshrc, или просто закройте и откройте терминал снова.

  3. Тестирование: После этого, попробуйте ввести команду с sudo, например, sudo apt-get update, и затем используйте стрелки вверх или вниз, чтобы убедиться, что Zsh ищет команды, начиная после sudo.

Заключение

С использованием вышеописанного подхода можно добиться более согласованного и интуитивного поиска команд в истории, игнорируя распространенные, но не столь значимые префиксы, такие как sudo. Это делает работу в терминале более гладкой и удобной, особенно для пользователей, которым часто приходится переключаться между задачами и использовать множество привилегированных команд. Настройка Zsh через .zshrc позволяет создать персонализированную и эффективную среду, отвечающую вашим конкретным требованиям.

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

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