"Tabify" все файлы в решении Visual Studio?
Там есть команда "tabify" в
Изменить > Дополнительно > Табировать выбранные строки
(и Power Tools 2010 также предоставляет эту функциональность для каждого файла), но есть ли способ сделать это для всех файлов кода в решении?
ReSharper имеет команду "Очистить", но единственная половина подходящей опции, которую я нашел, заключается в том, чтобы запускать форматирование для всех файлов, которые делают больше, чем я хочу (я не хочу запускать полное форматирование, просто табулируя).
Ответы
Ответ 1
Если вы добавили расширение Инструменты производительности Microsoft (которое, если вы этого не сделали, я бы рекомендовал) он добавляет возможность для табулирования файлов. Это не относится ко всем файлам в решении, но оно запрашивается при редактировании каждого файла на основе каждого файла. Не совсем то, что вам нужно, но помощь.
Также вы можете попробовать настроить параметры редактора IDE для использования вкладок, а затем сделать документ с меню-редактированием расширенного формата (CTRL + E, D). Это заменит группы пространств длины вкладок на вкладку, и это должно быть доступно для всех файлов в решении через макрос.
Ответ 2
Запрос содержит ссылки на макросы 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 в открытом решении, которое включает в себя преобразование пробелов в вкладки (в зависимости от настроек табуляции в Инструменты > Параметры > Текстовый редактоp > специальный язык или "Все языки" > вкладки):
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
- Инструменты > Макросы > Макро-проводник
- Развернуть MyMacros > ConvertSpacesToTabs
- Дважды щелкните по FormatSolution
- Дождитесь завершения макроса
Edit
Я обновил код, чтобы также поддерживать файлы *.h, *.cpp и *.hpp, используя код Siegmund Frenzel:
fooobar.com/questions/190877/...
Ответ 3
насколько я знаю, что делает Tabize, это только заменяет "" (4 пробела) на вкладку, она не меняет форматирование или что-то еще.
Хотя я бы предложил использовать форматирование документа, "табуляцию" можно было легко выполнить с помощью специального приложения, которое бы имитировало одно и то же действие для всех файлов, которые вы хотите.
Надеюсь, это поможет!
Ответ 4
Для vs2010 вы можете использовать следующий поиск и замену (этот пример предназначен для вкладок в 4 пробела).
В поле поиска введите: ^{ *}
(^{
пробел *}
)
В поле замены введите \1
(\1
пробел)
Отметьте поле условия и установите регулярные выражения.
Более новые версии vs используют разные синтаксисы регулярных выражений, но то же самое должно быть выполнимо.
Update
Это сработало, выполнив один раз для файлов vb, но потребовалось несколько проходов для файла resx, поэтому вам может потребоваться выполнить несколько раз в зависимости от типа файла...