有什么办法让bash像鱼一样具有语法突出显示功能吗?


41

fish shell中,实际命令行突出显示了语法:

在此处输入图片说明

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

东西就是这样的,但对于zsh的,而不是bash的。是否有可能将其移植到bash?

为那些不了解屏幕截图,说明或链接的用户提供澄清:我想突出显示在终端上输入的实际文本。命令,括号,引号等。


不要以为bash像zsh一样接受插件,因此它可能需要自定义构建bash shell /二进制文件。有什么理由不只是用鱼代替吗?另外,感谢您将我指向另一个可以玩的外壳,看看我是否可以学习哈哈的一些高级功能。
Matrix Mole

1
@Matrix:我不能使用fish,因为我有一个非常复杂的bash配置,我不能放弃。
Wuffers

不幸的是,我认为bash目前不可能做到这一点。我敢肯定,您所做的研究也指出了这一点。如果您绝对不能切换到zsh,那是可以理解的,但是否则您可能要看看fizsh,它在zsh中包含了一些类似于鱼的功能,尽管自2月份以来就没有更新过,所以也许zsh-syntax-highlighting链接您提供的内容将更加强大。
voithos,2011年

1
这对于学习bash极为有益,因为它允许以完全不同的方式进行游戏。轻松发现您忘记了一个特殊角色将很有价值。
Sirap

Answers:



1

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

实际上,我实现了ble.sh具有语法高亮和自动建议等功能的行编辑器。它支持Bash 3.0--5.0。由于它是用(几乎)纯Bash脚本编写的,因此只能使用中source的脚本~/.bashrc。这是ble.sh在bashrc中设置的示例(有关详细信息,请参见自述文件):

$ 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_bash)) && ble-attach

注意:我知道有时回答带有自己产品的链接的问题被认为是自我推销,因此不受欢迎,因此我一直拒绝回答此问题。但是,没有其他解决方案出现的时间很长,而且这个问题也有很多观点(反映了其巨大的需求)。因此,我决定今天回答这个问题。参考以下元问题/答案,我首先描述了这个想法,然后提供了到我的项目的链接作为示例实现。

是的,我必须承认这实际上是自我推广,但是我相信这会对想要该功能的人有所帮助。如果有问题,请通过评论告诉我。


-1

我认为语法高亮不应该在外壳程序级别上发生,而应该在接口级别上发生(只是我的看法- 似乎有人认为),因此我会研究终端或您最喜欢的控制台的“插件”,例如此插件用于凯特(Kate)可能会有所帮助,或者另一种在nano中提供语法高亮显示的工具

这里还有更多关于如何在终端中突出显示语法的内容:

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

虽然这里更好地解释了如何

希望能帮助到你


11
看起来您正在回答如何在编辑器中而不是在Shell中设置语法突出显示。ls着色甚至不是“语法”突出显示。
凯尔·斯特兰德

我认为您更关注语义而不是解决方案,通过链接中的代码和建议的解决方案,我获得了bash的色彩,我相信这是OP想要知道的
-Purefan

10
最初的问题实际上是关于实际语法突出显示的。鱼壳的屏幕截图和最后一句话都显示了这一点:“我想突出显示在终端上输入的实际文本。命令,括号,引号等。”
凯尔·斯特兰德

9
如我所说,这不是“语法”突出显示。这些突出显示了ls基于文件类型的命令输出,这与shell语法无关。
凯尔·斯特兰德

2
Zsh(github.com/zsh-users/zsh-syntax-highlighting)和Fish(fishshell.com/docs/current/tutorial.html)都突出显示了语法,这个问题显然是在询问bash的类似功能。要求“很难实现和保持一致”的功能是完全有效的请求,尤其是当它已存在于其他外壳程序中时
Brandon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.