3

bash の 1 つの while ループ内に while ループを記述しようとしていますが、2 番目の while の構文が強調表示されません。これを使用するための特別な構文はありますか?

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

3 に答える 3

3

他の回答がすでに指摘しているように、これは非 Bash シェル構文に影響する構文プラグインのバグです。

スクリプトの作者である 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

あなたが正しい。何らかの理由で、VIm 7.3は、シバン ラインが を指している場合にのみネストされたコマンドを強調表示whilebashするように見えますたとえば、次のいずれかで始まるファイルは正しく強調表示されます。

#!/usr/bin/env bash
#!/usr/bin/bash
#!/bin/bash

ただし、シバン行または次の行がないわけではありません。

#!/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 に答える