1

所以我已经切换到 Emacs Prelude,并且喜欢它;它带有我想要烘焙的 95% 的东西,这很可爱。我只想改变一件事:括号之间的特定于模式的缩进,a 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,以便我可以轻松合并更新。

想法?还有其他人完全想出如何做到这一点smartparens,尤其是 Prelude 吗?

4

2 回答 2

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"))))  
于 2013-08-24T17:44:34.433 回答
1

你已经在正确的轨道上。我将在您的自我发布的答案中添加一些内容。

smartparens 的总体思路是为不同的主要模式开发专门的配置,这样您就可以获得每种模式的最佳体验。历史告诉我们,通用解决方案通常不是最理想的。

鼓励 smartparens 用户提交各种主要模式的上游配置 - 已经有Ruby、Latex、Lisp 和 Lua 的配置。为了所有 smartparens 用户的利益,您最好提交 Scala 和 PHP 的上游配置。Prelude 将启用那些开箱即用的功能。

微调几乎所有内容的能力使我为 Prelude 选择了 smartparens。我认为 smartparens 在未来对于 Emacs 用户将变得更加重要(它已经成功地取代了 Lisp 编程中的 paredit 之类的庞然大物)。

于 2013-08-25T07:32:39.160 回答