From 09ace58f59695d912f5f1f55f5e551efbb1ffa89 Mon Sep 17 00:00:00 2001 From: Julian Prein Date: Wed, 24 May 2023 11:59:40 +0200 Subject: [PATCH] zsh:funcs: Add `diffcmds()` --- .config/zsh/zshrc.d/40-functions.zsh | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/.config/zsh/zshrc.d/40-functions.zsh b/.config/zsh/zshrc.d/40-functions.zsh index 6ca9b88..01767e9 100644 --- a/.config/zsh/zshrc.d/40-functions.zsh +++ b/.config/zsh/zshrc.d/40-functions.zsh @@ -626,3 +626,25 @@ pdfunite() { psofof() { lsof "$@" | tail -n +2 | awk '{ print $2 }' | sort -u } + +# vimdiff the output of multiple commands following the same pattern. +# +# Example: +# diffcmds utk %% layout-table-full -- file1 file2 +# +# would be equivalent to: +# vimdiff =(utk file1 layout-table-full) =(utk file2 layout-table-full) +diffcmds() { + if (( ! $+commands[vimdiff] )); then + printf >&2 "vimdiff not installed\n" + return 1 + fi + + local i=${@[(ei)--]} + + local cmdline="vimdiff" + for arg in "${@:$((i+1))}"; do + cmdline+=" =(${${@:1:$((i-1))}//\%\%/$arg})" + done + eval "${=cmdline}" +}