1

Команда программистов редко соглашается с такими вариантами форматирования, как вкладки и пробелы, открывающиеся фигурные скобки в новых строках и другие параметры. Есть ли способ, чтобы VIM анализировал файл (даже через внешнюю утилиту, такую как tidy) автоматически при открытии и записи, чтобы я редактировал так:

if ( something != other ) {
    Console.WriteLine("Var: {0}", something);
} else {
    Console.WriteLine("Just some code");
}

Однако файл будет сохранен так:

if ( something!=other )
{
    Console.WriteLine("Var: {0}", something);
}
else
{
    Console.WriteLine("Just some code");
}

Это будет актуально для конвертации в обоих направлениях при открытии и при записи.

3 ответа3

3

В течение вашей карьеры вы столкнетесь с различными стилями форматирования. Мой совет - привыкнуть к этому - научиться адаптировать свой стиль к файлу, над которым вы работаете. Среди прочих причин, инструменты для перевода из одного стиля в другой, как правило, не обходятся без внесения изменений в файл, и это затрудняет использование такого инструмента, как diff чтобы увидеть существенные изменения, которые вы сделали.

Тем не менее, Vim предоставляет несколько хуков для выполнения команд при чтении и записи файлов. Увидеть

:help autocommand

Например,

au BufWrite * %s/\s\+$//

удалит завершающие пробелы из буфера непосредственно перед записью его на диск. Командой может быть любая команда ex, включая вызов функции или фильтрацию всего буфера через внешнюю программу.

Событие BufWrite инициируется непосредственно перед записью буфера. Другое название для этого - BufWritePre. Если вы хотите записать буфер, а затем отменить изменения, сделанные в событии BufWritePre, вы можете использовать команду BufWritePost, чтобы отменить эти изменения. Событие BufRead (также известное как BufReadPost) можно использовать для запуска команд, которые форматируют текст так, как вы хотите, когда файл читается.

* Будет соответствовать любому имени файла. Вы можете использовать шаблоны имен файлов, такие как .c,.cpp, для запуска ваших автокоманд только тогда, когда определенные типы файлов читаются или записываются.

В качестве другого примера,

au BufRead *.[ch] normal gg=G

выполнит повторный отступ любого прочитанного вами исходного файла C в соответствии с вашими правилами отступа. Увидеть

:help =
:help C-indenting
0

Для того, чтобы отрегулировать, насколько большой фактический отступ вкладки отображается как, вы можете использовать директиву tabstop . в вашем .vimrc . У меня установлен 3

set tabstop=3
0

Проверьте этот плагин: https://github.com/Chiel92/vim-autoformat.

Похоже, это именно то, что вы ищете. Он форматирует ваш исходный файл одним нажатием кнопки через внешние средства форматирования.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .