Shell书签功能

tunzao bio photo By tunzao Comment

使用shell时总会有些经常访问的目录,老是cdcd去的实在是麻烦, 这不,总会有些大牛闲着木事解放我们的双手,利用软连接实现shell下的书签(类似浏览器)。

export MARKPATH=$HOME/.marks
function jump { 
    cd -P "$MARKPATH/$1" 2>/dev/null || echo "No such mark: $1"
}
function mark { 
    mkdir -p "$MARKPATH"; ln -s "$(pwd)" "$MARKPATH/$1"
}
function unmark { 
    rm -i "$MARKPATH/$1"
}
function marks {
    ls -l "$MARKPATH" | sed 's/  / /g' | cut -d' ' -f9- | sed 's/ -/\t-/g' && echo
}

把以上代码放到.zshrc或者.bashrc里,使用方法:
把当前目录加到书签mark your_mark_name
显示所有书签: marks
跳转到指定书签: jump your_mark_name
删除指定标签: unmark your_mark_name

以下代码给jump,unmark增加按Tab提示功能:

#zsh
function _completemarks {
  reply=($(ls $MARKPATH))
}

compctl -K _completemarks jump
compctl -K _completemarks unmark
#bash
_completemarks() {
	local curw=${COMP_WORDS[COMP_CWORD]}
	local wordlist=$(find $MARKPATH -type l -printf "%f\n")
	COMPREPLY=($(compgen -W '${wordlist[@]}' -- "$curw"))
	return 0
}

complete -F _completemarks jump unmark

PS: zsh用户福音,如果你在使用oh-my-zsh, 你只需要启用jump插件就行了。

参考:Quickly navigate your filesystem from the command-line

comments powered by Disqus