Запрос содержит ссылки на макросы IDE, которые могут выполнять эту работу:
http://blogs.msdn.com/b/kevinpilchbisson/archive/2004/05/17/133371.aspx
http://web.archive.org/web/20090217094033/http://chriseargle.com/post/Format-Solution.aspx
Вот пример кода для макроса Visual Studio, который автоматически форматирует все * .cs, * .h, * .cpp и * .hpp файлы в открытом решении, которое включает преобразование пробелов во вкладки (в зависимости от настроек вкладок в меню «Инструменты»> «Параметры»> «Текстовый редактор»> «определенный язык» или «Все языки»> «Вкладки»):
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics
Public Module ConvertTabsToSpaces
Public Sub FormatSolution()
Dim sol As Solution = DTE.Solution
For i As Integer = 1 To sol.Projects.Count
FormatProject(sol.Projects.Item(i))
Next
End Sub
Private Sub FormatProject(ByVal proj As Project)
If Not proj.ProjectItems Is Nothing Then
For i As Integer = 1 To proj.ProjectItems.Count
FormatProjectItem(proj.ProjectItems.Item(i))
Next
End If
End Sub
Private Sub FormatProjectItem(ByVal projectItem As ProjectItem)
If projectItem.Kind = Constants.vsProjectItemKindPhysicalFile Then
If projectItem.Name.LastIndexOf(".cs") = projectItem.Name.Length - 3 Then
Dim window As Window = projectItem.Open(Constants.vsViewKindCode)
window.Activate()
projectItem.Document.DTE.ExecuteCommand("Edit.FormatDocument")
window.Close(vsSaveChanges.vsSaveChangesYes)
ElseIf ((projectItem.Name.LastIndexOf(".cpp") = projectItem.Name.Length - 4) OrElse (projectItem.Name.LastIndexOf(".hpp") = projectItem.Name.Length - 4) OrElse (projectItem.Name.LastIndexOf(".h") = projectItem.Name.Length - 2)) Then
Dim window As Window = projectItem.Open(Constants.vsViewKindCode)
window.Activate()
projectItem.Document.DTE.ExecuteCommand("Edit.SelectAll")
projectItem.Document.DTE.ExecuteCommand("Edit.FormatSelection")
window.Close(vsSaveChanges.vsSaveChangesYes)
End If
End If
'Be sure to format all of the ProjectItems.
If Not projectItem.ProjectItems Is Nothing Then
For i As Integer = 1 To projectItem.ProjectItems.Count
FormatProjectItem(projectItem.ProjectItems.Item(i))
Next
End If
'Format the SubProject if it exists.
If Not projectItem.SubProject Is Nothing Then
FormatProject(projectItem.SubProject)
End If
End Sub
End Module
Инструкции (Visual Studio 2005, но аналогичные для более новых версий):
- Запуск Visual Studio
- Инструменты> Макросы> Макросы IDE ...
- Щелкните правой кнопкой мыши MyMacros> Добавить> Добавить новый элемент ...
- Выбрать модуль
- Введите "ConvertSpacesToTabs" без кавычек в поле "Имя"
- Нажмите Добавить
- Замените содержимое нового модуля приведенным выше кодом
- Нажмите Сохранить
- Закройте макрос IDE
- Инструменты> Макросы> Macro Explorer
- Разверните MyMacros> ConvertSpacesToTabs
- Дважды щелкните FormatSoluti.
- Дождаться окончания макроса
Редактировать
Я обновил код, чтобы также поддерживать * .h, * .cpp и *.hpp файлы с использованием кода от Зигмунда Френцеля здесь: https://stackoverflow.com/a/14766393/90287