代码之家  ›  专栏  ›  技术社区  ›  nfplee

在解决方案中格式化所有文件的Visual Studio宏

  •  3
  • nfplee  · 技术社区  · 14 年前

    我想知道如何创建一个宏来打开该解决方案中具有.cs文件扩展名的每个文件,只需选择所有文本,然后剪切和粘贴它(这将相应地格式化它)。如果它也能对using语句进行排序和删除,那也会很好,但这并不像我想象的那么重要,这会有点困难。

    谢谢你的帮助。谢谢

    2 回复  |  直到 12 年前
        1
  •  8
  •   nfplee    14 年前

    问题解决了!如果有人感兴趣,可以使用以下宏:

       Public Module FormatAll
            Public Sub FormatAll()
                Dim sol As Solution = DTE.Solution
                For i As Integer = 1 To sol.Projects.Count
                    Dim proj As Project = sol.Projects.Item(i)
                    For j As Integer = 1 To proj.ProjectItems.Count
                        FormatSome(proj.ProjectItems.Item(j))
                    Next
                Next
            End Sub
    
            Private Sub FormatSome(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")
                        projectItem.Document.DTE.ExecuteCommand("Edit.RemoveAndSort")
                        window.Close(vsSaveChanges.vsSaveChangesYes)
                    End If
                End If
    
                For i As Integer = 1 To projectItem.ProjectItems.Count
                    FormatSome(projectItem.ProjectItems.Item(i))
                Next
            End Sub
        End Module
    
        2
  •  1
  •   nfplee    9 年前

    对于Visual Studio 2008,您必须更改格式语句,因为FormatDocument不可用:

    projectItem.Document.DTE.ExecuteCommand("Edit.SelectAll")
    projectItem.Document.DTE.ExecuteCommand("Edit.FormatSelection")
    

    所以剧本应该是:

    Public Sub FormatAll()
        Dim sol As Solution = DTE.Solution
        For i As Integer = 1 To sol.Projects.Count
            Dim proj As Project = sol.Projects.Item(i)
            For j As Integer = 1 To proj.ProjectItems.Count
                FormatSome(proj.ProjectItems.Item(j))
            Next
        Next
    End Sub
    
    Private Sub FormatSome(ByVal projectItem As ProjectItem)
        If projectItem.Kind = Constants.vsProjectItemKindPhysicalFile Then
            If projectItem.Name.LastIndexOf(".cpp") = projectItem.Name.Length - 4 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)
            ElseIf 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
    
        For i As Integer = 1 To projectItem.ProjectItems.Count
            FormatSome(projectItem.ProjectItems.Item(i))
        Next
    End Sub