argc-completions: 支持任意 shell 和任意命令 Tab 自动补全 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
sigoden
V2EX    分享创造

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

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

    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  
       2023-11-22 23:39:35 +08:00
    @sigoden 大佬厉害了,我刚刚试用了一下,git-bash 环境下没有问题,wsl ubuntu 的 tcsh 下按照 pull/10 的描述遇到点问题,不过我解决了,但最终效果似乎仍不如预期

    我打算明天在公司的环境再测试一下,如果结果依旧,我会提个 issue ,尽可能详细描述一下问题
    llh880808
        20
    llh880808  
       2023-11-23 11:37:59 +08:00
    @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  
       2023-11-28 12:05:04 +08:00
    体验不错,好评!

    不过 shell 启动速度减慢还是能感知到
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     953 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 19:58 PVG 03:58 LAX 12:58 JFK 15:58
    Do have faith in what you're doing.
    ubao 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