子外壳的Bash语法高亮


13

考虑到大量问题都与Bash中的子外壳有关(“为什么我的变量不会在此管道while read循环中递增?”),我只是认为在代码中引用一些编辑器或服务会非常好将在子Shell中执行的代码的格式与在父Shell中执行的代码的格式不同。它可能作为一种教育工具很有用(请参阅code | codecode < <(code)立即之间的区别)。是否存在?

如果有人为jEdit或VIm实现它,则奖励积分。

显然,它并不一定是完美的(根据我的经验,没有突出显示语法),但是我怀疑类似的东西(foo=bar; echo $foo;)并且开始时command | while read ...应该不会太困难。


我确定您可以将其添加到vim的代码突出显示中。
凯文(Kevin)

2
@Kevin:问题是它是否已经任何形式存在。当然,可以将其添加到任何支持Turing完整突出显示系统的编辑器中。
l0b0

1
在使用管道式while循环的情况下,POSIX并未指定在父管道中执行管道的哪一部分,因此,作为一种教学工具,如果突出显示此突出显示,它将教人们编写非便携式shell脚本:(
James Youngman '02

@JamesYoungman:使其成为Bash专用的另一个原因:)
l0b0

Answers:


2

我不认为这存在。这将是有用的,但是很难通过编辑器中使用的语法分析的标准方法来实现。从解析的角度来看,必须确定许多关键字和特殊符号才能确定属于子外壳程序的代码块。

但是我很高兴看到我错了,有人花了很多精力来创建这样的配置。


0

我的Vim已经做到了。

它实际上使我感到困扰,因为它导致子外壳内部的注释无法正确应用。

在此处输入图片说明

这是从源代码编译的Vim 7.3补丁874。


有时,zsh当我在子shell中工作时,将文件类型设置为。这可以纠正语法突出显示。

完美的OMG。谢谢!!我必须在子外壳中包含这块巨大的块(带有很多注释),以便可以set -x; set -e在该部分上进行操作。并将所有输出(包括stderr)捕获到日志中。
史蒂文·卢

1
我在子shell 中看不到任何格式,这似乎不太有用。还是屏幕截图中只缺少它?
l0b0

变量集和trap关键字在那里突出显示。它只是未能突出显示评论。zsh文件类型可以工作。现在,就将子外壳与主外壳区分开来(毕竟,这是您想要的),好吧……使用一些注释?
史蒂文·卢
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.