Visual Studio样式大括号在emacs中自动完成

时间:2015-12-04 12:02:19

标签: emacs code-completion brackets

我刚开始使用emacs,因为我以前一直在使用Visual Studio。 有没有办法在emacs中为大括号提供相同类型的自动完成功能?

我的意思是,在Visual Studio中输入this(“|”是光标):

int foo()
{|

我明白了:

int foo()
{
    |
}

我尝试使用电动对模式,但它只是关闭了花括号。 我希望我很清楚,英语不是我的母语。

编辑: @Rupert Swarbrick electric-pair-open-newline-between-pairs似乎在我的emacs中没有设置为true。当我启用electric-pair-mode并在括号后按return时,我得到了这个:

int foo()
{
|}

光标与结束括号位于同一行,我必须手动转到上面的行来编写有点烦人的代码。 我在哪里可以修改electric-pair-mode以检查它是否设置为true?我还没找到。

编辑2:

感谢@Rupert Swarbrick的帮助,我现在正在使用autopair.el,因为我使用的是emacs 24.3,它可以满足我的需求。对于使用emacs的人来说,24.4或更高版本electric-pair-mode已升级,您可以使用Rupert所说的内容。

1 个答案:

答案 0 :(得分:0)

看看electric-pair-mode的内容,看起来你可以通过自定义任何变量来实现这一点,但一切都不会丢失!如果electric-pair-open-newline-between-pairs为真(默认值),那么您会发现键入{然后返回键应该为您提供

{
    <- cursor here
}

你想要的。

为了避免输入额外的换行符,我们想要假装用户在键入开头{后立即键入它。为此,我们可以编写下面的函数。这将检查electric-pair-mode是否已启用,我们希望在对之间打开新行(if块是从elec-pair.el中的逻辑复制的),用户只是键入了{{ 1}}并且我们坐在{对中(结束{}已经通过电子对模式添加了。如果这些都是真的,它会调用}第二个参数指定它应该表现得好像用户实际输入换行符(而不是仅插入newline并停止)。此时,正常的\n代码运行并重新接收所有内容,因为我们想。

最后,我们需要确保在正确的时间运行。一种方法是将其作为“建议”添加到electric-pair-mode。这样,只要启用电子对模式,它就会在正确的时间运行。

将以下elisp代码粘贴到electric-pair-post-self-insert-function并尝试一下:

.emacs