1

emacs 用の yasnippet パッケージをインストールしたばかりで、スニペットを構成しようとしています。1 つの特定のスニペットを除いて、すべて正常に動作します。

ファイル: ~/.emacs.d/elpa/yasnippet-20150212.240/snippets/cc-mode/while

# -*- mode: snippet -*-
# name: while
# key: while
# --
while (${1:condition})
{
    $0
}

問題は、スニペットを使用すると、出力が次のようになることです。

while(condition)
    {

    }

元のwhileファイルを次のように変更して、正しいファイルがあるかどうかを確認しました。

# -*- mode: snippet -*-
# name: while
# key: while
# --
while (${1:condition})
{
    $0;
}

(セミコロンを追加) 出力は次のとおりです。

while(condition)
    {
        ;
    }

ブレースの後ろにタブがあるのはなぜですか?

注: その他は正常に動作します。for ループは正常に動作し、switch は正常に動作し、クラスは正常に動作します... while ループだけに問題があります。何か案は?

4

1 に答える 1

1

答えを見つけました。私のように emacs を使い始めたばかりの人にとってはトリッキーでした。

hereを見た後、デフォルトのc-styleは次のようになります

if(foo)
      {
        bar++;
      }

そのため、スニペットを使用するためにタブを押したときに、コードをデフォルトの c スタイルに自動フォーマットしました。それが「gnu」スタイルです。「linux」スタイルに変更するには、追加するだけです

(setq c-default-style "linux"
      c-basic-offset 4)

.emacs または init.el ファイルに追加します。

変更後の出力:

if(foo)
{
    bar++;
}

結局、yasnippet とは何の関係もありませんでした。

于 2015-03-05T11:24:48.310 に答える