PHPモードでは、キャッチを試しました(グローバルの場合-機能なし)
try {
throw new Exception("Hello");
} catch(Exception $e) {
}
インデントは2つのスペースを入れます(インデントも4つのスペースです)、これを使用してそれを修正する機能があります:
(defun unindent-closure ()
(message "%s" c-syntactic-context) ; debug
(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)))
(if (member 'defun-close syntax)
(save-excursion
(beginning-of-line)
;; top level try cache have two extra spaces before closing braces
(if (looking-at "^ \\{2\\}[^ ]")
(progn
(beginning-of-line)
(delete-char 2))))))))
(add-hook 'php-mode-hook (lambda ()
(add-hook 'c-special-indent-hook 'unindent-closure)))
クロージャーのインデントも修正します。インデントとして4つのスペースがある場合は正常に機能しますが、2つのスペースがある場合は失敗します:
class foo extends Controler {
function foo() {
}
}
どちらの場合も、構文はdefun-close
(中括弧を閉じる場合) です。PHPモードでtry catchで2つのスペースを修正する他の方法はありますか?