z.lua 第三弹:快速跳到父目录,避免重复 cd ../../.. - V2EX
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 5019 次点击
    这是一个创建于 2494 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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
    @skywnd3000 我完全同意你的意见, 所以我觉得这儿的 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     Solana     5063 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 09:17 PVG 17:17 LAX 01:17 JFK 04:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86