EMACS-DOCUMENT

=============>集思广益

Emacs中的Electric-Pair-Mode

一直以来我都是用TextExpander 来作为插入文本片段和文本扩展的工具. 其中一种经常的用法是用它来自动插入配对的字符. 例如但我输入一个双引号(")时,我几乎总要用另一个双引号(")与之配对.

然而TextExpander有以下一些缺陷:

  1. 性能 – 用它来进行扩展一个文本差不多要花1秒钟的时间,这就有了明显的卡顿的感觉.
  2. 若我删掉了整个pair的一部分,另一部分不会跟着被删掉.
  3. 我不能用它来包裹一段文本到pair中. 比如,假设我输入了一写内容,然后想用括号将这段内容括起来,用TextExpander是做不抖啊的.

除了这些技术上的缺陷外, 我也不想继续长期的使用TextExpander了. 我对它要求捐助 的行为感到不满. 我的意思是,为什么要为插入文本片段这种功能而付费呢…?

事实上, Emacs本身就自带了一个 electric-pair-mode, 它能为你自动插入配对字符, 我决定开启这个mode. 不过默认情况下,这个mode所补全的pair一般只适合于那些编程major mode,而我需要让它在某些基于text mode的major mode(比如org,markdown或单纯的text mode)下也能用. 比如,在org中,要内嵌一段代码片段,我需要用 ~ 将代码片段括起来,但是 ~ 默认并不会自动为你插入匹配相应的匹配字符.

好在,定义要定义其他pairs也很容易,只需要修改以下 electric-pair-pairs 变量就行了.

下面是我的相关配置:

(electric-pair-mode 1)
(setq electric-pair-pairs '(
                            (?\" . ?\")
                            (?\` . ?\`)
                            (?\( . ?\))
                            (?\{ . ?\})
                            ))

若我遇到了其他pairs的话,我还会继续往里面添加内容的. 另外,我还需要研究下如果为特定的major mode设置特定的pairs.