From 97ea54f2b2899dfb2b083d1f8ed9032070262684 Mon Sep 17 00:00:00 2001 From: thek4n Date: Thu, 12 Mar 2026 16:57:02 +0300 Subject: [PATCH] fzfhistory --- home/user/.config/zsh/mappings | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/home/user/.config/zsh/mappings b/home/user/.config/zsh/mappings index ed7d7b7..8f7968c 100644 --- a/home/user/.config/zsh/mappings +++ b/home/user/.config/zsh/mappings @@ -92,19 +92,34 @@ bindkey -M vicmd "^O" cddotdot fzfhistory() { - LBUFFER="$( \ - history -n 0 | \ + local cmd + # fc -l 1 выводит всю историю с номерами. + # Мы используем процесс-подстановку <(...) чтобы передать вывод fc напрямую в fzf. + # Сед (sed) убирает номера строк в начале, оставляя только текст команды. + # Важно: fc корректно обрабатывает многострочные команды, не разрывая их. + + cmd=$(fc -l 1 | \ + sed 's/^[ ]*[0-9]*[ ]*//' | \ fzf \ --ignore-case \ --scheme=history \ - --tac \ --no-multi \ --tiebreak=begin,index \ --height="$(($LINES/4))" \ --query="$BUFFER" \ - )" + --preview="echo {}" \ + --preview-window=wrap:30%:50%) + + if [[ -n "$cmd" ]]; then + # Очищаем буфер и вставляем выбранную команду + BUFFER=$cmd + # Перемещаем курсор в конец строки (опционально, но удобно) + CURSOR=$#BUFFER + fi + zle reset-prompt } + zle -N fzfhistory bindkey "^R" fzfhistory bindkey -M vicmd "^R" fzfhistory