【问题标题】:zsh inconsistent number of TABs for autocomplete menuzsh 自动完成菜单的 TAB 数量不一致
【发布时间】:2014-06-04 14:07:01
【问题描述】:

我注意到 zsh 中的以下行为:
假设我有 3 个文件夹,我想将 cd 放入:test1/ test2/ test3/
如果我按下:

% cd t<TAB>

zsh 自动完成最多 test,但不显示自动完成菜单。它需要另一个&lt;TAB&gt; 才能显示出来。但是,如果我在那里放另一个文件夹:

% mkdir tx
% cd t<TAB>

我明白了:

% cd t
test1/  test2/  test3/  tx/

如何将其配置为一致(在第一个 TAB 后获取自动完成菜单)?我尝试设置 menu_complete 选项,但这也填充了第一个匹配项,这不是我喜欢的。

编辑:刚刚在bash试过,好像没有遇到这个问题

【问题讨论】:

    标签: shell zsh


    【解决方案1】:

    我认为这是一种正常的行为,在第一种情况下,“t”不是名称“test1”、“test2”、“test3”中相等的最大序列:它是“test”,因此它完成直到你得到“测试”,然后你得到菜单。在第二种情况下,“t”是最大序列,因此 zsh 为您提供自动完成菜单。

    如果您不想直接访问菜单,而不是获取可能的匹配共享的所有剩余字符,则可以使用 zsh setopt menucomplete:

    在任何一次“cd”尝试中,我都只写了 t 并点击了一次 tab:

    % ls
    testA  testB  testC  tr 
    % cd test
    % setopt menucomplete
    % cd t
    testA/  testB/  testC/  tr/
    % rmdir tr
    % cd testA/
    testA/  testB/  testC/
    

    【讨论】:

    • 是否有一个选项可以将命令行上的单词扩展为最长的公共前缀并在一次键击中显示菜单?
    • @Peeja 说了什么(这基本上是我的问题)
    • 如果你只有 testA testB 和 testC,并且你设置了 menucomplete 选项,那么它将完成 "t" 到 "testA"(如果你再次点击 tab,然后是 testB 和 testC)。我不知道是否有一种机制可以完成“测试”,但有什么意义呢?无论如何,您必须从三个选项中选择一个。
    【解决方案2】:

    要始终有一个完成cd 命令的菜单,请使用:

    zstyle ':completion:*:*:cd:*' menu yes select
    

    select 关键字是关键字,来自手册如果该值包含字符串'select',则菜单选择将无条件启动。查看 zsh 手册以了解配置此调用的更多方法。比如使用

    zstyle ':completion:*:*:cd:*' menu yes select=4
    

    这意味着如果至少有 4 个不同的匹配项,则强制菜单。注意还有select=long 和select=long-list。

    【讨论】:

    • 不幸的是,这仍然会自动填充第一个匹配项
    • FWIW,我的理解是你的问题的措辞可能会更好,你想要的是一个“列表”。 Zsh 中的“菜单”将始终填写值。您可能需要使用 force-list(?)。
    • 是的,对不起,我对术语很不熟悉,我只是不想在可以只做一个的时候按两个选项卡,我不希望第一场比赛自动完成.只需在 bash 中尝试我的示例,您就会明白我的意思。
    猜你喜欢
    • 2022-12-06
    • 2014-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多