C/C++ 的 Yasnippet 片段无法正常工作

Yasnippet snippet for C/C++ while doesn't work correctly

我刚刚为 emacs 安装了 yasnippet 包,正在尝试配置片段。一切正常,除了一个特定的片段。

文件:~/.emacs.d/elpa/yasnippet-20150212.240/snippets/cc-mode/while

# -*- mode: snippet -*-
# name: while
# key: while
# --
while (${1:condition})
{
    [=11=]
}

问题是,当我使用代码片段时,输出是这样的:

while(condition)
    {

    }

我通过将原始 while 文件更改为以下文件来检查我是否拥有正确的文件:

# -*- mode: snippet -*-
# name: while
# key: while
# --
while (${1:condition})
{
    [=13=];
}

(添加了分号),输出为:

while(condition)
    {
        ;
    }

为什么我的牙套后面有一个标签?

注意:其他一切正常。 For 循环工作正常,switch 工作正常,类 工作正常......只有 while 循环有问题。有什么想法吗?

找到答案了。对于像我这样刚开始使用 emacs 的人来说,这很棘手。

看了一下here默认的c-style好像是这样的

if(foo)
      {
        bar++;
      }

因此,当我按下 Tab 键使用代码片段时,我还自动将代码格式化为默认的 C 样式。这就是 "gnu" 风格。要将其更改为 "linux" 样式,只需添加

(setq c-default-style "linux"
      c-basic-offset 4)

到您的 .emacs 或 init.el 文件。

更改后的输出:

if(foo)
{
    bar++;
}

毕竟和yasnippet没有关系