Skip to content

laumy007/cdir

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cdirs

cdirs 用于在目录间快速切换,对庞大的项目工程效果显著。

  • 支持标记目录,并快速切换到标记目录
  • 支持模糊搜索标记目录(-f)/当前目录(-F)以切换目录
  • 支持搜索目录/标记目录自动补全

            Author: 广漠飘羽

          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命令支持内嵌到其他命令

快速安装

安装演示

安装步骤

获取cdirs

git clone https://github.com/gmpy/cdirs.git ~/cdirs

安装

  • 自动安装

执行安装脚本:

~/cdirs/install.sh
  • 手动安装

~/.bashrc中添加:source ~/cdirs.sh

安装-不覆盖cd

  • 自动安装

执行安装脚本:

~/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 标记目录列表

gmpy_cdirs_default

此变量标记了全局标签文件保存路径,默认为~/.cdirs_default

格式: gmpy_cdirs_default="<文件路径名>"

gmpy_cdirs_mark_symbol

此变量设定标签标识符号,即标签名开头符号,值默认为,,标签名默认格式为 ,(逗号)开头,支持字母/数字和字符-,例如: ,cdirs-test

格式: gmpy_cdirs_mark_symbol='<符号>'

不建议修改此变量,因为一般情况下文件名开头不会为,,因此通过此符号区分正常目录与标签,在tab补全显示中会清晰得多。

同时此符号关联快速标记当前目录的符号。

gmpy_cdirs_label_symbol

此变量设定标签名支持符号,值默认为-,标签名默认格式为 ,(逗号)开头,支持字母/数字和字符-,例如: ,cdirs-test

格式: gmpy_cdirs_label_symbol='<符号>'

例如: gmpy_cdirs_label_symbol='_'

gmpy_cdirs_find_max_depth

此变量设定模糊搜索的深度,值越大,模糊搜索/tab补全速度越慢,但能搜索的范围越大。 默认为2,不建议设置值过大。

格式: gmpy_cdirs_find_max_depth=<数值>

gmpy_cdirs_default_key

此变量用于个性化设定模糊搜索(-f)的标记目录的默认标记目录。 执行cd -f <目录名>则默认在此标记目录下搜索并切换目录

格式: gmpy_cdirs_default_key=<标记目录键名>

变量值为键名,此键名指定的目录路径由gmpy_cdirs_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 --reloadcd --reset重新加载全局标签文件。

全局标签配置格式

  • 基本格式: 标签名 = 路径名
  • 路径支持使用变量
  • 若路径不存在或不为目录,则此项标签配置无效
  • 一行一个全局标签,加载顺序由上往下,标签编号递增
  • 若全局标签重名时,最后一此定义的同名全局标签路径有效

快速标记当前目录

快速标记当前目录简介

此功能用于快速标记当前目录后,切换到其他目录临时工作,临时工作结束后返回标记目录。 BASH默认支持cd -返回上次目录,但是当切换目录大于2次时,无法再通过cd -返回,此时可用cd ,

快速标记当前目录使用指南

命令 作用
setdir , 标记当前目录
cd , 切换到标记目录
lsdir , 显示标记目录
cldir , 清除标记目录

cdir/setdir/lsdir/cldir命令说明

cdir命令

cdir参数列表

选项 含义
`-h --help`
`-l --label`
`-p --path`
`-n --num`
`-t -k
`-f --find`
`-F --Find`
--reset 复位cdirs(删除当前所有标签,重新计数,加载全局标签+配置)
--reload 重新加载所有全局标签和配置文件

cdir使用指南

效果演示

setdir命令

setdir参数列表

选项 含义
`-h --help`
`-g --global`

setdir使用指南

效果演示

lsdir命令

lsdir参数列表

选项 含义
`-h --help`
`-p --print`

lsdir使用指南

lsdir嵌入到其他命令

例如:

$ 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

效果演示

cldir命令

cldir参数列表

选项 含义
`-h --help`
`-a --all`
`-g --global`

cldir使用指南

效果演示

FAQ

1. 明明有设定标签,为什么cd <,标签>会进入到其他文件夹?

cdirs会优先确保cd功能,当前目录若存在与标签同名文件夹,会优先进入同名文件夹而非标签路径 可以通过-l|--label参数强制指定进入标签路径

2. lsdir -p嵌入到其他命令中为什么有时会失效?

当绑定的路径存在空格时,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

3. 通过cldir <路径>的方式删除匹配路径的标签时为什么有时会删除错了?

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

About

目录快速跳转

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages