config/fish/conf.d/fzf.fish

48 lines
1.7 KiB
Fish

# https://github.com/junegunn/fzf
set -gx FZF_DEFAULT_OPTS "--no-height --layout=reverse"
set -gx FZF_DEFAULT_COMMAND "fd --type=file"
function __fzf_files
set -l output (
fd --type=file --hidden --follow --color=always --exclude=.git 2>/dev/null |
fzf --ansi --preview='bat --style=numbers --color=always {}' --preview-window='right:70%:hidden:wrap' --bind='?:toggle-preview' --expect='ctrl-e' --header='ctrl-e to edit, ? to preview'
)
set -l key $output[1]
set -l file $output[2]
switch $key
case ctrl-e
set -q EDITOR; or set EDITOR vim
commandline -r "$EDITOR $file"
case '*'
commandline -i $file
end
commandline -f repaint
end
function __fzf_git_log
if not git rev-parse --git-dir >/dev/null 2>&1
echo '__fzf_search_git_log: Not in a git repository!' >&2
else
set -l output (
command git logsearch |
fzf --ansi --tiebreak=index --preview='git show --color {2}' --preview-window='right:70%:hidden:wrap' --bind='?:toggle-preview' --header='? to preview'
)
if set -l commit_hash (string split --max 2 " " $output)[2]
commandline -i $commit_hash
end
end
commandline -f repaint
end
function __fzf_history
set -l separator ' | '
set -l output (
history search --null --show-time="%Y-%m-%d$separator" |
fzf --read0 --tiebreak=index --query=(commandline) --preview='echo {3..}' --preview-window='bottom:50%:hidden:wrap' --bind='?:toggle-preview' --header='? to preview'
)
if set -l command (string split --max 1 $separator $output)[2..-1]
commandline -r $command
end
commandline -f repaint
end