3

私はEmacsでphp-modeを使用していますが、次のような引数としてクロージャを使用する場合を除いて、正常に機能します。

$app->get('/', function() use ($app) {
        echo "foo";
    });

関数が関数呼び出しの内部にある場合、インデントが2倍になることを示しています。これを修正する方法は?

編集

このように見せるための方法(javascript-modeが無名関数を処理するのと同じです)。

$app->get('/', function() use ($app) {
    echo "foo";
});
4

3 に答える 3

3

@amaloyの助けを借りて、問題を解決するこの修正を作成することができました。

(defun unident-closure ()
  (let ((syntax (mapcar 'car c-syntactic-context)))
    (if (and (member 'arglist-cont-nonempty syntax)
             (or
              (member 'statement-block-intro syntax)
              (member 'block-close syntax)))
        (save-excursion
          (beginning-of-line)
          (delete-char c-basic-offset)))))

(add-hook 'php-mode-hook (lambda ()
                           (add-hook 'c-special-indent-hook 'unident-closure))

それがphp-mode-hookにある必要があるかどうかわからない

が起動されたときに何が変数にC-c C-sなるかを示すことは大きな助けになりました(そしてそれはインデントが行われた後です)。c-syntactic-contextc-special-indent-hook

CC-Mode マニュアルも役立ちます

アップデート

無効なコードを見つけました

array('tags' => array_map($rows,function($row) {
....    return array(
....        'name' => $row['name'],
....        'size' => $normalize($row['tag_count']);
....    );
....});

(ドットは削除する必要があるスペースです)

そしてもう一つ

return array('tags' =>
             array_map($rows, function($row) use ($normalize) {
             ....    return array(
             ....        'name' => $row['name'],
             ....        'size' => $normalize($row['tag_count']);
             ....    );
             ....});

そのため、関数を変更する必要があり、2 回表示さC-c C-sれることを示しています (追加するたびに、削除する必要があるインデントが追加されます)。arglist-cont-nonemptyarglist-cont-nonempty

(defun unident-closure ()
  (let ((syntax (mapcar 'car c-syntactic-context)))
    (if (and (member 'arglist-cont-nonempty syntax)
             (or
              (member 'statement-block-intro syntax)
              (member 'brace-list-intro syntax)
              (member 'brace-list-close syntax)
              (member 'block-close syntax)))
        (save-excursion
          (beginning-of-line)
          (delete-char (* (count 'arglist-cont-nonempty syntax)
                          c-basic-offset))))))
于 2012-07-26T12:34:04.027 に答える
3

最初の行の最後にポイントを置いて Cc Co を押すと、cc-mode がどの構文構造体の途中にいると認識しているかを確認し、その構造体をどのようにインデントするかをカスタマイズできます。私の現在のコンピューターには php-mode がありませんが、これを 0 に設定すると、PHP を行っていたときにかなりうまく機能したと思います。

于 2012-07-26T02:07:21.317 に答える