VIM - "Довольно" формат столбца структур в C

У меня есть немного кода C с большим typedef"изд structс, и выглядеть так в VIM:

typedef struct {
  int         a;
  someValue*    b;
  someOtherValue* c;
} val_t;

Когда я включаю "печать пробельных символов" в VIM через :set listЯ вижу код выглядит так (с . символы, обозначающие пробелы, и --> обозначает жесткие вкладки):

typedef struct {
  int->-->-->-->a;
  someValue*....b;
  someOtherValue*>>c;
} val_t;

Таким образом, кажется, что этот код имеет смесь жестких вкладок и пробелов повсюду, вероятно, из-за различных редакторов, используемых для его обслуживания. Я пытаюсь написать несколько команд, чтобы привести в порядок. Я знаю, что могу сделать визуальный выбор с помощью SHIFT+V, а затем передать выбор col с помощью:

:'<:'>!col

Однако вывод в VIM выглядит ужасно, как кажется col это просто разделение столбцов "логически" (т.е. через три жесткие вкладки), а не лексически, и результат выглядит так:

typedef struct {
  int--->--->--->a;
  someValue*>--->--->b;
  someOtherValue*--->--->--->c;
} val_t;

Есть ли способ сказать col чтобы выровнять столбцы данных, используя жесткие вкладки фиксированной ширины (то есть: 4 "пробела" на вкладку), как показано ниже, чтобы визуально выровнять начало имен переменных в структуре? Желаемый результат будет:

typedef struct {
  int--->--->--->--->a;
  someValue*>--->--->b;
  someOtherValue*--->c;
} val_t;

Это позволило бы мне переориентировать кучу заголовочных файлов на уровень для каждого блока / структуры вместо того, чтобы тратить часы на ручное выделение фрагментов кода, чтобы выглядеть красиво.

Спасибо.

1 ответ

Решение

Вы застряли на жестких вкладках? Если нет, возможно, вы захотите взглянуть на таблицу или vim-easy-align.

С таблицей вы можете сделать что-то вроде этого:

:?{?+,/}/-Tabularize/\ze\w\+;/

Для получения дополнительной помощи см.:

:h \ze
:h range
Другие вопросы по тегам