用过autojump的同学应该都觉得这个工具很不错,它可以让你快速的进入某个目录,而且提示功能强大。它比较智能,大多数时候都能进入你所期望的目录。还没有用过的同学可以体验一下,安装很简单。
我没看过autojump的源码,原理也不甚了解。不过,我们可以基于历史cd命令来实现一个简单的autojump。这个想法的出发点是:你这次想进入的目录可能之前已经进入过,通过对历史cd命令进行匹配,得到一个近似最优的目标目录,并通过cd命令进入。实现源码在toy-autojump。
整体处理流程如下所示:
如果用户输入的目录存在,则:直接进入
否则:在历史cd命令中,对绝对路径进行后缀匹配,取最大匹配度的路径,
如果路径存在,则:直接进入
否则:在历史cd命令中,对相对路径进行后缀匹配,取最大匹配度的路径,
如果该相对路径在当前目录或家目录下,则:直接进入
否则:如果用户输入的目录在家目录下,则:直接进入
否则:交给shell进行报错,提醒用户输入的目录不存在。