Фрагмент Yasnippet для C/C++ пока работает некорректно

Я только что установил пакет yasnippet для emacs и пытаюсь настроить сниппеты. Все отлично работает, кроме одного конкретного фрагмента.

Файл: ~/.emacs.d/elpa/yasnippet-20150212.240/snippets/cc-mode/while

# -*- mode: snippet -*-
# name: while
# key: while
# --
while (${1:condition})
{
    $0
}

Проблема в том, что когда я использую сниппет, результат будет таким:

while(condition)
    {

    }

Я проверил, есть ли у меня правильный файл, изменив исходный файл while:

# -*- mode: snippet -*-
# name: while
# key: while
# --
while (${1:condition})
{
    $0;
}

(точка с запятой добавлена), и результат был:

while(condition)
    {
        ;
    }

Почему у моих скоб есть вкладка?

Примечание: все остальное работает нормально. Для циклов работают нормально, switch работает нормально, классы работают нормально... Проблема возникает только в цикле while. Есть идеи?

1 ответ

Решение

Нашел ответ. Это было сложно для кого-то, кто только начал использовать emacs, как я.

Посмотрев здесь, кажется, что c-стиль по умолчанию выглядит примерно так

if(foo)
      {
        bar++;
      }

поэтому, когда я нажал tab для использования фрагмента, я также автоматически отформатировал код в стиле c по умолчанию. Это стиль "гну". Чтобы изменить его на стиль "linux" просто добавьте

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

в ваш файл.emacs или init.el.

Вывод после изменений:

if(foo)
{
    bar++;
}

В конце концов, это не имеет ничего общего с ясниппет.

Другие вопросы по тегам