V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
sigoden
V2EX  ›  分享创造

argc-completions: 支持任意 shell 和任意命令 Tab 自动补全

  •  
  •   sigoden · 2023-11-22 08:53:55 +08:00 · 1879 次点击
    这是一个创建于 365 天前的主题,其中的信息可能已经有所发展或是发生改变。

    demo

    优点

    • 支持多种 shell:bash/zsh/powershell/fish/nushell/elvish/xonsh
    • 支持多平台:windows/macOS/linux
    • 支持 1000+命令(清单
    • 从帮助文本/man 页面自动生成完成脚本
    • 懒加载、懒补全、内存消耗更低、启动时间更快

    https://github.com/sigoden/argc-completions

    欢迎大家使用并反馈意见

    21 条回复    2023-11-28 12:05:04 +08:00
    llh880808
        1
    llh880808  
       2023-11-22 09:30:26 +08:00
    看到任意 shell 就点进来了,第一时间找 csh/tcsh ,果然没有
    sigoden
        2
    sigoden  
    OP
       2023-11-22 09:38:21 +08:00
    @llh880808 你可以发 pr 请求支持啊。https://github.com/tcsh-org/tcsh stars 才 198 。csh 干脆没有自己的 github 仓库。这俩太小众了。
    llh880808
        3
    llh880808  
       2023-11-22 09:59:32 +08:00
    @sigoden 没事,确实是太小众了,csh 系列基本淹没在时代中了,我已经习惯了各种 shell 工具不支持 csh/tcsh 的现实了

    不过有可能的话,可以尝试支持一下 tcsh ( csh 没必要,即使是行业内,tcsh 也基本替代了 csh ),不过可能会有困难,因为 tcsh 甚至没有函数。总之,就算不跟 zsh 比,只跟 bash 比,tcsh 都太简陋了,只是行业内默认用它,很难改了
    PaulSamuelson
        4
    PaulSamuelson  
       2023-11-22 10:10:52 +08:00
    感觉很不错,比起 zsh-autosuggestions ,提供了更多选择。
    a33291
        5
    a33291  
       2023-11-22 11:10:52 +08:00
    是否可以完善一下脚本,如果 PATH 里已经有 argc 和 yq,就不要单独下载了.

    另外 nushell 好像有自己的完成扩展机制,不太了解当前是如何在 nushell 上实现的?能介绍一下基本的原理吗,谢谢
    sigoden
        6
    sigoden  
    OP
       2023-11-22 11:16:43 +08:00   ❤️ 2
    @llh880808 近期会添加 tcsh 支持, 敬请期待

    @a33291 详见 https://www.nushell.sh/cookbook/external_completers.html

    nushell 的 argc 补全核心代码如下
    ```
    def _argc_completer [args: list<string>] {
    argc --argc-compgen nushell "" $args
    | split row "\n" | range 0..-2
    | each { |line| $line | split column "\t" value description } | flatten
    }

    let external_completer = {|spans|
    _argc_completer $spans
    }

    $env.config.completions.external.enable = true
    $env.config.completions.external.completer = $external_completer
    ```
    shakukansp
        7
    shakukansp  
       2023-11-22 11:57:00 +08:00
    windows 下
    ./bin/argc shell:setup powershell 提示 shell not found
    sigoden
        8
    sigoden  
    OP
       2023-11-22 12:16:35 +08:00
    @shakukansp

    windows 下请先确保系统有安装 git ,因为 argc 依赖其内置的 bash. 只要安装了 git ,argc 会自动查找并使用其 bash.exe

    或者你可以使用 `ARGC_SHELL_PATH` 手动指定 `bash.exe` 的路径。
    shakukansp
        9
    shakukansp  
       2023-11-22 12:18:47 +08:00
    @sigoden 那可能因为我 git 是用 scoop 装的
    sigoden
        10
    sigoden  
    OP
       2023-11-22 12:32:18 +08:00
    @shakukansp 下一版本中 argc 会支持在 scoop 安装的 git 中查找 bash.exe 。目前你只能使用环境变量 `ARGC_SHELL_PATH` 指定`bash.exe` 路径了。
    shakukansp
        11
    shakukansp  
       2023-11-22 12:42:55 +08:00
    @sigoden 设置了环境变量没报错了,但是好像没效果,我看了下 $PROFILE 里面也没有相关的命令添加进去
    sigoden
        12
    sigoden  
    OP
       2023-11-22 12:59:09 +08:00
    @shakukansp 建议你去 https://github.com/sigoden/argc/issues/new 上发起 issue 。
    masellum
        13
    masellum  
       2023-11-22 13:25:47 +08:00
    看着蛮不错,想请教一下和 carapace 的区别是什么?
    llh880808
        14
    llh880808  
       2023-11-22 13:54:55 +08:00
    @sigoden 厉害了
    sigoden
        15
    sigoden  
    OP
       2023-11-22 14:05:04 +08:00
    @masellum

    - argc-completions 支持超过 1000+ 命令,而 carapace-bin 只支持 500+ 命令。
    - argc-completions 可以直接调用 `argc generate <your-command>` 为某个命令生成的补全脚本,立即就可以使用。而 carapace-bin 需要编写 go 代码,并等待新版本发布才可以使用。
    - argc-completions 更容易跟随命令同步更新补全脚本,只需要重新执行 `argc generate <updated-command>`。而 carapace-bin 则需要手动对比不同点并修改 go 源码。
    - argc-completions 支持符号,如 `cargo +<tab>` 或 `java @<tab>`。
    - argc-completions 支持短选项组合,如 `tar -xj<tab>`
    masellum
        16
    masellum  
       2023-11-22 14:17:44 +08:00
    @sigoden 谢谢解答!现在就替换尝试一下
    mjikop1231
        17
    mjikop1231  
       2023-11-22 14:25:37 +08:00
    https://github.com/microsoft/inshellisense MS 表示我们也有,不过他们只有 600+
    sigoden
        18
    sigoden  
    OP
       2023-11-22 21:22:28 +08:00
    @llh880808 https://github.com/sigoden/argc-completions/pull/10 支持 tcsh ,欢迎体验并反馈意见
    llh880808
        19
    llh880808  
       364 天前
    @sigoden 大佬厉害了,我刚刚试用了一下,git-bash 环境下没有问题,wsl ubuntu 的 tcsh 下按照 pull/10 的描述遇到点问题,不过我解决了,但最终效果似乎仍不如预期

    我打算明天在公司的环境再测试一下,如果结果依旧,我会提个 issue ,尽可能详细描述一下问题
    llh880808
        20
    llh880808  
       364 天前
    @sigoden 我知道昨天我的问题出在哪里了,我昨天没有把 argc-completions 仓库的分支切到 feat-tcsh ,另外就是虽然 argc 本身代码更新了但 release 的二进制文件还是旧的

    我自己搭建 rust 环境重新编译了新的 argc ,现在看起来有效果了

    不过我稍微提一下试用中遇到的小问题
    执行./script/setup-shell.sh tcsh 后输出的内容直接粘贴到~/.tcshrc 会报错
    我修改为如下两行内容后正常
    ```
    setenv PATH "$ARGC_COMPLETIONS_ROOT/bin:$PATH" # 删除 :前的\
    set ARGC_TCSH_SCRIPTS=`ls -p -1 $ARGC_COMPLETIONS_ROOT/completions | sed -n 's/\.sh$//p'` # 删除双引号
    ```

    (本来想提 issue ,既然主要问题解掉了,这个修改又很小,就这里带一句好了)

    非常感谢 OP 能考虑到被时代抛弃的小众需求者的需要
    hljjhb
        21
    hljjhb  
       359 天前
    体验不错,好评!

    不过 shell 启动速度减慢还是能感知到
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2579 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:38 · PVG 23:38 · LAX 07:38 · JFK 10:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.