aboutsummaryrefslogtreecommitdiff
path: root/.fzfrc
diff options
context:
space:
mode:
authorGuangxiong Lin <[email protected]>2022-01-22 21:11:52 +0800
committerGuangxiong Lin <[email protected]>2022-01-22 21:11:52 +0800
commit843b8510acd58fa9c1d1df6d8837d0406392e1b2 (patch)
tree1a4cf0c23b8100dad12a822238f8e4ee4a0fc7d2 /.fzfrc
parent2a73c0e9167373828763e1965fc6fedda9431509 (diff)
downloaddotfiles-843b8510acd58fa9c1d1df6d8837d0406392e1b2.tar.gz
dotfiles-843b8510acd58fa9c1d1df6d8837d0406392e1b2.tar.bz2
dotfiles-843b8510acd58fa9c1d1df6d8837d0406392e1b2.zip
Add fzf config
The fzf config is splited into .env and .functions before. It will be hard to remove the config of fzf when I want to replace fzf with other finder (e.g. skim). I place all config related to .fzfrc now. Besides, I add the config to load fzf completion and key bindings.
Diffstat (limited to '.fzfrc')
-rwxr-xr-x.fzfrc62
1 files changed, 62 insertions, 0 deletions
diff --git a/.fzfrc b/.fzfrc
new file mode 100755
index 0000000..53fb5d3
--- /dev/null
+++ b/.fzfrc
@@ -0,0 +1,62 @@
+# vim: ft=sh
+
+export FZF_DEFAULT_COMMAND='find . -type f'
+if [ -f /usr/bin/fd ];then
+ export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git'
+fi
+
+# completion and key bindings
+
+case $SHELL in
+*/zsh)
+ complete_share_file=/usr/share/fzf/completion.zsh
+ keybinds_share_file=/usr/share/fzf/key-bindings.zsh
+
+ [ -f $complete_share_file ] && source $complete_share_file
+ [ -f $keybinds_share_file ] && source $keybinds_share_file
+
+ complete_local_file=/usr/local/opt/fzf/shell/completion.zsh
+ keybinds_local_file=/usr/local/opt/fzf/shell/key-bindings.zsh
+
+ [ -f $complete_local_file ] && source $complete_local_file
+ [ -f $keybinds_local_file ] && source $keybinds_local_file
+ ;;
+*/bash)
+ ;;
+*)
+esac
+
+# functions
+
+fco () {
+ local tags branches target
+ branches=$(
+ git --no-pager branch --all \
+ --format="%(if)%(HEAD)%(then)%(else)%(if:equals=HEAD)%(refname:strip=3)%(then)%(else)%1B[0;34;1mbranch%09%1B[m%(refname:short)%(end)%(end)" \
+ | sed '/^$/d'
+ ) || return
+ tags=$(
+ git --no-pager tag | awk '{print "\x1b[35;1mtag\x1b[m\t" $1}'
+ ) || return
+ target=$(
+ (echo $branches; echo $tags) \
+ | fzf --no-hscroll --no-multi -n 2 --ansi
+ ) || return
+ git checkout $(awk '{print $2}' <<<$target)
+}
+
+fs () {
+ local session
+ session=$(tmux list-sessions -F "#{session_name}" \
+ | fzf --query=$1 --select-1 --exit-0) \
+ && tmux switch-client -t $session
+}
+
+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."
+}
+