Терминал с безкрайна история и FZF

Терминал с безкрайна история и FZF

Всеки администратор или разработчик е изпадал в ситуацията: „Преди три месеца написах една сложна команда, която работеше перфектно… каква беше тя?“. Стандартната конфигурация на Linux пази само последните 500-1000 команди, което означава, че ценното ви знание постоянно се изтрива.

В тази статия ще конфигурираме терминала така, че да помни 1 милион реда, да синхронизира историята между всички отворени прозорци в реално време и да я претърсва светкавично.

1. Конфигуриране на „Безкрайната история“

Първата стъпка е да кажем на Bash да спре да трие миналото ни. Отворете ~/.bashrc и добавете следните настройки:

# Определяне на огромен капацитет за историята
HISTFILESIZE=1000000
HISTSIZE=1000000

# Добавяне на дата и час към всяка команда (формат: ГГГГ-ММ-ДД ЧЧ:ММ:СС)
HISTTIMEFORMAT="%F %T "

# Важни настройки за синхронизация:
# 1. Добавяне към файла, вместо презаписване
shopt -s histappend

# 2. Синхронизиране в реално време между всички терминали
# Записва веднага, чисти кеша и презарежда историята след всяка команда
export PROMPT_COMMAND='history -a; history -c; history -r'

# Игнориране на дубликати и команди, започващи с интервал
HISTCONTROL=ignoreboth:erasedups

ignoreboth: Не записва команди, започващи с интервал, и дубликати на последната команда.

erasedups: Изтрива всички предишни срещания на същата команда от цялата история, когато напишеш нова. Така в твоя 1 милион реда ще имаш само уникални записи, което прави fzf още по-бърз.

Защо това е важно?

  • Синхронизация: Ако напишете команда в един прозорец, тя е достъпна в следващия веднага.
  • Контекст: С HISTTIMEFORMAT винаги знаете кога точно сте извършили дадена промяна по сървъра.
  • Сигурност: Ако започнете команда с интервал (напр. mysql -p123), тя няма да бъде записана в историята благодарение на ignoreboth.

2. Интерактивно търсене с FZF

С 1 милион реда история стандартното Ctrl+R става неизползваемо. Тук на помощ идва FZF (Fuzzy Finder). Той ни позволява да филтрираме историята чрез частично съвпадение на думи.

Добавете тази функция във вашия ~/.bashrc:

# === Advanced FZF History Search ===
__fzf_history__() {
    local cmd
    # Извличане на историята, премахване на дубликати и пускане през FZF
    cmd=$(history | 
        sed 's/^[ ]*[0-9]\+[ ]*//' | 
        tac | 
        awk '!seen[$0]++' | 
        fzf --height=40% \
            --layout=reverse \
            --border=rounded \
            --header="Търсене в историята (Ctrl+R)" \
            --prompt="🔍 > " \
            --preview 'echo {}' \
            --preview-window=down:2:wrap)

    if [[ -n "$cmd" ]]; then
        READLINE_LINE="$cmd"
        READLINE_POINT=${#READLINE_LINE}
    fi
}

# Свързване на функцията с клавишната комбинация Ctrl+R
bind -x '"\C-r": __fzf_history__'

3. Как се променя работата ви?

След като запазите промените и презаредите с source ~/.bashrc, вашият работен процес ще изглежда така:

  1. Търсене по смисъл: Натискате Ctrl+R и пишете просто "wp plugin install". FZF веднага ще ви намери командата, дори думите да не са една до друга.
  2. Редакция преди изпълнение: Избраната команда не се изпълнява веднага, а се "зарежда" на командния ред. Можете да промените името на сайта или параметър, преди да натиснете Enter.
  3. Без загуби: Дори сървърът да забие или връзката да прекъсне, последната ви команда вече е записана на диска благодарение на PROMPT_COMMAND.
Извличане на историята

Заключение

Терминалът не трябва да бъде просто място за писане, а ваш архив. С тези 20 реда код вие превръщате историята си в база данни със знания, която е винаги на един клавиш разстояние.

Федя Серафиев

Федя Серафиев

Федя Серафиев e собственик на уебсайта urocibg.eu. Той намира удовлетворение в това да помага на хората да решават и най-сложните технически проблеми. Сегашната му цел е да пише лесни за следване статии, така че подобни проблеми изобщо да не възникват.

💝 Благодарим ви, че прочетохте тази статия! Ако сте намерили информацията за полезна, можете да подкрепите нашия труд със символична сума:
💝 Благодарим ви за подкрепата!

Последвайте ни във Facebook за още IT съвети и новини

Последвайте ни

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *


Колко е 5 - 3 ? (въведете числото)