Zsh 下对 gcc 的补全支持问题

我用 zsh+oh-my-zsh, 发现对 gcc 参数的补全不太智能:
例如,gcc -std
按 tab 后不能出现对应的值,但用 bash+bashcomplete 可以出来。
是不是需要开启 oh-my-zsh 的对 gcc 的某个插件?

另外再报告一个:
用 zypper in 的时候,tab 无法补全文件名,亲测 bash 可以。

zsh 的补全可以自己定义的吧,虽然我不会。gcc -std 确实无法补全。。。。。不太懂 gcc,搜了一遍 man 和 info 没发现什么参数是 -std 开头的。。。。zsh 可以补全 gcc 的参数有两百多个,我觉得应该满足一般需求吧。

zypper in 为什么会要补全文件名呢。。。。本地安装么?可以补全很多参数,我觉得这就足够了。对于一些一般后面不接文件名 / 目录名的命令 zsh 不会补全文件名,这应该是他智能的地方,貌似是有意设计的。你可以用 date 命令试一下。bash 是不管三七二十一都补全出 date file 这样的东西,zsh 就不会。

gcc -std=c90,c99,c11

这几个是比较常见的选项。

zypper in 的话确实有时需要安装本地 rpm 文件,我发现这样可以更好的利用 yast 安装模式,缺少的库自己下,直接 rpm 的话容易出现找不到共享库等等错误。

参考一下 wiki 吧。http://zh.opensuse.org/index.php?title=SDB:Zsh&variant=zh-cn

链接里好像有一篇自定义补全规则的,没有仔细看。

你是本地打包自己安装么(不会,本地打包缺少库你也 build 不过)。。。如果不是还不是要从网上下载。openSUSE 的软件包基本都在 OBS 直接加源下不是更好。。。。而且 OBS 里的软件不会出现找不懂共享库这种错误吧,安装肯定是可以成功的。一些 home 源的软件少写了依赖关系下载了打不开倒是有可能。

表示用源安装软件从来没有发现过会找不到共享库的问题。可以问一下你装的什么软件?

要安装本地可以绑定 rpm 文件自动使用 zypper in 执行。

alias -s rpm=“sudo zypper in"

然后你只要输入目录下的 rpm 包文件名(这个可以自动补全)然后回车就可以了。

谢谢回复的这么详细啊。

我遇到过两次 rpm 安装报错:
一次是金山快盘的 rpm 包(官方只有 deb,我用 alien 转过);
另一次是 wps office 的安装包。

两种情况下用 zypper in 安装都可以解决。

wps office OBS 里是有的。openSUSE Software

可以一键安装。直接一键安装不会有什么问题。

用 alien 转的那情况就未知了。不知道 OBS 里有没有。