Делаем поиск по истории команд удобнее с помощью fzf

Мне часто приходится запускать команды повторно из истории Bash, но обычный воркфлоу очень неудобный:

  • Жмем Ctrl+R, вводим часть команды
  • У меня часто есть очень похожие команды и найти нужную таким способом невозможно

Или

  • Вызываем history
  • Ищем в недавно вызванных командах нужную
  • Запускаем её по номеру, например !3128

Я начал думать как улучшить поиск по истории и наткнулся на fzf Эта утилита умеет искать строки применяя инкрементный поиск к набору строк. Если запустить

history | fzf

то можно будет набрать часть команды и список строк заметно сузится, а потом можно с помощью стрелок выбрать нужную и нажать Enter. Но сама утилита fzf не писалась конкретно для history, поэтому после нажатия Enter мы всего лишь увидим в выводе терминала номер нашей команды в history и саму команду. Для того чтобы команда автоматически запускалась, я написал такую bash-функцию, которую нужно вставить в .bashrc файл

hist() {
 local cmd_num=$(history | tac | fzf | awk '{print $1}')
 fc -s "$cmd_num"
}

Теперь я могу набрать в терминале hist, затем начать набирать часть команды, убрав лишнее. А после нажатия Enter команда автоматически запустится

Скачать fzf можно как бинарником с гитхаба, так и есть PPA для Ubuntu. Версия в репозиториях 20.04 очень старая

Архив блога

Облако тегов