Emacs paredit-mode - 如何在粘贴的代码中纠正不平衡的括号?

11
偶尔我会将代码拖到一个缺少闭合括号或方括号的paredit-mode缓冲区中。paredit-mode会检测未关闭的表达式并尝试在错误的位置添加缺失的括号。当我将光标移动到想要关闭括号的位置时,这会让人感到沮丧,因为我无法将其放在那里。最终我不得不关闭paredit-mode。 以下是一个示例: enter image description here 我刚才只是复制了代码。
[["https://github.com/aconbere/yesql.git"
 "aea69ebd4a7788a66fc8689fea7e806f1463c347"]

但是paredit-mode在最后(红色部分)看到一个缺少的)。我甚至不确定它为什么想要使用右括号,因为开头是一个左括号。在该位置输入]会使光标跳到结尾并尝试填补红色的括号。吸入或贯穿没有预期的效果,只会移动)

有没有办法在不暂时禁用paredit-mode的情况下解决这个问题?


3
关闭 paredit-mode 对我来说听起来是一个好主意。;-) (但为什么不要停留在暂时关闭上呢?) - Drew
1
@Drew 大多数时候我喜欢它 ;) - Reed G. Law
是的,我知道。有些人会,有些人不会。 - Drew
1
使用绑定到“C-M-SPC”的“mark-sexp”来标记您要粘贴的区域可以帮助避免出现问题。 - sw1nn
有时候我会从网站上复制文本,比如 Github 上的 README。 - Reed G. Law
1
考虑使用类似 expand-region 的工具来语义化地选择文本。这将有助于复制平衡的括号,从而减少粘贴时的错误提示。虽然不是解决方案,但可以帮助减轻问题。 - Chris
4个回答

12

kill-region(默认绑定为C-w)和quoted-insert(默认绑定为C-q)不受paredit模式的影响。您可以使用这些按键绑定删除区域或插入匹配的分隔符,跳过paredit规则。请记住,您也可以关闭paredit,清理一些内容,然后再次打开它。


1
一个删除任意文本区域,另一个插入任何你喜欢的字符 - 我不知道还有什么缺失。 - noisesmith
“quoted-insert”似乎更像是一种输入非ASCII字符的方式。我无法使用它从剪贴板中粘贴文本。 - Reed G. Law
8
使用 C-q 快捷键,然后在期望到达的位置输入闭括号,这样 paredit 就不会跳转了。 - Leon Grapenthin
@LeonGrapenthin 啊,现在我明白了!对于造成的混淆,我很抱歉。 - Reed G. Law
我在IntelliJ的配置中没有看到quoted-insert操作。我使用了搜索框,并手动检查了“编辑器”和“键盘映射”。 - Jason

5

其他人已经提到了使用C-q来插入引号。你也可以使用C-u DELC-u C-d来覆盖paredit对于DELC-d的正常平衡行为,从而进行单个删除:

(foo)|) C-u DEL (foo|)


3

相信我,最简单的方法就是粘贴括号

你可以这样做:

    ;  ]

然后复制


0

当您有不平衡的括号时,导航到您希望放置平衡括号的字符位置,发出M-x quoted-insert(默认绑定为C-q),然后输入平衡括号。quoted-insert不会阻止发出括号。

与noisesmith说的相同的想法,只是用不同的方式表达。打开和关闭paredit不是一个选项 :)


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