技术解析

z.lua 第三弹:快速跳到父目录,避免重复 cd ../../..
0
2021-06-22 11:51:33
idczone

z.lua 新增 "-b" 选项可以快速回到某一级父目录,避免重复的输入 "cd ../../.."。

  • (没有参数) cd 到项目根目录:

    使用 "z -b" 后面不跟任何参数,z.lua 会寻找当前项目的 checkout 目录(有 .git/.hg/.svn 的地方) 然后 cd 过去。

  • (单个参数) cd 到离当前目录最近的以关键字开头的父目录:

    假设你在 /home/user/project/src/org/main/site/utils/file/reader/whatever 然后你想快速回到 site 目录,

    只需要输入:z -b site

    实际上,可简化为 z -b <开头的几个字母> 比如 z -b s or z -b si

    如果当前存在多级父目录同时包含你输入的关键词,z -b xxx 会将你到离你最近的那一层父目录。

  • (两个参数) 将当前路径中的第一个关键词替换为第二个关键词。

为了使用简便,我们继续将 z -b 取个别名成 zb

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

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

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

向后跳转同样也支持环境变量 $_ZL_ECHO(用来显示跳转结果),这样为搭配其他工具提供了可能性(并不需要改变当前工作目录):

# 假设我们位于 ~/github/vim/src/libvterm
# 打开 $_ZL_ECHO 用于在每次跳转后调用一次 pwd 显示当前目录
$ _ZL_ECHO=1

# 看看我项目根目录(有 .git 那个)目录里有什么?
$ ls -l `zb`
  => ls -l ~/github/vim

# 检查 "<项目根目录>/logs" 下面的日志
$ tail -f `zb`/logs/error.log
  => tail -f ~/github/vim/logs/error.log

# 查看一下某一级父目录里有些啥
$ ls -l `zb git`
  => ls -l ~/github


```
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
```
好吧我知道 md 在回复里是不可用的, 不过对于一些人, 这种 alias 会更易用些.

auto jump 还是很有用的

这样最大问题就是你要数需要几个点。
/home/user/project/src/org/main/site/utils/file/reader/whatever
比如你在 whatever,你要回到 src,你是不是要停下来先看看当前目录?再对照着数需要多少个点? z -b 没有这个负担。

我完全同意你的意见, 所以我觉得这儿的 trade-off 是要不要精确到那个目录. 比如我经常进到 python venv 的目录里面去, 要跳出来的时候(如果我在里面切过目录, `cd -`不能工作时)比较讨厌. 按我现在的习惯, 我会先一气打几个点回车, 然后再看下一步是要跳两层还是三层. 我的 prompt 会显示当前目录, 所以于我而言这比记忆某个命令的参数更容易. 我能理解这个需求的出发点和实现方式, 只不过我觉得直接无脑打点更适合我的编程方式. 谢谢

oh my zsh ?

不是 oh my zsh,这个工具可以再所有 shell 上使用,包括 bash, zsh, fish shell, powershell 还有 windows cmd

这个参数是一次性记忆的,z -b 可以 alias 成 zb,上面的例子,回到 src 目录只需要 zb sr 就回去了,比你打点还简单啊。

你可以也加上 zb 点点点 的功能啊

试用过各种 shell 之后,对于习惯复制粘贴的我,还是 zsh 最好用。

哈哈,堵上他们的嘴,已经加上了,zb .....

alias

alias 有管理负担啊。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服