论 shell 补全,目前没一个能打的,fish 都只能勉强及格.
举例:
ar
这个 linux 自带命令你看看哪家能 tab 补命令的.
fish 目前只有
但是
ar --help
里面可是补全分几个层次
- 摆烂(原生 zsh, bash)
- 能补基本的,机械匹配(比如 ls -<tab> 出来选项)
- 能基本补完 help 里的排列组合
- 能筛选参数
- 能根据已有的参数 + 已有的 flag 更改补全内容(比如 git 的 fish 补全)
fish 到了 3,4,某一些到了 5
举个经典例子。。 find 有个 -exec, 后面是传一个类似回调的东西,约等于
arr.iter().filter(). for_each(|x| x)
。所以可以看作新 lambda, fish 目前不行,按 tab 只会尝试补参数而不是 PATH 里的 bin。zsh 的 completion 可以.比如
find . -type d -exec ls {} \;
,ls 这里按 l 再 tab。因为这个补全非常阴间。-exec 后面等于是新命令,不能去打 find 的参数了归根到底是 shell 没提供 ast 解析(
用 lsp 就没那么多事了
MS 出了个
, 评论是补全写得并不多, AUR 包名 nodejs-inshellisense