Answers:
看一下autojump:
最常用的shell命令之一是“ cd”。在我的朋友中进行的一项快速调查显示,他们键入的所有命令中有10%到20%实际上是cd命令!不幸的是,使用cd从系统的一部分跳到另一部分需要您输入几乎完整的路径,这不是很实际,并且需要大量的击键。
自动跳转是浏览文件系统的一种更快的方法。它通过维护命令行中最常用的目录的数据库来工作。jumpstat命令向您显示数据库的当前内容。您需要做一些工作才能使数据库可用。数据库合理完成后,您可以通过键入以下内容“跳转”到通常为“ cd”的目录:
j dirspec
只是为了亲身体验,我前段时间编写了一个简单的脚本来满足此要求,它用一个简单的函数覆盖了内置的cd命令,该函数将新的目录位置附加到历史文件中,然后使用python脚本提供一个bash界面,当您输入搜索词时,该界面会动态更新目录的有序列表,有点像bash的反向命令搜索。
那些好奇的人可以在git-hub上找到它。
我想推荐我ltcd
快速浏览目录历史记录:
它提供以下功能以使生活更轻松:
好的,您可以将此代码段添加到~/.bashrc
,
提供自定义cd命令
function cd ()
{
exists=false
for dir in "${CDHIST[@]}"; do
[ "$dir" == "$1" ] && {
exists == true
break
}
done
$exists || {
len=${#CDHIST[@]}
${CDHIST[$len]} = "$1"
}
builtin cd "$1"
}
并提供cd历史记录搜索命令。
function cdhist ()
{
#TODO: Make this magical.
for dir in "${CDHIST[@]}"; do
echo "$dir"
done
}
当然,我提供的cdhist命令是非常基本的,而不是您想要的。但是可以考虑使用case语句或参数扩展来实现与您想要的功能类似的功能。
您甚至可以添加一些“可编程完成”功能,该功能可用于cd /path/to/mydir
基于的唯一子字符串添加完整命令/path/to/unique/mydir
,尽管该方法仍然需要您键入cd unique/mydir<tab>
。
dirs
命令与基本上具有相同的功能my_dirs
,但只在一行上。
alias cd=pushd
这将是最优雅的形式。
你可以建立自己的cd
使用命令pushd
,popd
,dirs
内置命令。
cd --
(列出当前历史记录)
cd -num
(转到num目录)
cd -
(转到上一个目录)
function cd()
{
local hnum=16 # number of entries
local new_dir index dir cnt
if ! [ $# -eq 0 ]; then
if [[ $# -eq 2 && $1 = "--" ]]; then
shift
else
if ! { [ $# -eq 1 ] && [[ $1 =~ ^(-[0-9]{,2}|-|--|[^-].*)$ ]] ;}
then
builtin cd "$@"
return
fi
fi
fi
[ "$1" = "--" ] && { dirs -v; return ;}
new_dir=${1:-$HOME}
if [[ "$new_dir" =~ ^(-[0-9]{,2}|-)$ ]]; then
index=${new_dir:1}
[ -z "$index" ] && index=1
new_dir=$(dirs -l +$index) || return
fi
pushd -- "$new_dir" > /dev/null || return
popd -n +$hnum &> /dev/null
new_dir=$PWD cnt=1
while dir=$(dirs -l +$cnt 2> /dev/null); do
if [ "$dir" = "$new_dir" ]; then
popd -n +$cnt > /dev/null
continue
fi
let cnt++
done
}
export -f cd
我将这个工具放在一起,它将以前的解决方案(用于存储全面的全局CLI历史记录)与称为percol(映射到C ^ R)的交互式grepping工具结合在一起。我用它来检索命令的运行位置或通过命令查找目录。在我开始使用它的第一台机器上,它仍然很光滑,现在具有超过2年的CLI历史。
grep工具可同时在路径和命令上使用,但可能对您仍然有用。另请参见zsh中的“ dirs -v”
cd share/man
仅当我已经在/ usr中时,此方法才有效。