答案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 使用其自己的特定于该程序的行编辑器,不能直接移植。