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

169 天前
 sigoden

优点

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

欢迎大家使用并反馈意见

1505 次点击
所在节点    分享创造
21 条回复
llh880808
169 天前
看到任意 shell 就点进来了,第一时间找 csh/tcsh ,果然没有
sigoden
169 天前
@llh880808 你可以发 pr 请求支持啊。https://github.com/tcsh-org/tcsh stars 才 198 。csh 干脆没有自己的 github 仓库。这俩太小众了。
llh880808
169 天前
@sigoden 没事,确实是太小众了,csh 系列基本淹没在时代中了,我已经习惯了各种 shell 工具不支持 csh/tcsh 的现实了

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

另外 nushell 好像有自己的完成扩展机制,不太了解当前是如何在 nushell 上实现的?能介绍一下基本的原理吗,谢谢
sigoden
169 天前
@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
169 天前
windows 下
./bin/argc shell:setup powershell 提示 shell not found
sigoden
169 天前
@shakukansp

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

或者你可以使用 `ARGC_SHELL_PATH` 手动指定 `bash.exe` 的路径。
shakukansp
169 天前
@sigoden 那可能因为我 git 是用 scoop 装的
sigoden
169 天前
@shakukansp 下一版本中 argc 会支持在 scoop 安装的 git 中查找 bash.exe 。目前你只能使用环境变量 `ARGC_SHELL_PATH` 指定`bash.exe` 路径了。
shakukansp
169 天前
@sigoden 设置了环境变量没报错了,但是好像没效果,我看了下 $PROFILE 里面也没有相关的命令添加进去
sigoden
169 天前
@shakukansp 建议你去 https://github.com/sigoden/argc/issues/new 上发起 issue 。
masellum
169 天前
看着蛮不错,想请教一下和 carapace 的区别是什么?
llh880808
169 天前
@sigoden 厉害了
sigoden
169 天前
@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
169 天前
@sigoden 谢谢解答!现在就替换尝试一下
mjikop1231
169 天前
https://github.com/microsoft/inshellisense MS 表示我们也有,不过他们只有 600+
sigoden
169 天前
@llh880808 https://github.com/sigoden/argc-completions/pull/10 支持 tcsh ,欢迎体验并反馈意见
llh880808
169 天前
@sigoden 大佬厉害了,我刚刚试用了一下,git-bash 环境下没有问题,wsl ubuntu 的 tcsh 下按照 pull/10 的描述遇到点问题,不过我解决了,但最终效果似乎仍不如预期

我打算明天在公司的环境再测试一下,如果结果依旧,我会提个 issue ,尽可能详细描述一下问题
llh880808
168 天前
@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 能考虑到被时代抛弃的小众需求者的需要

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/994016

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX