cdirs 用于在目录间快速切换,对庞大的项目工程效果显著。
E-mail: gmpy_tiger@163.com
cdirs 的存在是为了解决linux命令行切换目录时层层输入的繁琐, 通过标记目录以及模糊搜索的方式快速切换到任意目录。
cdirs 包含四个命令:
cdir
setdir
lsdir
cldir
,
且可通过alias cd="cdir"
的方式无缝覆盖cd命令以实现最低的学习成本。
cdirs 标记的目录默认只在当次BASH有效,也可通过全局标签永久保存标记的目录,实现开机(或者新BASH)即可直接使用标签切换到任意目录。
cdirs 通过集合find命令,实现从标记目录/ 当前目录模糊搜索, 并快速切换到搜索到的目录。
cdirs 使用shell script
语言编写,在BASH环境下测试。
命令 | 全称 | 功能 | 参数 |
---|---|---|---|
cdir |
change directory | 切换目录 | cdir参数 |
setdir |
set directory | 绑定标签与路径(标记目录) | setdir参数 |
lsdir |
list direcotry | 列出标签 | lsdir参数 |
cldir |
clear directory | 清除标签 | cldir参数 |
强烈建议用cdir取代shell内置的cd命令(安装默认)
alias cd="cdir"
cdir
命令是cd
的超集,用cdir
取代cd
,无需改变cd
的使用习惯,实现最小学习成本。- 支持模糊搜索切换目录(-F|-f)。
- 支持标签标记目录,并通过标签快速切换目录。
- 各种人性化配置:
- 标签/模糊搜索都支持tab补全
- 彩色显示各种提示。
- 对不同选项提供不同的选项参数补全
- 参数
-h|--help
可获得使用帮助
- 支持设定全局标签,实现开机(或者新BASH)即可直接使用标签。
- 多个BASH间setdir(无-g参数)设定的标签相互独立,支持服务器上多用户的环境。
- 所有命令支持绝对路径/相对路径参数,也支持特殊符号
.
..
~
和-
。 - lsdir命令支持内嵌到其他命令
git clone https://github.com/gmpy/cdirs.git ~/cdirs
- 自动安装
执行安装脚本:
~/cdirs/install.sh
- 手动安装
在~/.bashrc
中添加:source ~/cdirs.sh
- 自动安装
执行安装脚本:
~/cdirs/install.sh --unalias-cd
- 手动安装
在~/.bashrc
中添加:source ~/cdirs.sh --unalias-cd
- 自动卸载
自动卸载只适用于自动安装的应用,执行卸载脚本:
~/cdirs/install.sh --uninstall
- 手动卸载
在~/.bashrc
中删除: source ~/cdirs.sh
快速开始只适用于第一次体验cdirs,若要使用得更加便捷舒服, 需要个性化配置告知cdirs你的习惯,以及通过-h|--help参数了解系列命令的使用说明。
setdir
命令用于绑定标签与目录路径(标记目录)。标签以,
(逗号)开头,支持字母/数字和字符-
。
setdir ,
:快速临时标记当前路径,更多说明参考快速标记当前目录。
setdir ,<标签> <目录路径>
:标记指定目录为<,标签>,当前BASH有效,更多说明参考setdir命令。
setdir -g ,<标签> <目录路径>
:标记全局标签,实现开机(或新BASH)即可直接使用。
默认用cdirs覆盖cd(alias cd=cdir
),因此若非覆盖安装用户把下面说明中的cd替换为cdir即可。
cd ,
:任意目录下切换到快速标记的目录(由setdir ,
标记),更多说明参考快速标记当前目录。
cd ,<标签>
:任意目录下切换到,<标签>
标记的目录(由`setdir [-g] ,<标签>标记),更多说明参考cdir命令。
cd [-t <标记目录键名>] -f <目录名>
:在标记目录下搜索并切换到<目录名>,其中<目录名>支持tab补全,标记目录参考配置说明。
cd -F <目录名>
:在当前目录下搜索并切换到<目录名>,其中<目录名>支持tab补全。
配置文件为~/.cdirsrc
,以shell script
语言组织,在初始化cdirs(加载全局标签)前会先加载此配置文件,因此除了系统配置指定的变量外,可在配置文件中自行设定任何私人变量,函数等。
例如:
在
~/.cdirsrc
中定义变量
WORKSPACE="/home/user/projects"
在全局标签文件
~/cdirs_default
中使用此变量
,work = ${WORKSPACE}/cdirs/subdir
使用
cd ,work
切换目录
cd ,work ==> 等效于 cd /home/user/projects/cdirs/subdir
变量 | 含义 | 默认 |
---|---|---|
gmpy_cdirs_default | 全局标签文件路径 | ~/.cdirs_default |
gmpy_cdirs_mark_symbol | 标签标识符号 | , |
gmpy_cdirs_label_symbol | 标签名符号 | - |
gmpy_cdirs_find_max_depth | 最大搜索深度 | 2 |
gmpy_cdirs_default_key | 默认标记目录 | 无 |
gmpy_cdirs_key | 标记目录列表 | 无 |
此变量标记了全局标签文件保存路径,默认为~/.cdirs_default
格式: gmpy_cdirs_default="<文件路径名>"
此变量设定标签标识符号,即标签名开头符号,值默认为,
,标签名默认格式为
以,
(逗号)开头,支持字母/数字和字符-
,例如: ,cdirs-test
格式: gmpy_cdirs_mark_symbol='<符号>'
不建议修改此变量,因为一般情况下文件名开头不会为
,
,因此通过此符号区分正常目录与标签,在tab补全显示中会清晰得多。
同时此符号关联快速标记当前目录的符号。
此变量设定标签名支持符号,值默认为-
,标签名默认格式为
以,
(逗号)开头,支持字母/数字和字符-
,例如: ,cdirs-test
格式: gmpy_cdirs_label_symbol='<符号>'
例如:
gmpy_cdirs_label_symbol='_'
此变量设定模糊搜索的深度,值越大,模糊搜索/tab补全速度越慢,但能搜索的范围越大。 默认为2,不建议设置值过大。
格式: gmpy_cdirs_find_max_depth=<数值>
此变量用于个性化设定模糊搜索(-f)的标记目录的默认标记目录。
执行cd -f <目录名>
则默认在此标记目录下搜索并切换目录
格式: gmpy_cdirs_default_key=<标记目录键名>
变量值为键名,此键名指定的目录路径由gmpy_cdirs_key指定
此变量用于个性化设定模糊搜索(-f)的标记目录
gmpy_cdirs_key为数组变量
一行为一个标记目录
格式: "标记目录键名 = 标记目录"
除最后一行,每一行以
;
标识结尾
例如:
gmpy_cdirs_key=(
"project = ${PROJECTS}/lichee;"
"android = ${PROJECTS}/android;"
"bugs = ${HOME}/bugs"
)
setdir标记的目录默认当前BASH有效,关闭BASH则标记丢失,因此提供全局标签, 用于在启动shell后自动设定标签路径,实现开机(或者新BASH)即可直接使用标签快速切换目录。
默认全局标签文件为~/.cdirs_default
,可在~/.cdirsrc中修改。
可通过setdir的-g
参数设定全局变量,也可以手动修改全局标签文件,
修改后通过cd --reload
或cd --reset
重新加载全局标签文件。
- 基本格式:
标签名 = 路径名
- 路径支持使用变量
- 若路径不存在或不为目录,则此项标签配置无效
- 一行一个全局标签,加载顺序由上往下,标签编号递增
- 若全局标签重名时,最后一此定义的同名全局标签路径有效
此功能用于快速标记当前目录后,切换到其他目录临时工作,临时工作结束后返回标记目录。
BASH默认支持cd -
返回上次目录,但是当切换目录大于2次时,无法再通过cd -
返回,此时可用cd ,
。
命令 | 作用 |
---|---|
setdir , |
标记当前目录 |
cd , |
切换到标记目录 |
lsdir , |
显示标记目录 |
cldir , |
清除标记目录 |
选项 | 含义 |
---|---|
`-h | --help` |
`-l | --label` |
`-p | --path` |
`-n | --num` |
`-t | -k |
`-f | --find` |
`-F | --Find` |
--reset |
复位cdirs(删除当前所有标签,重新计数,加载全局标签+配置) |
--reload |
重新加载所有全局标签和配置文件 |
选项 | 含义 |
---|---|
`-h | --help` |
`-g | --global` |
选项 | 含义 |
---|---|
`-h | --help` |
`-p | --print` |
例如:
$ lsdir cdirs
num label path
--- ----- ----
1 ) cdirs /home/user/cdirs #存在cdirs的标记路径
$ lsdir -p tina
/home/user/tina #-p参数只显示路径
#嵌入到其他命令中举例:
$ ll `lsdir -p cdirs`/gif #等效于 ll /home/user/cdirs/gif
选项 | 含义 |
---|---|
`-h | --help` |
`-a | --all` |
`-g | --global` |
cdirs会优先确保cd功能,当前目录若存在与标签同名文件夹,会优先进入同名文件夹而非标签路径
可以通过-l|--label
参数强制指定进入标签路径
当绑定的路径存在空格时,lsdir -p
会失效
例如:
$ lsdir -p ,work
/home/user/my work #此路径存在有空格的文件夹'my work'
$ ll `lsdir -p ,work`/src #等效于"ll /home/user/my work/src",bash解析为"ll /home/user/my" ; "ll work/src"
可以通过添加双引号的方式解决:
$ ll "`lsdir -p ,work`"/src
cldir的参数无法判断为路径还是标签|编号时,会优先理解为标签|编号 例如:
$ lsdir ,test
10 ) ,work /home/user/,test #标签路径最终为,test
11 ) ,test /home/user/random #标签为,test
$ ll
...
2883727 drwxrwxr-x 2 user user 4096 10月 20 13:51 ,test/
#当前目录下存在与标签同名的test文件夹, 且此test文件夹恰巧也登记在标签信息中
...
$ cldir ,test #只会删除 编号|便签为test 标签信息
delete: 11 ) ,test /home/user/random #标签为test
$ lsdir
10 ) ,work /home/user/test #,test标签的信息被删除了, 而路径为test的便签并没删除
可以通过明确标识为路径的方式解决
$ cldir ./,test