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

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



