如何让 bash 的补全 popup 显示

2021-08-31 09:40:00 +08:00
 SSang

有很多时候会遇到中文路径,就必须得切换中文输入法,再 tab (虽然像是 zsh/fish 就可以多次 tab 来选择,不过目前我还没有迁移 zsh 的计划,并且我也没有想要使用鼠标的意愿)

我之前看到有别人的终端用的补全有 popup 的功能,类似 vim 的 popup,像是这样(年代久远,我也不能确定他用的是什么命令行)

2346 次点击
所在节点   Bash
17 条回复
zhhanging
2021-08-31 09:55:10 +08:00
看看这个,不过只有 mac 版 https://fig.io
RRRoger
2021-08-31 09:57:57 +08:00
@zhhanging 看起来有用 不过配置起来好复杂啊
kukat
2021-08-31 10:05:03 +08:00
bash 不清楚,zsh 可以 https://github.com/Aloxaf/fzf-tab
SSang
2021-08-31 10:07:52 +08:00
@kukat zsh 我知道可以,只是目前来说迁移成本较高,我想要慢慢过渡,就是想要各临时解决方案
SSang
2021-08-31 10:09:30 +08:00
@zhhanging 可惜我是 linux 用户,而且是云服务器,这个看起来需要图形界面
Kimen
2021-08-31 10:35:10 +08:00
Emmm……zsh 有啥迁移成本?
Cabana
2021-08-31 10:37:24 +08:00
@zhhanging #1 试了下,很不好用,而且好像和 tmux 有冲突
TangMonk
2021-08-31 10:41:03 +08:00
FIshshell
xlsepiphone
2021-08-31 11:20:25 +08:00
工作这么多年了,出了写写 shell 脚本,我基本上从来不用 bash

fish 才是未来
plko345
2021-08-31 11:55:25 +08:00
我也想知道,这种到 stackoverflow 问可能有人知道
hicdn
2021-08-31 11:56:38 +08:00
用 fzf
输入两个 * 号,然后按 tab,就可以搜索或者用方向键选择
Kobayashi
2021-08-31 22:21:59 +08:00
这不是 shell completion menu,而是 vim 编辑时的补全,补全来源 "[File]", "[Dir]" 字段很好的说明了这一点。参考视频 https://www.semicolonandsons.com/episode/vim-autocomplete-overview 1 分 10 秒左右内容。

shell 补全显示方式做不到。唯一一个例外是 upterm,这个 terminal emulator 自己实现了弹出式补全的效果。

另外我比较犯贱:
1. zsh fish 设计时额外考虑了交互式 shell 的功能,bash 连个完善的钩子系统都不存在,有些功能 bash 就是做不到:钩子、字节码编译、懒加载(大多数补全都是懒加载)、右 prompt,更强的行编辑器( ZLE )……
2. Bash 流行主要取决于 GNU Bash,即 GNU 亲儿子。写脚本绝对是 Bash,适用性更广。交互式 shell 不需要和脚本运行的 shell 同一,装俩就行。
3. 从名字上看,fish 好像更专注于交互使用。但从生态上看,zsh 好比编辑器界的 vscode,框架、插件管理器、插件数量完爆其他 shell 。zsh 现在连任务队列回调都玩儿出来了,算是异步了。https://github.com/unixorn/awesome-zsh-plugins
4. bash 迁移有个毛的成本,一般人根本不用考虑这些。如果你的 bash 配置连千行都没有,那可能就是一般人。
Kobayashi
2021-08-31 23:30:35 +08:00
又想了一下,bash 自己肯定是实现不了,有可能受底层 readline 限制。
集成 fzf 替代补全倒是个思路。原来本论坛有人推广过 fzf-tab,不过是个 zsh 插件。确实有类似插件支持 bash,https://github.com/lincheney/fzf-tab-completion

楼上那那个 fzf 启用 cd ** 补全就不要试了,那个只针对补全当前目录下文件。可能还能补全 ssh **,但并不是针对所有命令,只能补全几个命令。
SSang
2021-09-01 12:04:53 +08:00
@Kobayashi 第二张图是我自己在 vim 截下来的( YCM 插件),只是想体现一下我想要实现的效果,可能我没说清楚,(别人的终端补全我只是有看到过,但是没有图)

我昨天已经尝试了 fzf,已经 99% 确定当时我看到的就是 fzf 。“补全当前目录下文件” 对我来说就足够了(我一开始的需求也只是想要解决中文路径切换输入法的问题,而且 fzf 能实现的也不止这些)
SSang
2021-09-01 12:05:14 +08:00
@Kobayashi

针对你后面的几个问题:

shell 的选型本身就是个复杂的过程,也许今年 zsh 流行,明年又来个 xsh,后年又来个 ysh,你还需要考虑配置方式,配置难易度,系统间是否统一等等,就算是 zsh/fish 之中选择一个,也不是能够轻易决定的。再者,就算没有迁移成本,也有学习成本。就像是 vim,明明各种性能问题,本身一键就能迁移 nvim,甚至很多 ide 都支持了 vim,还很多特别的功能,但还是很多人在使用 vim 总是有原因的(亲儿子也是一个重要的原因)。

以及我的 bash 配置真的有千行,而且本身有多个服务器,每个服务器还配置了不同的 bash,我觉得当你听到我说 bash 迁移有成本的时候就应该考虑到我不是一般人了。如果不能像 vim 到 nvim 那么容易迁移,我是不会轻易尝试的。
SSang
2021-09-01 12:08:02 +08:00
PS:我在问 bash 有什么办法,还明确指出了我已经知道了 fish/zsh 能实现,还有人要在底下复读,还要顺便阴阳怪气说有个毛线的迁移成本,反正我是不能理解有什么意义。
SSang
2021-09-01 12:49:00 +08:00
言语过激,请见谅

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

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

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

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

© 2021 V2EX