fcd does a partial search and cds into the result
You can define your own search root (or roots) and it will use that as a base for the results. It also supports autocompletion for the results it finds.
This commit is contained in:
parent
175b4a8073
commit
9515ee2765
61
plugins/fcd/fcd.plugin.zsh
Normal file
61
plugins/fcd/fcd.plugin.zsh
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
# fcd allows you to fuzzy/partial search for your projects and move directly into them
|
||||||
|
# This even works in hierarchical directory structures such as
|
||||||
|
# projects/clientname/projectname
|
||||||
|
# It will also autocomplete your project names for easy access, although this
|
||||||
|
# is limited to terms from the start of the name (e.g. oh-, instead of my-)
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# fcd filtername
|
||||||
|
# Running fcd without any arguments will show a list of all directories
|
||||||
|
#
|
||||||
|
# Examples:
|
||||||
|
# fcd my-
|
||||||
|
# Will cd you into your projects/oh-my-zsh directory
|
||||||
|
#
|
||||||
|
# fcd oh[TAB]
|
||||||
|
# Will autocomplete to oh-my-zsh and pressing return will cd you to
|
||||||
|
# projects/oh-my-zsh
|
||||||
|
#
|
||||||
|
# Customisation:
|
||||||
|
#
|
||||||
|
# You can configure the root dir for searching. By default this is set to
|
||||||
|
# $HOME/projects but you can override this yourself
|
||||||
|
# FCD_BASEDIR=$HOME/projects
|
||||||
|
#
|
||||||
|
# You can set fcd to search in multiple directories, e.g. projects and utils by
|
||||||
|
# adding them as an array
|
||||||
|
# FCD_BASEDIR=($HOME/projects $HOME/utils)
|
||||||
|
#
|
||||||
|
# More complex structures are possible as well. For example if your projects
|
||||||
|
# are organized by client or even by client and project type
|
||||||
|
# FCD_BASEDIR=($HOME/projects/*/sites)
|
||||||
|
|
||||||
|
# Set the default basedir to projects
|
||||||
|
[[ -z $FCD_BASEDIR ]] && FCD_BASEDIR=$HOME/projects
|
||||||
|
|
||||||
|
# Do the search and go to the result
|
||||||
|
fcd() {
|
||||||
|
DIRS=("${(@f)$(find ${FCD_BASEDIR} -mindepth 1 -maxdepth 1 -type d -path "*$1*" ! -iname ".*")}")
|
||||||
|
if (( ${#DIRS} == 1 )); then
|
||||||
|
cd ${DIRS[1]}
|
||||||
|
else
|
||||||
|
echo "Multiple results found:"
|
||||||
|
print -C 1 $DIRS
|
||||||
|
cd ${DIRS[1]}
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Use the autocompletion
|
||||||
|
compdef _fcd fcd
|
||||||
|
|
||||||
|
# Find the autocompletion list
|
||||||
|
_fcd_get_list() {
|
||||||
|
DIRS=("${(@f)$(find ${FCD_BASEDIR} -mindepth 1 -maxdepth 1 -type d -path "*$1*" ! -iname ".*")}")
|
||||||
|
print -C 1 $DIRS | awk '{gsub(/\/.*\//,"",$1); print}'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Add the autocompletion list to the autocompleter
|
||||||
|
_fcd() {
|
||||||
|
compadd `_fcd_get_list`
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user