介绍
cd 模块用于交互环境下,可以让你快速的跳转到你想要的目录。
cd 模块的实现只依赖 shell/awk 以及 find,不需要其它二进制依赖。换言之,哪怕在最为简陋的 busybox 环境,x cd 的 magic 都能全部使用。
由于 cd 很常用,因此在 x-cmd 加载时为其设置一个 alias: alias c='x cd' -- 因此用户只需要输入 c,而不再需要输入 x cd。
首次用户
-
在终端运行
eval "$(curl https://get.x-cmd.com)"即可完成 x 命令安装, 详情参考 x-cmd 官网 -
x-cmd 提供 mod 教程,其中包含了 cd 模块常用功能的 demo 示例,可以帮你快速上手 cd 模块。
-
使用案例:
# 打开交互式 app 在历史记录里面搜索路径并跳转
c
# 尝试从历史记录中查找匹配的路径,进行跳转
c ,<keyword>
# 短命令,会进入 /usr/bin 目录
c /u/b
# 以交互方式打开上级目录,进行选择跳转
c ...
# 在当前路径中向后搜索包含关键字的文件夹目录
c -b <keyword>
# 在当前路径中往前搜索包含关键字的文件夹目录
c -f <keyword>
# 列出所有的历史路径
c --history ls
# 列出所有的 relm 路径
c --relm ls
子命令
| 名称 | 描述 |
|---|---|
| x cd -b | 从当前路径开始,往后搜索文件夹 |
| x cd -f | 从当前路径开始,往前搜索文件夹 |
| x cd --history | 历史记录管理 |
| x cd --relm | relm 管理 |
info
经过考虑,我们决定将 gd 模块的功能全部合并到 cd 模块内,如果你是原
x gd的用户,你仍可以用同样的方式使用x cd。
路径跳转的五方面提升
1 历史目录 -- 常用目录
- cd 模块会在交互环境(而非脚本执行)记录你的历史目录,以此为基础,为你提供快速跳转的建议
- 体验这个功能,你只需要
c回车,就能看到一个历史目录列表 - 该列表存储到本地,只会记录最近 500 条去重记录 -- 实测 500 条记录完全满足正常使用(实际上对于我而言 300 就够),过大会对交互有影响;毕竟,我们是想要快速跳转。
- 用户也可以用
c ,<keyword>,我们将会寻找最近的历史中带有<keyword>的目录,进行跳转
2 relm -- 目录别名
-
:<目录别名>: 用户可以对常用的目录起一个别名,进行快速跳转。 -
我们把这个带别名的目录称之为 relm,用户不仅可以跳到 relm ,还能跳到 relm 内的目录。例如
c :desk/src能跳到当前用户的桌面中的src目录。 -
根据系统的特点,我们已经对常用的目录提供了别名,例如
c :desk当前用户的桌面目录,c :down表示用户的下载目录(当前会根据系统自动识别)c :表示当前 shell 加载 x-cmd 时的目录 -- 这个在 IDE 里的终端非常有用;例如你打开 vscode 的终端,初始化时就是项目根目录,你可以通过c :快速回到项目的根目录c :git如果当前目录是在 git 管理文件夹下,会跳到该文件夹的根目录的 .git 目录内- 还有很多,例如 Git BASH 或者 WSL 中跳转到
c:\Program Files,等等
-
关于当前系统所可用的 relm,用户可以
c --relm便可查看 -
用户也可以自定义 relm:
c --relm set ho $HOMEc :ho即可跳到用户的 HOME 目录- 具体请查看
c --relm -h
3 目录回退 -- backward
- 相关的子命令为
c -b,但是我引入了...以及.../<keyword>两个 magic - 想法很简单,
...将会打开一个交互界面,你可以快速跳转到上级目录,而.../keyword则会根据你的输入,寻找最近的历史中带有<keyword>的目录,进行跳转;如果有多个,以交互方式给用户提供选项。
4 向前探查 与 缩写探查
这两项是实验性功能
- 向前探查:
- 这个功能比较复杂
- 里面用到了
find,如果目录文件很多,交互会有卡顿,日后我们会加入多种优化,以提高性能
- 缩写探查:
c /u/b,除非你系统真实存在/u/b这个目录,否则会跳到/usr/bin目录
5 关于历史目录的排序: 采用 LRU 并非 LFU
一言以蔽之,x cd 把历史目录定义为常用目录,因此采用 LRU(Least Recently Used)策略。
当前设计,只是记录了使用 x cd 切换的目录( 只存储最近 500 次 ),以此生成建议列表。 与 z,autojump 不同的是,x cd 仅仅是按照最近使用作为排序依据,而非频率(热度),主要出于下面考虑:
- 设计理念:
- 如果命中多个结果,此时应该让用户通过修改搜索条件,以筛选得到目标结果,而不是计算猜测用户的最终结果
- 在上述的假设中,我们认为将多个结果并列给出,顺序并不重要。而根据"最近使用"的程度并不比"使用频率"有更大的劣势,另外还有下面的优势。
- 性能考虑: 我们不想引入太多的计算复杂度
- 我们认为 x cd 应该可以在计算力较差的环境良好进行
- 而当前的 LRU 策略计算量很小。
- 我们不确定是否引入更复杂的外部文件索引,除了引入更复杂的文件依赖,更复杂的设计(额外的 bug),更重要还有隐私方面的顾虑。
- 我们暂时还没还清楚这个模块的最终定位,也不确定引入更高级的排序策略会是否利大于弊。所以转而先实现了确定性更高且较为简单的实现。
我们认为,利用历史记录,以及 LRU 策略,加上交互式搜索,应该能够达到较好的效果。 在未来,x-cmd 团队会谨慎根据实际使用的场景分析,探索更为友好的设计。
关注微信官方公众号 : oh my x
获取开源软件和 x-cmd 最新用法