From 755f41bcf87caae0c1a0a6785b731ab141c13dbb Mon Sep 17 00:00:00 2001 From: Ade Attwood Date: Mon, 28 Dec 2020 21:12:43 +0000 Subject: [PATCH] feat(zsh): add fzf scripts --- .../core/files/oh-my-zsh/custom/fzf.zsh | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 site-modules/core/files/oh-my-zsh/custom/fzf.zsh diff --git a/site-modules/core/files/oh-my-zsh/custom/fzf.zsh b/site-modules/core/files/oh-my-zsh/custom/fzf.zsh new file mode 100644 index 0000000..d5942a1 --- /dev/null +++ b/site-modules/core/files/oh-my-zsh/custom/fzf.zsh @@ -0,0 +1,50 @@ +#!/bin/zsh +# +# FZF scripts to help with various tasks +# +# Author: Ade Attwood +# Updated: 2020-12-28 +# + +# +# Edit commands with file previews using `fd` to search files to exclude files +# to improve performance +# +alias fe="e \$(FZF_DEFAULT_COMMAND=\"fd -t f\" fzf --layout=reverse --preview 'bat --style=numbers ---color=always {}')" +alias fte="te \$(FZF_DEFAULT_COMMAND=\"fd -t f\" fzf --layout=reverse --preview 'bat --style=numbers ---color=always {}')" + +# +# Searching the git history with diff and show preview support. When selecting a +# commit `git show` output is displayed and `CTRL-d` the `git diff` output is +# displayed +# +fshow() { + local out shas sha q k + while out=$( + git log --color=always \ + --format="%C(auto)%h%d %s %C(black)%C(bold)%cr" "$@" | + fzf --ansi --multi --no-sort --reverse --query="$q" \ + --print-query --expect=ctrl-d --toggle-sort=\`); do + q=$(head -1 <<< "$out") + k=$(head -2 <<< "$out" | tail -1) + shas=$(sed '1,2d;s/^[^a-z0-9]*//;/^$/d' <<< "$out" | awk '{print $1}') + [ -z "$shas" ] && continue + if [ "$k" = ctrl-d ]; then + git diff --color=always $shas | less -R + else + for sha in $shas; do + git show --color=always $sha | less -R + done + fi + done +} + +# +# Interactive `git add` with FZF and diff preview support. +# +fadd() { + git add $(git -c color.status=always status --short | + fzf -m --reverse --ansi --multi --ansi --nth 2..,.. \ + --preview '(git diff --color=always -- {-1} | sed 1,4d; cat {-1}) | head -500' | + cut -c4- | sed 's/.* -> //') +}