Подтвердить что ты не робот

"Tabify" все файлы в решении Visual Studio?

Там есть команда "tabify" в

Изменить > Дополнительно > Табировать выбранные строки

(и Power Tools 2010 также предоставляет эту функциональность для каждого файла), но есть ли способ сделать это для всех файлов кода в решении?

ReSharper имеет команду "Очистить", но единственная половина подходящей опции, которую я нашел, заключается в том, чтобы запускать форматирование для всех файлов, которые делают больше, чем я хочу (я не хочу запускать полное форматирование, просто табулируя).

4b9b3361

Ответ 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, поэтому вам может потребоваться выполнить несколько раз в зависимости от типа файла...