Почему VIM не делает правильный отступ для двухстрочного цикла?

Я ввел следующий код в VIM, почему он не делает отступ правильно? Здесь я хочу повторить один и тот же цикл 3 раза, они не являются вложенными циклами. Этот код просто опишите мою проблему.

#include <stdio.h>

int main() {
  int c;
  for (c = 0; c < 100; ++c)
    printf("%d\t%c\n", c, c);
    for (c = 0; c < 100; ++c)
      printf("%d\t%c\n", c, c);
      for (c = 0; c < 100; ++c)
        printf("%d\t%c\n"; c, c)
  return 0;
}

Это мое .vimrc конфигурация

set expandtab
set tabstop=2
set shiftwidth=2
set autoindent
set smartindent

Что-то не так в этих настройках?

Тот же код в emacs выглядит так

#include <stdio.h>

int main() {
  int c;
  for (c = 0; c < 100; ++c)
    printf("%d\t%c", c, c);
  for (c = 0; c < 100; ++c)
    printf("%d\t%c", c, c);
  for (c = 0; c < 100; ++c)
    printf("%d\t%c", c, c);
  return 0;
}

2 ответа

Попробуй это:

#include <stdio.h>

int main() {
  int c;
  for (c = 0; c < 100; ++c) {
    printf("%d\t%c\n", c, c);
    for (c = 0; c < 100; ++c) {
      printf("%d\t%c\n", c, c);
      for (c = 0; c < 100; ++c) {
        printf("%d\t%c\n"; c, c)
      }
    }
  }
  return 0;
}

Добавьте следующее в ваш vimrc. Это включит плагины файловых типов и получит нужные отступы.

 filetype plugin indent on

В соответствии с :h smartindent, Умный отступ будет вставлять только вкладки, если вы не вставите фигурные скобки.

Normally 'autoindent' should also be on when using 'smartindent'.
An indent is automatically inserted:
- After a line ending in '{'.
- After a line starting with a keyword from 'cinwords'.
- Before a line starting with '}' (only with the "O" command).
When typing '}' as the first character in a new line, that line is
given the same indent as the matching '{'.
Другие вопросы по тегам