Zsh 中基于菜单的补全

Zsh 中基于菜单的补全

对于使用 Powershell 的 Windows 终端,我有插件 PSReadline,它为我提供了一些非常方便的功能。例如,当我开始打字时,我的历史记录的可导航列表视图。因此,如果我输入,cd它会显示我最近使用的 10 个命令的列表,其中包含cd,我可以在该列表中上下移动并选择一个。

PSReadline 的屏幕截图 - 可滚动历史记录

我喜欢的另一个功能是我可以键入cd并按 Tab 键来显示我可以导航到的所有子目录的列表。我还可以按上/下/左/右键在此列表中选择一个目录并跳转到该目录。

PSReadline - 目录选择的屏幕截图

是否可以为 WSL (Ubuntu) 提示符做类似的事情?顺便说一句,我在 Powershell 和 WSL 中都使用 oh-my-posh 作为提示。我怀疑 oh-my-zsh 可能有这样的东西,但我很想避免安装它,因为我花了很多时间为 oh-my-posh 设置主题。除非有办法在没有主题的情况下使用 oh-my-zsh 插件。

答案1

Bash 是 Ubuntu 和大多数 GNU/Linux 发行版中的默认 shell,它不支持大多数这些花哨的功能。不过,您可以通过对配置文件进行一些调整来获得更接近的功能。Zsh 是另一个具有额外功能的 shell。Bash 中没有基于菜单的交互式补全,而 Zsh 中有。在 Zsh 和 Bash 中,您都有几种方法可以进行历史记录搜索。

要在 Ubuntu 上安装 Zsh,请运行sudo apt install zsh,然后您可以使用更改默认 shell chsh,或者只需zsh从 Bash 运行一次即可切换到 Zsh。您需要运行一次 Zsh 来生成默认配置文件。 Bash 和 Zsh 的配置文件分别位于您的主文件夹 ~/.bashrc 和 ~/.zshrc 中。修改配置文件后关闭并打开shell(终端)使其生效。我个人不推荐使用 oh-my-zsh,因为它是一个第三方插件系统,不必要且缓慢。它所做的一切都可以手动完成。

此外,Oh My Posh 适用于任何 shell,包括 Zsh。如果您切换到 Zsh,则不必放弃它。
这是官方文档。单击列表中的“zsh”以获取 Zsh 配置说明。它需要添加eval "$(oh-my-posh init zsh)"到您的 .zshrc
如果您已经让 Oh My Posh 在 Bash 中工作,那么这应该是您所要做的全部事情,并且它应该使用相同的主题。

Zsh 中基于菜单的补全

这些东西是 Zsh 中基本自动完成所必需的,并且可能已经在您的 .zshrc 中

autoload -Uz compinit
compinit

如果您收到 compinit 不安全目录错误,可能是因为您没有完成辅助默认 .zshrc 生成并启用 compinit。尝试运行compinit -Ccompaudit | xargs chmod g-w.有关此的更多信息这里

现在您已经有了基本的自动完成功能,以下配置行将启用交互式菜单。

zstyle ':completion:*' menu yes select

通过上述配置,您将能够点击选项卡来获取交互式菜单,您可以使用箭头键进行导航。当您按下 Tab 一次时,箭头键将代替光标控制菜单。如果您想在“进入”菜单之前再次按 Tab 键,请删除“是”。

zstyle ':completion:*' menu select

历史检索

Ctrl+R - 开箱即用搜索

重击

<Ctrl>-R在您键入时搜索命令历史记录。

                     

答案2

哈斯特允许以列表的形式搜索和导航历史记录,但我不知道如何执行常规选项卡完成(命令/文件)。希望有人解答

答案3

它必须兼容 PSReadLine 吗?这不会为您提供完全相同的行为,但也许足以满足您的操作目的:

  1. bash 内置history命令为您提供最后 N 个命令的索引列表(其中 N 由您的发行版配置)。如果要执行索引 1013 处的命令,请!1013在 bash 提示符下键入。
  2. 组合键<Ctrl>-R允许您输入搜索字符串,并在您继续键入时向您显示最后一个匹配的命令。如果再次输入<Ctrl>-R,则会搜索较早的匹配项。如果您找到了正确的命令,请<Enter>按执行它。如果您想编辑它,请使用向左箭头键。如果您想退出搜索,请输入<Ctrl>-G

有更多选项可以处理 bash 历史记录。如果使用 bash 历史记录足以满足您的用例,您可能需要重新表述您的问题,忽略 PSReadLine。

相关内容