From bab56047310ff217d2faa97f8ddbe725063ffb14 Mon Sep 17 00:00:00 2001 From: js0ny Date: Thu, 27 Feb 2025 03:04:31 +0000 Subject: [PATCH] feat(shell): Quick Jump to frequently used directories --- tools/fish/conf.d/alias.fish | 1 + tools/fish/conf.d/navi.fish | 53 ++++++++++++++++---------- tools/zsh/mod/navi.zsh | 73 +++++++++++++++--------------------- 3 files changed, 65 insertions(+), 62 deletions(-) diff --git a/tools/fish/conf.d/alias.fish b/tools/fish/conf.d/alias.fish index bf577e6..c9eb61c 100644 --- a/tools/fish/conf.d/alias.fish +++ b/tools/fish/conf.d/alias.fish @@ -154,3 +154,4 @@ end function __last_history_item; echo $history[1]; end abbr -a !! --position anywhere --function __last_history_item + diff --git a/tools/fish/conf.d/navi.fish b/tools/fish/conf.d/navi.fish index e5898b6..bf4f16b 100644 --- a/tools/fish/conf.d/navi.fish +++ b/tools/fish/conf.d/navi.fish @@ -7,28 +7,41 @@ # Linking: Link the whole directory for submodules # ln -sf $DOTFILES/tools/fish ~/.config/fish +set __CD_CMD "cd" if command -v zoxide > /dev/null + set __CD_CMD "z" zoxide init fish | source - alias ..="z .." - alias ...="z ../.." - alias ....="z ../../.." - alias .....="z ../../../.." - alias ......="z ../../../../.." - - abbr --add \- 'z -' - - - function zls - z $argv[1] && ls - end -else - alias ..="cd .." - alias ...="cd ../.." - alias ....="cd ../../.." - alias .....="cd ../../../.." - alias ......="cd ../../../../.." - - abbr --add \- 'cd -' end + + +alias ..="$__CD_CMD .." +alias ...="$__CD_CMD ../.." +alias ....="$__CD_CMD ../../.." +alias .....="$__CD_CMD ../../../.." +alias ......="$__CD_CMD ../../../../.." + +abbr --add \- "$__CD_CMD -" + + +function zls + $__CD_CMD $argv[1] && ls +end + +alias cdls=zls + +function __source_quick_jump + set dir (fd --type d --max-depth 1 . ~/Source/ | fzf --preview 'lsd --color always --icon always {}') + if test -n "$dir" + cd "$dir" + end +end +# Quick Jump Directories +test -d $DOTFILES && abbr --add dot "$__CD_CMD $DOTFILES" +test -d $HOME/Downloads && abbr --add down "$__CD_CMD $HOME/Downloads" +test -d $HOME/.config && abbr --add conf "$__CD_CMD $HOME/.config" +test -d $HOME/Obsidian && abbr --add ob "$__CD_CMD $HOME/Obsidian" +test -d $HOME/Source && alias src="__source_quick_jump" +test -d $HOME/Source/Scripts && alias scr="fd --type f --hidden --exclude .git --exclude '.*' . ~/Source/Scripts/ | fzf --preview 'bat --color=always --style=numbers {}' | xargs -r nvim" +test -d $HOME/OrgFiles && abbr --add org "$__CD_CMD $HOME/OrgFiles" diff --git a/tools/zsh/mod/navi.zsh b/tools/zsh/mod/navi.zsh index 051ffc0..48573fa 100644 --- a/tools/zsh/mod/navi.zsh +++ b/tools/zsh/mod/navi.zsh @@ -3,48 +3,37 @@ # Author: js0ny # Sourced by user's zshrc 在用户的 zshrc 中被引用 -# Absolute navigation # -alias dotfiles="cd $DOTFILES && ls" -if [ "$IS_WSL" = true ]; then # IS_WSL is defined in $DOTFILES/platforms/wsl/zshrc - winuser=$(whoami.exe | cut -d'\' -f2 | tr -d '\r') - alias dt="cd /mnt/c/Users/$winuser/Desktop && ls" - alias doku="cd /mnt/c/Users/$winuser/Documents && ls" - alias down="cd /mnt/c/Users/$winuser/Downloads && ls" - alias src="cd /mnt/d/Source" - alias one="cd /mnt/c/Users/$winuser/OneDrive" - alias gdrive="cd /mnt/g" -else - alias dt="cd $HOME/Desktop && ls" - alias doku="cd $HOME/Documents && ls" - alias down="cd $HOME/Downloads && ls" - alias src="cd $HOME/Documents/Source" + +# Define __CD_CMD as "cd" by default +__CD_CMD="cd" + +# If zoxide is available, use it +if command -v zoxide >/dev/null; then + __CD_CMD="z" + eval "$(zoxide init zsh)" fi -# macOS specific, no OneDrive & Google Drive on Linux -if [ "$(uname)" = "Darwin" ]; then - alias one="cd $HOME/OneDrive" - alias gdrive="cd $HOME/Google Drive" -fi +# Define aliases for quick navigation +alias ..="$__CD_CMD .." +alias ...="$__CD_CMD ../.." +alias ....="$__CD_CMD ../../.." +alias .....="$__CD_CMD ../../../.." +alias ......="$__CD_CMD ../../../../.." -if command -v zoxide >/dev/null 2>&1; then - eval "$(zoxide init zsh)" - # Relative navigation # - alias ..="z .." - alias ...="z ../.." - alias ....="z ../../.." - alias .....="z ../../../.." - alias ......="z ../../../../.." - # Use `-` to jump to the previous directory - # Oh-My-Zsh defines a similar one - alias - "z -" - zls() { - cd $1 && ls - } -else - alias ..="cd .." - alias ...="cd ../.." - alias ....="cd ../../.." - alias .....="cd ../../../.." - alias ......="cd ../../../../.." - alias - "cd -" -fi +# Abbreviation for "cd -" +alias - "$__CD_CMD -" + +# Define zls function for cd + ls +zls() { + "$__CD_CMD" "$1" && ls +} +alias cdls=zls + +# Quick Jump Directories +[[ -d "$DOTFILES" ]] && alias dot="$__CD_CMD $DOTFILES" +[[ -d "$HOME/Downloads" ]] && alias down="$__CD_CMD $HOME/Downloads" +[[ -d "$HOME/.config" ]] && alias conf="$__CD_CMD $HOME/.config" +[[ -d "$HOME/Obsidian" ]] && alias ob="$__CD_CMD $HOME/Obsidian" +[[ -d "$HOME/Source" ]] && alias src="$__CD_CMD $HOME/Source" +[[ -d "$HOME/Source/Scripts" ]] && alias scr="$__CD_CMD $HOME/Source/Scripts" +[[ -d "$HOME/OrgFiles" ]] && alias org="$__CD_CMD $HOME/OrgFiles"