V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
skywind3000
V2EX  ›  Linux

z.lua 第三弹:快速跳到父目录,避免重复 cd ../../..

  •  
  •   skywind3000 ·
    skywind3000 · 2019-02-04 01:59:37 +08:00 · 4627 次点击
    这是一个创建于 2131 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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
    
    
    第 1 条附言  ·  2019-02-05 00:58:45 +08:00

    再次更新:zb 命令支持点点点。

    zb ..     = cd ..
    zb ...    = cd ../..
    zb ....   = cd ../../..
    zb .....  = cd ../../../..
    
    zb ..5    = cd (..) x 5
    zb ..99   = cd (..) x 99
    

    支持所有平台,包括 windows cmd,power shell

    12 条回复    2019-02-07 19:34:01 +08:00
    xiaket
        1
    xiaket  
       2019-02-04 06:16:08 +08:00   ❤️ 6
    ```
    alias ..='cd ..'
    alias ...='cd ../..'
    alias ....='cd ../../..'
    alias .....='cd ../../../..'
    ```

    好吧我知道 md 在回复里是不可用的, 不过对于一些人, 这种 alias 会更易用些.
    wzw
        2
    wzw  
       2019-02-04 08:17:07 +08:00 via iPhone
    @xiaket #1 auto jump 还是很有用的
    skywind3000
        3
    skywind3000  
    OP
       2019-02-04 09:04:55 +08:00
    @xiaket 这样最大问题就是你要数需要几个点。

    /home/user/project/src/org/main/site/utils/file/reader/whatever

    比如你在 whatever,你要回到 src,你是不是要停下来先看看当前目录?再对照着数需要多少个点? z -b 没有这个负担。
    xiaket
        4
    xiaket  
       2019-02-04 09:32:45 +08:00
    @skywind3000 我完全同意你的意见, 所以我觉得这儿的 trade-off 是要不要精确到那个目录. 比如我经常进到 python venv 的目录里面去, 要跳出来的时候(如果我在里面切过目录, `cd -`不能工作时)比较讨厌. 按我现在的习惯, 我会先一气打几个点回车, 然后再看下一步是要跳两层还是三层. 我的 prompt 会显示当前目录, 所以于我而言这比记忆某个命令的参数更容易. 我能理解这个需求的出发点和实现方式, 只不过我觉得直接无脑打点更适合我的编程方式. 谢谢
    Narcissu5
        5
    Narcissu5  
       2019-02-04 09:38:05 +08:00
    oh my zsh ?
    skywind3000
        6
    skywind3000  
    OP
       2019-02-04 09:50:40 +08:00
    @Narcissu5 不是 oh my zsh,这个工具可以再所有 shell 上使用,包括 bash, zsh, fish shell, powershell 还有 windows cmd
    skywind3000
        7
    skywind3000  
    OP
       2019-02-04 09:52:17 +08:00
    @xiaket 这个参数是一次性记忆的,z -b 可以 alias 成 zb,上面的例子,回到 src 目录只需要 zb sr 就回去了,比你打点还简单啊。
    ttgo
        8
    ttgo  
       2019-02-04 11:34:13 +08:00
    你可以也加上 zb 点点点 的功能啊
    jadeity
        9
    jadeity  
       2019-02-04 11:38:50 +08:00
    试用过各种 shell 之后,对于习惯复制粘贴的我,还是 zsh 最好用。
    skywind3000
        10
    skywind3000  
    OP
       2019-02-04 15:32:47 +08:00
    @ttgo 哈哈,堵上他们的嘴,已经加上了,zb .....
    masker
        11
    masker  
       2019-02-07 12:12:57 +08:00
    alias
    skywind3000
        12
    skywind3000  
    OP
       2019-02-07 19:34:01 +08:00
    @masker alias 有管理负担啊。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5754 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 02:50 · PVG 10:50 · LAX 18:50 · JFK 21:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.