是否有类似 bash 的反向搜索历史记录(Ctrl- R)的东西,但仅适用于目录?
我有一些想要跳转到的深层文件夹层次结构,因此我想使用类似反向搜索历史记录之类的功能,但它只查找文件夹名称并提供绝对路径。
本质上,它会给出与使用类似的结果!?
,但仅cd
在前面匹配命令,您可以逐步浏览结果和完整路径。
到目前为止,我发现的最佳解决方案是标记。
答案1
看一下自动跳转:
最常用的 shell 命令之一是“cd”。我的朋友中有一个快速调查显示,他们输入的所有命令中,有 10% 到 20% 实际上是 cd 命令!不幸的是,使用 cd 从系统的一个部分跳转到另一个部分需要您输入几乎完整的路径,这不太实用,而且需要大量击键。
autojump 是一种更快捷的文件系统导航方式。它的工作原理是维护一个数据库,其中包含您从命令行使用最多的目录。jumpstat 命令显示数据库的当前内容。您需要进行一些工作才能使用数据库。一旦您的数据库相当完整,您就可以通过键入以下内容“跳转”到常用“cd”的目录:
j dirspec
答案2
有
cd -
即“cd[空格][连字符]”命令,它会转到你之前所在的目录,本质上是一个“深度 1 的历史记录”。重复“cd -”会在两个目录之间来回切换。
引用手册页:
应支持以下操作数:[...]
当使用 [连字符] 作为操作数时,这应等同于以下命令:
cd "$OLDPWD" && pwd
不幸的是,我不知道真正的内置目录历史记录。
答案3
您可以使用、、内置命令构建自己的cd
命令 。pushd
popd
dirs
用法
cd --
(列出当前历史记录)cd -num
(转到 num 目录)cd -
(返回上一目录)
function cd ()
{
local hnum=16;
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};
if [ -z "$index" ]; then
new_dir=$OLDPWD;
else
new_dir=$(dirs -l +$index) || return;
fi;
fi;
pushd -- "$new_dir" > /dev/null || return;
popd -n +$hnum &> /dev/null || true;
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
}
答案4
我已经做了脚本具有类似功能oh-my-zsh 的dirs -v
在 bash 上运行的命令。如果你曾经使用过哦我的天啊,你可能已经注意到,每次退出终端时,命令提供的目录历史记录dirs -v
都会被重置。如果你使用这个,就不会发生这种情况脚本, 然而。
功能:
使用 显示最近使用的 10 个目录的列表
d
。通过输入列表中的目录编号来跳转到列表中的任意目录。
每次访问目录时,目录路径都会放在列表顶部。