«Табифицировать» все файлы в решении Visual Studio? - PullRequest
29 голосов
/ 14 июня 2010

В

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

Правка> Дополнительно> Табифицировать выделенные строки

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

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

Ответы [ 4 ]

16 голосов
/ 20 февраля 2011

Если вы добавили Microsoft Productivity Power tools расширение (которое, если вы этого не сделаете, я бы рекомендовал), оно добавляет опцию для табуляции файлов. Это относится не ко всем файлам в решении, но запрашивается при редактировании каждого файла для каждого файла отдельно. Не совсем то, что вам нужно, но помощь.

Также вы можете попытаться настроить параметры редактора IDE для использования вкладок, а затем выполнить документ меню-редактирование в расширенном формате (CTRL + E, D). Это заменит группы пробелов длины табуляции на табуляцию, и это должно быть доступно для сценариев для всех файлов в решении с помощью макроса.

4 голосов
/ 07 октября 2011

Запрос содержит ссылки на макросы 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, но аналогичные для более новых версий):

  1. Запуск Visual Studio
  2. Инструменты> Макросы> Макросы IDE ...
  3. Щелкните правой кнопкой мыши MyMacros> Добавить> Добавить новый элемент ...
  4. Выбрать модуль
  5. Введите "ConvertSpacesToTabs" без кавычек в поле "Имя"
  6. Нажмите Добавить
  7. Замените содержимое нового модуля приведенным выше кодом
  8. Нажмите Сохранить
  9. Закройте макрос IDE
  10. Инструменты> Макросы> Macro Explorer
  11. Разверните MyMacros> ConvertSpacesToTabs
  12. Дважды щелкните FormatSoluti.
  13. Дождаться окончания макроса

Редактировать
Я обновил код, чтобы также поддерживать * .h, * .cpp и *.hpp файлы с использованием кода от Зигмунда Френцеля здесь: https://stackoverflow.com/a/14766393/90287

3 голосов
/ 21 января 2011

Насколько я знаю, что делает "Tabify" - это только заменяет "" (4 пробела) на вкладку, это не меняет форматирование или что-то еще.

Хотя я бы предложил использовать форматирование документа, «табификацию» можно легко выполнить с помощью специального приложения, которое имитирует одно и то же действие для всех файлов, которые вы хотите.

Надеюсь, это поможет!

1 голос
/ 19 марта 2015

Для vs2010 вы можете использовать следующую функцию поиска и замены (в этом примере для табуляции до 4 пробелов).

В поле поиска введите: ^{ *} (^{ пробел *} вкладка)

В поле замены введите \1 (\1 пробел пробел пробел)

Установите флажок условия и установите регулярные выражения. Более новые версии vs используют другой синтаксис регулярных выражений, но тот же самый должен быть выполнимым.

Обновление Это сработало, выполнив один раз для файлов VB, но потребовалось несколько проходов для файла Resx, поэтому вам может потребоваться выполнить несколько раз в зависимости от типа файла ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...