electric-pair-mode:如果光标在非空白字符之前,则不要配对

时间:2014-11-26 06:53:15

标签: emacs

升级到Emacs 24.4之后,我注意到在某些主要模式下,electric-pair-mode正确"保留平衡"当光标在单词字符之前,而在其他单词字符之前。具体来说,假设我在缓冲区中有以下代码,并假设管道字符|是我的光标:

foo = ["1", "2", |3"]

python-mode中,键入双引号字符会产生以下结果:

foo = ["1", "2", "|3"]

这很好 - electric-pair-mode正确地确定存在无法匹配的双引号,因此无需插入额外的双引号。但是,在ruby-mode中,我得到了这个:

foo = ["1", "2", "|"3"]

有没有办法在所有其他主要模式中实现相同的python-mode行为?

修改

我刚刚意识到ruby-mode中的行为似乎依赖于缓冲区的其他内容。如果我有一个单行foo = ["a", "b", "c"]的缓冲区,那么一切似乎都没问题。但如果我的缓冲区看起来像:

foo = ["a", "b", "c"]

"#{ bar }"

然后会出现无关的双引号。似乎这可能是electric-pair-mode确定是否需要保持平衡的错误。

如果光标位于非空格字符之前,是否有人知道强制electric-pair-mode 从不插入额外的双引号的方法?

1 个答案:

答案 0 :(得分:2)

没关系,我只是想出来了 - (setq electric-pair-preserve-balance nil)似乎解决了这个问题。

如果有人有兴趣,可以在emacs-devel listserv上对此进行一次有趣的讨论:https://lists.gnu.org/archive/html/emacs-devel/2014-04/msg00020.html