在emacs中,是否有一种模式,如果我键入(它会自动关闭它,就像这样(),但如果我把它放在单词前面,比如(word,它不会变成()word,而是聪明地保持为(word?我尝试了smartparens和autopair但都没有成功,也许我没有正确配置它们?
使用内置的(自版本24.某个版本以来)electric-pair-mode
进行保守配对:
(setq-default electric-pair-inhibit-predicate 'electric-pair-conservative-inhibit)
(electric-pair-mode 1)
对于编程,我发现paredit能提供我所需的一切。它保持平衡性。
输入左括号时,也会在光标后面自动添加右括号:
( → ()
你可以直接用新的一对括号将点后的表达式括起来:
Meta-( → (expr)
还有许多其他命令可以吞入和移出子表达式以及前后交换表达式,移动到不同的层次等等,所有这些都保持了括号的平衡性。
例如,如果你有一些表达式(|
表示光标):
|expr1 expr0 expr2 expr3
Meta-(
(|expr1) expr0 expr2 expr3
Ctrl-Shift-)
(|expr1 expr0) expr2 expr3
Ctrl-Shift-)
(|expr1 expr0 expr2) expr3
Meta-f
(expr1| expr0 expr2) expr3
Ctrl-Meta-t
(expr0 expr1| expr2) expr3
Ctrl-{
expr0 (expr1| expr2) expr3
Ctrl-Meta-u
expr0 |(expr1 expr2) expr3
Ctrl-Meta-f
expr0 (expr1 expr2) |expr3