3

我正在尝试在 bash 的一个 while 循环中编写一个 while 循环,第二个 while 的语法没有突出显示。使用 this 有什么特殊语法吗?

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

3 回答 3

3

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

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

如果您没有收到回复,请告知 vim_dev 邮件列表(cp. http://www.vim.org/community.php;您需要先注册);希望,其他人会拿起它。

解决方法

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

:let g:is_bash      = 1
于 2013-06-04T11:54:13.827 回答
2

你是对的。出于某种原因,如果shebangwhile线指向bash. 例如,以其中任何一个开头的文件都会正确突出显示:

#!/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

:set filetype?在所有情况下都会打印filetype=sh,所以看起来这是一个错误。

于 2013-06-04T11:05:23.207 回答
1

试试下面的脚本。这个对我有用

#!/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

正如预期的那样。

问题可能是您在此处发布的代码之前的代码,因为我在您的代码中找不到语法错误。

于 2013-06-04T11:05:35.053 回答