别让 cd 命令浪费你的时间

终端下工做最烦躁的就是路径切换,没有自动路径切换的帮助,就像在泥里走路,因而你们发明了各类 autojump / z / fasd 等工具来提高路径切换的效率,今天向你们介绍一个更好用的工具:z.lua,用熟练了之后就像终端里溜冰,路劲切换今后指哪打哪。git

z.lua 是一个会学习你使用习惯的 cd 命令,它会跟踪你在 shell 下访问过的路径,经过一套称为 Frecent 的机制(源自 Mozilla),通过一段简短的学习以后,z.lua 会帮你跳转到全部匹配正则关键字的路径里 Frecent 值最高的那条路径去。github

正则将按顺序进行匹配,"z foo bar" 能够匹配到 /foo/bar ,可是不能匹配 /bar/foo。算法

特性说明:

  • 性能比 z.sh 快三倍,比 fasd / autojump 快十倍以上。
  • 支持 Posix Shell:bash, zsh, dash, sh, ash, busybox 等等。
  • 支持 Fish Shell,Power Shell 和 Windows cmd。
  • 使用加强匹配算法,更准确的带你去到你想去的地方。
  • 低占用,可以仅在当前路径改变时才更新数据库(将 $_ZL_ADD_ONCE 设成 1)。
  • 交互选择模式,若是有多个匹配结果的话,跳转前容许你进行选择。
  • 交互选择模式,支持使用 fzf 进行可视化结果筛选(可选)。
  • 快速跳转到父目录,或者项目根目录,代替反复 “cd ../../.." 。
  • 为不一样的操做系统,不一样的 Shell 程序提供统一的使用体验。
  • 兼容 lua 5.1, 5.2 和 5.3 以上版本。
  • 自包含且无额外依赖,单个 z.lua 文件完成全部工做。

软件安装:

将下面对应语句添加到你的 .bashrc / .zshrc / .profile 或者对应 shell 的初始化脚本末尾:shell

eval "$(lua /path/to/z.lua --init bash enhanced once echo)"    # BASH 初始化
eval "$(lua /path/to/z.lua --init zsh enhanced once echo)"     # ZSH 初始化
eval "$(lua /path/to/z.lua --init posix enhanced once echo)"   # 其余 Posix Shell 初始化
source (lua /path/to/z.lua --init fish enhanced once echo | psub)  # Fish Shell 初始化
iex ($(lua /path/to/z.lua --init powershell enhanced once echo) -join "`n") # Power Shell 初始化

而后从新登录,便可使用。数据库

用户评价:

“我喜欢它的原理,我在命令行下面的行为十分有规律,而且我十分懒惰,懒得管理和维护一套书签或者路径别名。“vim

“总之,z.lua 作到了它所宣称的目标。若是你须要快速的在目录间切换,它多是最好的选择。“bash

”我终于能够在本身的树莓派1上使用 autojump 相似的功能了,而不用像之前传统 autojump 那样每次打开终端都要等待 30 秒。”svn

基本使用:

cd 到一个包含 foo 的目录:工具

z foo

cd 到一个以 foo 结尾的目录:性能

z foo$

对长路径使用多个关键字进行匹配:
假设路径历史数据库(~/.zlua)中有两条记录:

    10   /home/user/work/inbox
    30   /home/user/mail/inbox

"z in" 将会跳转到 /home/user/mail/inbox 由于它有更高的权重,同时你能够传递更多参数给 z.lua 来更加精确的指明,如 "z w in" 则会让你跳到 /home/user/work/inbox。

交互选择:

使用 -i 参数进行跳转时, 若是有多个匹配结果,那么 z.lua 会给你显示一个列表:

$ z -i soft
3: 0.25   /home/data/software
2: 3.75   /home/skywind/tmp/comma/software
1: 21     /home/skywind/software
> {光标位置}

而后你按照最前面的序号输入你想要去的地方,好比输入 3 就会进入 /home/data/software。若是你不输入任何东西直接按回车,那么将会直接退出而不进行任何跳转。

PS:交互选择同时支持 "-I" 参数(大写 i),让你可使用 fzf 在多项结果进行快速选择(若是系统里面安装了的话)。

快速回到父目录:

"-b" 选项可快速回到某一级父目录,避免重复输入 "cd ../../..",通常把 "z -b" 别名成 "zb" 命令:

  • (没有参数):cd 到项目根目录,即跳转到父目录中包含 (.git/.svn/.hg) 的地方。
  • (单个参数):cd 到最近一级以关键字开头的父目录中。
  • (两个参数):对当前目录进行字符串替换,而后 cd 过去。

使用举例:

# 一直向上退到项目根目录(就是里面有一个 .git 目录的地方)
~/github/lorem/src/public$ zb
  => cd ~/github/lorem

# cd 到第一个以 g 开头的父目录
~/github/vimium/src/public$ zb g
  => cd ~/github

# 快速回到 site 目录
~/github/demo/src/org/main/site/utils/file/reader/whatever$ zb si
  => cd ~/github/demo/src/org/main/site

# 将 jekyll 替换为 ghost
~/github/jekyll/test$ zb jekyll ghost
  => cd ~/github/ghost/test

向后跳转一样也支持环境变量 $_ZL_ECHO(用来显示跳转结果),这样为搭配其余工具提供了可能性(并不须要改变当前工做目录),好比 ls $(zb)

Bonus:“zb ..” 至关于 “cd ..”,“zb ...” 至关于 “cd ../..”,而 “zb ....” 至关于 “cd ../../..” 等等。 最后 “zb ..20” 等同于调用 “cd ..” 二十次。

经常使用技巧:

推荐一些经常使用别名,放在你的配置文件中:

alias zz='z -c' # 严格匹配当前路径的子路径
alias zi='z -i' # 使用交互式选择模式
alias zf='z -I' # 使用 fzf 对多个结果进行选择
alias zb='z -b' # 快速回到父目录

z.lua 能够方便的导入 z.sh 的数据(他们格式相同):

cat ~/.z >> ~/.zlua

还能够导入 autojump 的数据:

FN="$HOME/.local/share/autojump/autojump.txt"
awk -F '\t' '{print $2 "|" $1 "|" 0}' $FN >> ~/.zlua

更多内容,参考项目文档。

相关文章
相关标签/搜索