在括号对之后将Emacs设置为智能自动行吗?

Phi*_*ahn 5 emacs elisp

我已经electric-pair-mode启用了(这并不是特别相关,因为它可以应用于任何自动配对模式甚至手动Parens),但总而言之,我希望这样做,以便在使用时:

function foo() {|}

|标记在哪里)

如果按回车键,我希望它自动转到

function foo() {
|
}
Run Code Online (Sandbox Code Playgroud)

这也意味着

function foo(|) {}

会成为

function foo(
|
){}
Run Code Online (Sandbox Code Playgroud)

我已经准备好处理缩进了,但是我不确定如何说“如果我在任何一对空的匹配括号内,当我按回车键时,实际上要插入两行并放在第一行”。

谢谢!

小智 5

这是我的init文件中的内容,我是从Magnar Sveen的 .emacs.d

(defun new-line-dwim ()
  (interactive)
  (let ((break-open-pair (or (and (looking-back "{") (looking-at "}"))
                             (and (looking-back ">") (looking-at "<"))
                             (and (looking-back "(") (looking-at ")"))
                             (and (looking-back "\\[") (looking-at "\\]")))))
    (newline)
    (when break-open-pair
      (save-excursion
        (newline)
        (indent-for-tab-command)))
    (indent-for-tab-command)))
Run Code Online (Sandbox Code Playgroud)

您可以将其绑定到您选择的键上。我已将其绑定到,M-RET但是如果您愿意,可以将其绑定到RET。线

(or (and (looking-back "{") (looking-at "}"))
    (and (looking-back ">") (looking-at "<"))
    (and (looking-back "(") (looking-at ")"))
    (and (looking-back "\\[") (looking-at "\\]")))
Run Code Online (Sandbox Code Playgroud)

检查,如果光标在{|}[|](|)>|<(HTML)。