没有paredit的Emacs Clojure模式

6

我正在使用来自ELPA的Clojure模式包。除此之外一切都很好,但是我就是受不了paredit模式。我似乎无法轻松地关闭它,现在我只能为每个打开的缓冲区禁用它。我尝试将此变量设置为nil:

(setq clojure-enable-paredit nil)

但是 paredit 仍然出现了。有什么想法吗?

1
有一件事可能会让它变得容忍,那就是知道 C-u 和 C-q 可以让你逃脱下一个按键。我使用 C-u DEL 删除不需要的大括号/引号,使用 C-q ( 或 C-q ) 插入所需的大括号。如果您曾经将文本块杀死/粘贴或剪贴板粘贴到缓冲区中,那么您将需要这个功能,因为这通常会导致不平衡的形式。 - Brian Cooley
我想知道原作者是否决定喜欢paredit模式,或者找到了一个令人满意的关闭它的方法。 - amalloy
你应该将自己的答案标记为正确的。 - Pedro Rolo
3个回答

29

这并不是对您实际问题的回答,但请给paredit模式一个机会。我也曾非常烦恼它自动关闭我的括号,并且拒绝为我删除单个右括号。

但使用它可以确保缓冲区始终是一个平衡的S表达式,因此它可以为您执行许多有用的S表达式操作而不仅仅是文本操作。例如,我经常使用以下内容:

  • M-( 用新的S表达式包装一个S表达式,例如将(map f some-list) 转换为 (doto (map f some-list) println)
  • C-) “吞噬”另一个S表达式进入当前S表达式中,例如将(let [x 10]) (println x) 转换为 (let [x 10] (println x))
  • M-<UP> 和/或 M-r 将点处的S表达式向源树中的更高层级移动一级,并摧毁包围它的内容,例如将(first (map f some-list)) 转换为 (map f some-list)(first some-list)

还有无数像这样有用的功能,可让您开始编辑代码而不是文本。虽然有许多优秀的Lisp黑客不喜欢paredit模式,但在您意识到它可以为您提供的强大功能之前,请不要决定不使用它。


我完全同意。一开始我讨厌paredit,但很快在其他语言模式下我就开始想念它了,于是我也在这些模式下绑定了一些paredit的函数。例如,M-(用于paredit-wrap-round,将以下表达式括在括号中。大多数编程语言模式都有该语言表达式和标记的sexps概念,因此paredit函数通常会做正确的事情。 - sanityinc
嗯,我有一个奇怪的情况,做了一些错误的编辑,现在我有“(”<代码块>“]”(用方括号关闭的括号),我无法删除方括号,因为它正在关闭括号!可以通过选择代码块等来解决它,但这很烦人。有没有快速解决这种情况的方法? - User
实际上,我无法使用“M-s”删除错误的括号,因为这样会出现“扫描错误:‘不平衡的括号’” o.O 这太糟糕了,绝对没有办法删除它,注释、删除等都不起作用。 - User
好的,可以通过“M-x paredit-mode”关闭它。当我的代码被修复后,我可能会再次打开它。但是知道如何关闭它在“紧急情况”下很有用。 - User
3
在执行删除操作(回退或 C-d)前添加 C-u 前缀可以使其跳过 paredit 平衡规则,而在任何字符之前添加 C-q 将插入该字符,忽略任何可能使其执行其他操作的键绑定。 - amalloy

16

我发现了一个有效的技巧。在init.el加载elpa包之前,向clojure模式添加此hook:

(add-hook 'clojure-mode-hook (lambda () (paredit-mode nil)))

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接