2015-06-10 3 views
2

При работе с блоками кода в VIM, я могу легко повторно отступы блоков кода с помощью выбора региона в визуальном режиме (SHIFT + v), то просто нажмите =. Это повторное отображение строк кода, использование правильных глубин углубления, жестких вкладок и пробелов и т. Д.VIM - переформатирование отступов и скрепления

У меня есть большой набор функций, которые мне нужно перефакторировать, и у меня есть несколько блоков кода с фигурными скобками на та же линия, как if/else ключевых слов, а именно:

if(something) { 
    doFunction(something); 
} else if(somethingElse) { 
    doFunction(somethingElse); 
} else { 
    // default stuff to do 
} 

и я хотел бы изменить скобку и стиль Разноса к:

if (something) { 
    doFunction(something); 
} 
else if (somethingElse) 
{ 
    doFunction(somethingElse); 
} 
else 
{ 
    // default stuff to do 
} 

различия включают в себя:

  • Имея открытия/закрытия скобки на своей собственной выделенной линии
  • Аргументом if, else if и функции имеет пространство, разделяющее начало и конец списка аргументов из окружающих круглых скобках.
  • Пространство между if/else if и скобками аргументов, но не для имен функций и скобок аргументов.

Есть ли способ установить этот стиль как значение по умолчанию в VIM, а также иметь команды повторного выделения, чтобы изменить стиль, соответствующий последнему из двух, которые я предоставил? I've found tools to enforce things like line endings, tabs-vs-spaces, etc,, но не детали стиля, как показано выше.

спасибо.

ответ

4

Сценарии отступов в vim не созданы для таких сложных задач. Я бы посоветовал вам использовать команду indent, в частности, следующие аргументы:

-prs, --space-after-parentheses 
Put a space after every '(' and before every ')'. 
See STATEMENTS. 
-sai, --space-after-if 
Put a space after each if. 
See STATEMENTS. 

Вы должны прочитать страницу человека командной для более подробной информации.

Очевидно, что эта команда может быть использована для фильтрации содержимого этого буфера с помощью:

:%!indent