mirror of https://github.com/einverne/dotfiles.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
4.3 KiB
142 lines
4.3 KiB
4 years ago
|
# fzf config
|
||
|
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
|
||
|
# export FZF_DEFAULT_COMMAND='ag --hidden --ignore .git --ignore .idea -l -g ""'
|
||
|
export FZF_DEFAULT_COMMAND='fd --type f --hidden --exclude .git --exclude .idea ""'
|
||
|
#export FZF_DEFAULT_OPTS="--reverse --inline-info"
|
||
|
export FZF_DEFAULT_OPTS="--height 40% --layout=reverse --preview '(highlight -O ansi {} || cat {}) 2> /dev/null | head -500'"
|
||
|
|
||
|
# fe [FUZZY PATTERN] - Open the selected file with the default editor
|
||
|
# - Bypass fuzzy finder if there's only one match (--select-1)
|
||
|
# - Exit if there's no match (--exit-0)
|
||
|
fe() {
|
||
|
local files
|
||
|
IFS=$'\n' files=($(fzf-tmux --query="$1" --multi --select-1 --exit-0))
|
||
|
[[ -n "$files" ]] && ${EDITOR:-vim} "${files[@]}"
|
||
|
}
|
||
|
|
||
|
|
||
|
# Modified version where you can press
|
||
|
# - CTRL-O to open with `open` command,
|
||
|
# - CTRL-E or Enter key to open with the $EDITOR
|
||
|
fo() {
|
||
|
local out file key
|
||
|
IFS=$'\n' out=("$(fzf-tmux --query="$1" --exit-0 --expect=ctrl-o,ctrl-e)")
|
||
|
key=$(head -1 <<< "$out")
|
||
|
file=$(head -2 <<< "$out" | tail -1)
|
||
|
if [ -n "$file" ]; then
|
||
|
[ "$key" = ctrl-o ] && open "$file" || ${EDITOR:-vim} "$file"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
# Use fd and fzf to get the args to a command.
|
||
|
# Works only with zsh
|
||
|
# Examples:
|
||
|
# f mv # To move files. You can write the destination after selecting the files.
|
||
|
# f 'echo Selected:'
|
||
|
# f 'echo Selected music:' --extention mp3
|
||
|
# fm rm # To rm files in current directory
|
||
|
f() {
|
||
|
sels=( "${(@f)$(fd "${fd_default[@]}" "${@:2}"|fz)}" )
|
||
|
test -n "$sels" && print -z -- "$1 ${sels[@]:q:q}"
|
||
|
}
|
||
|
|
||
|
# Like f, but not recursive.
|
||
|
fm() f "$@" --max-depth 1
|
||
|
|
||
|
# Deps
|
||
|
alias fz="fzf-noempty --bind 'tab:toggle,shift-tab:toggle+beginning-of-line+kill-line,ctrl-j:toggle+beginning-of-line+kill-line,ctrl-t:top' --color=light -1 -m"
|
||
|
fzf-noempty () {
|
||
|
local in="$(</dev/stdin)"
|
||
|
test -z "$in" && (
|
||
|
exit 130
|
||
|
) || {
|
||
|
ec "$in" | fzf "$@"
|
||
|
}
|
||
|
}
|
||
|
ec () {
|
||
|
if [[ -n $ZSH_VERSION ]]
|
||
|
then
|
||
|
print -r -- "$@"
|
||
|
else
|
||
|
echo -E -- "$@"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
# fd - cd to selected directory
|
||
|
fd() {
|
||
|
local dir
|
||
|
dir=$(find ${1:-.} -path '*/\.*' -prune \
|
||
|
-o -type d -print 2> /dev/null | fzf +m) &&
|
||
|
cd "$dir"
|
||
|
}
|
||
|
|
||
|
# fh - repeat history
|
||
|
fh() {
|
||
|
print -z $( ([ -n "$ZSH_NAME" ] && fc -l 1 || history) | fzf +s --tac | sed -r 's/ *[0-9]*\*? *//' | sed -r 's/\\/\\\\/g')
|
||
|
}
|
||
|
|
||
|
# fkill - kill process
|
||
|
fkill() {
|
||
|
local pid
|
||
|
pid=$(ps -ef |grep -v ^root | sed 1d | fzf -m | awk '{print $2}')
|
||
|
|
||
|
if [ "x$pid" != "x" ]
|
||
|
then
|
||
|
echo $pid | xargs kill -${1:-9}
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
# tm - create new tmux session, or switch to existing one. Works from within tmux too. (@bag-man)
|
||
|
# `tm` will allow you to select your tmux session via fzf.
|
||
|
# `tm irc` will attach to the irc session (if it exists), else it will create it.
|
||
|
|
||
|
tm() {
|
||
|
[[ -n "$TMUX" ]] && change="switch-client" || change="attach-session"
|
||
|
if [ $1 ]; then
|
||
|
tmux $change -t "$1" 2>/dev/null || (tmux new-session -d -s $1 && tmux $change -t "$1"); return
|
||
|
fi
|
||
|
session=$(tmux list-sessions -F "#{session_name}" 2>/dev/null | fzf --exit-0) && tmux $change -t "$session" || echo "No sessions found."
|
||
|
}
|
||
|
|
||
|
# fs [FUZZY PATTERN] - Select selected tmux session
|
||
|
# - Bypass fuzzy finder if there's only one match (--select-1)
|
||
|
# - Exit if there's no match (--exit-0)
|
||
|
fs() {
|
||
|
local session
|
||
|
session=$(tmux list-sessions -F "#{session_name}" | \
|
||
|
fzf --query="$1" --select-1 --exit-0) &&
|
||
|
tmux switch-client -t "$session"
|
||
|
}
|
||
|
|
||
|
unalias z 2> /dev/null
|
||
|
z() {
|
||
|
[ $# -gt 0 ] && _z "$*" && return
|
||
|
cd "$(_z -l 2>&1 | fzf --height 40% --nth 2.. --reverse --inline-info +s --tac --query "${*##-* }" | sed 's/^[0-9,.]* *//')"
|
||
|
}
|
||
|
|
||
|
|
||
|
#alias lp="lpass show -c --password $(lpass ls | fzf | awk '{print $(NF)}' | sed 's/\]//g')"
|
||
|
gcbr() {
|
||
|
result=$(git branch -a --color=always | grep -v '/HEAD\s' | sort |
|
||
|
fzf --height 50% --border --ansi --tac --preview-window right:70% \
|
||
|
--preview 'git log --oneline --graph --date=short --pretty="format:%C(auto)%cd %h%d %s" $(sed s/^..// <<< {} | cut -d" " -f1) | head -'$LINES |
|
||
|
sed 's/^..//' | cut -d' ' -f1)
|
||
|
|
||
|
if [[ $result != "" ]]; then
|
||
|
if [[ $result == remotes/* ]]; then
|
||
|
git checkout --track $(echo $result | sed 's#remotes/##')
|
||
|
else
|
||
|
git checkout "$result"
|
||
|
fi
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
gfs() {
|
||
|
git -c color.status=always status --short |
|
||
|
fzf --height 50% --border --ansi --multi --ansi --nth 2..,.. \
|
||
|
--preview '(git diff --color=always -- {-1} | sed 1,4d; cat {-1}) | head -500' |
|
||
|
cut -c4- | sed 's/.* -> //'
|
||
|
}
|
||
|
|
||
|
|