Emacs中的Electric-Pair-Mode
一直以来我都是用TextExpander 来作为插入文本片段和文本扩展的工具. 其中一种经常的用法是用它来自动插入配对的字符. 例如但我输入一个双引号(")时,我几乎总要用另一个双引号(")与之配对.
然而TextExpander有以下一些缺陷:
- 性能 – 用它来进行扩展一个文本差不多要花1秒钟的时间,这就有了明显的卡顿的感觉.
- 若我删掉了整个pair的一部分,另一部分不会跟着被删掉.
- 我不能用它来包裹一段文本到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.