对于使用 Powershell 的 Windows 终端,我有插件 PSReadline,它为我提供了一些非常方便的功能。例如,当我开始打字时,我的历史记录的可导航列表视图。因此,如果我输入,cd
它会显示我最近使用的 10 个命令的列表,其中包含cd
,我可以在该列表中上下移动并选择一个。
我喜欢的另一个功能是我可以键入cd
并按 Tab 键来显示我可以导航到的所有子目录的列表。我还可以按上/下/左/右键在此列表中选择一个目录并跳转到该目录。
是否可以为 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 -C
或compaudit | xargs chmod g-w
.有关此的更多信息这里。
现在您已经有了基本的自动完成功能,以下配置行将启用交互式菜单。
zstyle ':completion:*' menu yes select
通过上述配置,您将能够点击选项卡来获取交互式菜单,您可以使用箭头键进行导航。当您按下 Tab 一次时,箭头键将代替光标控制菜单。如果您想在“进入”菜单之前再次按 Tab 键,请删除“是”。
zstyle ':completion:*' menu select
历史检索
Ctrl+R - 开箱即用搜索
重击
<Ctrl>-R
在您键入时搜索命令历史记录。
答案2
哈斯特允许以列表的形式搜索和导航历史记录,但我不知道如何执行常规选项卡完成(命令/文件)。希望有人解答
答案3
它必须兼容 PSReadLine 吗?这不会为您提供完全相同的行为,但也许足以满足您的操作目的:
- bash 内置
history
命令为您提供最后 N 个命令的索引列表(其中 N 由您的发行版配置)。如果要执行索引 1013 处的命令,请!1013
在 bash 提示符下键入。 - 组合键
<Ctrl>-R
允许您输入搜索字符串,并在您继续键入时向您显示最后一个匹配的命令。如果再次输入<Ctrl>-R
,则会搜索较早的匹配项。如果您找到了正确的命令,请<Enter>
按执行它。如果您想编辑它,请使用向左箭头键。如果您想退出搜索,请输入<Ctrl>-G
。
有更多选项可以处理 bash 历史记录。如果使用 bash 历史记录足以满足您的用例,您可能需要重新表述您的问题,忽略 PSReadLine。