Emacs中的Java模式参数缩进

fie*_*sor 12 lisp java emacs

我在emacs中的java模式想要缩进函数参数,如下所示:

someLongFunctionName(
                     argumentNumberOne,
                     argumentNumberTwo,
                     argumentNumberThree,
                     argumentNumberFour
                     );
Run Code Online (Sandbox Code Playgroud)

这里有两个问题.首先,它希望将参数的开头与函数名的结尾对齐.其次,它希望将壁橱paren视为一个参数,从而将其与所有其他参数对齐.我不喜欢这两种行为.

我宁愿它像这样缩进我的代码:

someLongFunctionName(
    argumentNumberOne,
    argumentNumberTwo,
    argumentNumberThree,
    argumentNumberFour
);
Run Code Online (Sandbox Code Playgroud)

默认情况下,c-mode做得更好,我想尽可能将行为转移到java模式.

我仍然需要了解emacs缩进引擎是如何工作的,而且目前我还没有真正知道那么多的lisp.这两个学习练习肯定在我的板上,但目前快速复制粘贴解决方案将非常棒.

Roh*_*nga 14

试试这个

(defun my-indent-setup ()
  (c-set-offset 'arglist-intro '+))
(add-hook 'java-mode-hook 'my-indent-setup)
Run Code Online (Sandbox Code Playgroud)

来自http://www.emacswiki.org/emacs/IndentingC

  • @rutski字符串在Lisp中用双引号分隔.它与Java中的相同.`'+`是`(quote +)`的缩写.同样的''arglist-intro`意思是`(引用arglist-intro)`.所以语法突出显示错误.它看起来像一个SQL字符串,但它在Lisp中不是字符串. (9认同)
  • 继我之前的评论 - 我在这里找到了一个非常详细的答案:http://stackoverflow.com/a/1365821/205814 (2认同)