bash脚本中的while循环不是';t在vim中正确突出显示

bash脚本中的while循环不是';t在vim中正确突出显示,bash,shell,vim,syntax-highlighting,Bash,Shell,Vim,Syntax Highlighting,我试图在bash中的一个while循环中编写一个while循环,第二个while的语法不会突出显示。使用这个有什么特殊的语法吗 while [ "ka" = $name ] do while [ "ka" = $name ] //this while is not highlighted do done done 你说得对。出于某种原因,如果shebang行指向bash,例如,以其中任何一个开头的文件都会正确高亮显示,那么看起来VIm 7.3只会高亮显示嵌套的,而命令: #!/

我试图在bash中的一个while循环中编写一个while循环,第二个while的语法不会突出显示。使用这个有什么特殊的语法吗

while [ "ka" = $name ] 
do 
  while [ "ka" = $name ] //this while is not highlighted
  do
  done
done

你说得对。出于某种原因,如果shebang行指向
bash
例如,以其中任何一个开头的文件都会正确高亮显示,那么看起来VIm 7.3只会高亮显示嵌套的
,而
命令:

#!/usr/bin/env bash
#!/usr/bin/bash
#!/bin/bash
但不是没有shebang行或以下行:

#!/bin/sh
#!/usr/bin/env sh
测试文件:

[shebang line]
while true
do
    while true
    do
        while true
        do
            :
        done
    done
done

在所有情况下都会打印
filetype=sh
,因此它看起来像是一个bug。

请尝试以下脚本。它对我有用

#!/bin/bash
i="1"
while [ $i -lt 4 ]
do
        j="1"
        while [ $j -lt 4 ]
        do
                echo $i
                j=$[$j+1]
        done
        i=$[$i+1]
done
它的输出是

1
1
1
2
2
2
3
3
3
正如所料


问题可能是您在这里发布的代码之前的代码,因为我无法在您的代码中真正找到语法错误。

正如其他答案已经指出的,这是语法插件中的一个错误,影响非Bash shell语法

请向脚本作者Charles Campbell提交一份bug报告(基本上是本页的链接);他的电子邮件地址在脚本的标题中;该脚本位于vim安装目录中的
syntax/sh.vim

如果您没有收到回复,请通知vim_dev邮件列表(cp;您需要先注册);希望有人会把它捡起来

变通办法 作为一种解决方法,您可以在默认情况下强制使用Bash语法(在
~/.vimrc
中):


你指的是任何像vi或vim这样的编辑器吗?它是字面上的
$name]
还是应该是
$name]
?也许这就是问题所在。它在vim编辑器中,而且代码没有按预期执行。@l0b0代码的行为似乎与预期不符。捕捉得好。我通常只用#/bin/bash,没有看到问题。当我将文件转换为使用#时,我能够看到问题/正如l0b0所指出的,顶部的垃圾箱/垃圾箱。是的,让g:is_bash=1也解决了这个问题。
:let g:is_bash      = 1