有没有什么办法可以让 bash 像 fish 一样具有语法高亮显示?

有没有什么办法可以让 bash 像 fish 一样具有语法高亮显示?

在里面鱼壳,实际的命令行语法高亮:

在此处输入图片描述

有什么方法可以在 bash 中获得相同的行为吗?

就像这样但适用于 zsh,不适用于 bash。是否可以将其移植到 bash?

对于那些不理解屏幕截图、解释或提供的链接的人,我要澄清一下:我想突出显示在终端输入的实际文本。命令、括号、引号等。

答案1

没有简单的在 GNU Bash (或 GNU Readline) 中获得语法高亮的一种方式,但原则上可以通过使用内置命令将所有用户输入绑定到 shell 函数来实现 Bash 脚本中的自己的行编辑器bind -x 'BYTE: SHELL-COMMAND'。当然可以将语法高亮功能集成到您自己的行编辑器中。

事实上,我实现了一个行编辑器ble.sh具有语法高亮和自动建议等功能。它支持 Bash 3.0..5.1。由于它是用(几乎)纯 Bash 脚本编写的,因此您可以直接使用source中的脚本。以下是在 bashrc 中~/.bashrc设置的示例(请参阅ble.sh自述详情请见):

$ git clone https://github.com/akinomyoga/ble.sh.git
$ cd ble.sh
$ make
$ make INSDIR="$HOME/.local/share/blesh" install
# bashrc

# Add the following line at the beginning of bashrc
[[ $- == *i* ]] &&
  source "$HOME/.local/share/blesh/ble.sh" --attach=none

# ... other bashrc settings ...

# Add the following line at the end of bashrc
[[ ${BLE_VERSION-} ]] && ble-attach

笔记:我知道有时回答问题时附上自己产品的链接会被认为是自我推销,并不可取,所以我一直避免回答这个问题。然而,尽管浏览量很大(反映出需求量很大),但经过很长时间,仍然没有提供其他解决方案。所以我决定今天回答这个问题。参考以下元问题/答案,我首先描述了这个想法,然后提供了一个指向我项目的链接作为示例实现。

是的,我必须承认这确实自我推销,但我相信这对想要该功能的人有帮助。如果有问题,如果您能在评论中告诉我,我将不胜感激。

更新2022-01-12 更新支持的 Bash 版本。修正语法。

答案2

Bash 用于readline交互式输入,因此需要在该程序中实现语法高亮。我找到了一个Google 网上论坛讨论关于如何编写这样的功能。

fish shell 使用其自己的特定于该程序的行编辑器,不能直接移植。

你可能会发现它zsh与 bash 非常相似,它的行编辑器是可扩展。 我发现zsh 语法高亮在 zsh 中启用此功能。

答案3

我不认为语法高亮应该发生在 shell 级别,而应该发生在界面级别(只是我的观点 - 而且别人的看起来是这样-),所以我会研究终端或你最喜欢的控制台的“插件”,例如这个插头凯特可能会有所帮助,或者另一个在 nano 中提供语法高亮

这里还是多说说如何在Terminal中进行语法高亮:

将别名 ls='ls -G' 添加到 .bash_profile。

虽然这里更好地解释如何

希望能帮助到你

相关内容