【问题标题】:cd -1, -2, -3 etc in Z shellZ shell 中的 cd -1、-2、-3 等
【发布时间】:2011-04-28 13:21:24
【问题描述】:

您如何设置 Z shell,以便键入 cd - 为您提供以前访问过的路径列表,然后 cd -1、-2、-3 等将带您进入目录?

【问题讨论】:

  • 不应该在 Unix 和 Linux 或超级用户上使用吗?

标签: shell autocomplete zsh zsh-completion


【解决方案1】:

c-减号就是为这种需求而设计的。

它支持正则表达式匹配,使用md5哈希来避免pushd中的重复。

易于转储和加载。

这个 gif 展示了一些基本操作。

您可以在https://github.com/whitebob/cminus查看它

【讨论】:

    【解决方案2】:

    如果您的.zshrc 中有setopt AUTO_PUSHD,那么cd 将自动对您更改到的每个目录执行pushd。以 ZyX 为例:

    $ setopt AUTO_PUSHD
    $ mkdir -p 1/2/3/4
    $ cd 1
    $ cd 2
    $ cd 3
    $ cd 4
    

    您可以使用dirs查看目录列表:

    $ dirs -v
    0    ~/1/2/3/4
    1    ~/1/2/3
    2    ~/1/2
    3    ~/1
    4    ~
    

    为了能够通过 Tab 完成列表,您可以使用 +- 参数和 cd<TAB> 表示您按 Tab 键):

    $ cd +<TAB>
    1 -- ~/1/2/3
    2 -- ~/1/2
    3 -- ~/1
    4 -- ~
    

    或者反过来:

    $ cd -<TAB>
    0 -- ~
    1 -- ~/1
    2 -- ~/1/2
    3 -- ~/1/2/3
    

    然后只需选择要转到该目录的号码:

    $ cd +2
    $ pwd
    ~/1/2
    

    制表符完整目录

    我总是忘记执行以下操作的魔术序列,所以我更新了答案来解释这部分。

    +- 只会带你到目录,你不能用 tab 完成堆栈中的路径(即cd -2/&lt;TAB&gt; 什么都不给你)。要完成这项工作,您可以使用波浪号 (~)。

    3 中创建一些目录以使这个示例更好。

    $ mkdir 3/foo 3/bar 3/baz
    

    然后在堆栈中找到目录。

    $ cd ~+<TAB>
    1 -- ~/1/2/3/4
    2 -- ~/1/2/3
    3 -- ~/1
    4 -- ~
    

    然后在条目上使用制表符完成。

    $ cd ~+2/<TAB>
    4/    bar/  baz/  foo/
    

    【讨论】:

    • 请注意,您似乎可以将其与任何命令一起使用!例如vi ~+4/it.txt' would edit the file ~/1/it.txt'
    【解决方案3】:

    如果您使用pushd 而不是cd,那么您可以使用dirs 列出目录并使用popd cd 到旧目录。您还可以设置autopush 选项以使cd 的行为与pushd -q 非常相似。这是一个例子:

    setopt pushdsilent # Omit printing directory stack
    setopt autopush    # Make cd push directories onto stack
    setopt pushdminus  # Invert meanings of +N and -N arguments to pushd
    mkdir -p 1/2/3/4
    cd 1
    cd 2
    cd 3
    cd 4
    popd     # Go to previous directory (3) and remove it from directory stack
    pushd -  # Go to previous directory (4)
    pushd -2 # Go 2 directories back the directory stack (2)
    

    请注意,pushd 不会从目录堆栈中删除任何内容,它只会旋转它。详情请见man zshbuiltins

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-16
      • 1970-01-01
      • 1970-01-01
      • 2021-07-04
      • 2014-01-08
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多