我在Emacs中使用php-mode,当我使用闭包作为这样的参数时,它工作得很好:
$app->get('/', function() use ($app) {
echo "foo";
});
当函数在函数调用内部时,缩进会使缩进加倍。如何解决这个问题?
修改
如何使它看起来像这样(与javascript模式处理匿名函数相同)。
$app->get('/', function() use ($app) {
echo "foo";
});
答案 0 :(得分:3)
如果你把点放在第一行的末尾并按下C-c C-o,你可以看到cc-mode认为你在中间的句法结构,并自定义它如何缩进该结构。我当前的计算机上没有php模式,但是当我做PHP时,我认为设置为零可以很好地工作。
答案 1 :(得分:3)
在@amalloy的帮助下,我设法创建了解决问题的解决方案:
(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-context
在c-special-indent-hook
被解雇时的内容(以及缩进完成后的内容)。
CC-Mode Manual也有帮助
<强>更新强>
我发现此代码无效
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']);
.... );
....});
因此我需要修改该功能,C-c C-s
显示arglist-cont-nonempty
出现两次(每增加一次arglist-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))))))
答案 2 :(得分:0)
我在jcubic的答案中尝试了代码,而不再是工作者。根据amalloy的有用答案,我已将jcubic的解决方法修改为以下内容,该方法有效。
function splitPathPosix(filename) {
return /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(filename).slice(1);
}