所以我改用了Emacs Prelude,并且喜欢它;它有95%我想要的东西,这很可爱。我只想改变一件事:parens之间的模式特定缩进,la autopair.el
。例如,如果我正在编写Scala并输入:
Object foo {
bar() {}
}
...并在bar
的大括号之间输入换行符,我应该得到:
Object foo {
bar() {
// And point should be here, a Scala-standard two-space indent in from bar.
}
}
但是,如果我在PHP中编写的内容大致相同,我应该使用tab
字符而不是双空格。
那么:有没有一种“正确”的方式通过custom.el
进行调整? Prelude使用smartparens
而不是autopair.el
中配置的prelude-editor.el
- 但我宁愿在不必破解“核心”Prelude的情况下对其进行配置,以便我可以轻松地合并更新。< / p>
思考?其他任何人都想到了如何使用smartparens
或特别是Prelude? p>
答案 0 :(得分:2)
按照惯例,我一发布这个就想出了...大多数答案。它很好,因为它有效,并通过custom.el
工作;这很糟糕,因为它涉及重复的很多,我无法弄清楚如何干涸。
(sp-local-pair 'major-mode "{" nil :post-handlers '((my-create-newline-and-enter-sexp "RET")))
(sp-local-pair 'major-mode "(" nil :post-handlers '((my-create-newline-and-enter-sexp "RET")))
(sp-local-pair 'major-mode "[" nil :post-handlers '((my-create-newline-and-enter-sexp "RET")))
(sp-local-pair 'major-mode "<" nil :post-handlers '((my-create-newline-and-enter-sexp "RET")))
(defun my-create-newline-and-enter-sexp (&rest _ignored)
"Open a new brace or bracket expression, with relevant newlines and indent. "
(newline)
(indent-according-to-mode)
(forward-line -1)
所以这......好吧。不是很好,但还可以。有一个名为sp-pair-list
的变量,我宁愿能够访问,但我无法弄清楚如何使用它。有谁有更好的想法?我很乐意宣布这样的事情并完成它:
(loop for c in 'sp-pair-list
do (
sp-local-pair 'major-mode c nil :post-handlers '((my-create-newline-and-enter-sexp "RET"))))
答案 1 :(得分:1)
你已经走上正轨了。我只想在你自己发布的答案中添加一些内容。
smartparens的一般想法是为不同的主要模式开发专门的配置,因此您可以为每个模式获得最佳体验。历史告诉我们,通用解决方案通常不是最理想的。
smartparens用户被鼓励为各种主要模式提交上游配置 - 已经有Ruby,Latex,Lisp和Lua的配置。为了所有smartparens用户的利益,您可能最好为Scala和PHP提交上游配置。 Prelude将启用那些现成的开箱即用。
微调所有东西的能力让我选择了Prelude的smartparens。我认为smartparens对未来的Emacs用户来说将变得更加重要(它已经成功取代了像paredit这样的庞然大物进行Lisp编程)。