"Tabify"Visual Studio解决方案中的所有文件?

Bor*_*ard 29 tabs visual-studio-2010 visual-studio

中有一个"tabify"命令

编辑>高级>选中选定的行

(并且Power Tools 2010也基于每个文件提供此功能)但是有没有办法对解决方案中的所有代码文件执行此操作?

ReSharper有一个清理命令但是我发现的唯一一半合适的选项是在所有文件上运行格式化,这比我想要的更多(我不想运行完整的格式化,只是列表化).

Pet*_*nes 16

如果您已添加Microsoft Productivity Power工具扩展(如果您还没有我建议),则会添加一个选项来标记文件.这不适用于解决方案中的所有文件,但在每个文件的基础上编辑每个文件时会提示它.不是你想要的,而是一个帮助.

您也可以尝试将IDE编辑器设置设置为使用选项卡,然后执行菜单编辑高级格式文档(CTRL + E,D).这将使用选项卡替换选项卡长度空间组,并且应该可以通过宏为解决方案中的所有文件编写脚本.


Ram*_* A. 5

该请求包含指向可以完成这项工作的 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
Run Code Online (Sandbox Code Playgroud)

说明(Visual Studio 2005,但新版本类似):

  1. 启动 Visual Studio
  2. 工具 > 宏 > 宏 IDE...
  3. 右键单击 MyMacros > 添加 > 添加新项...
  4. 选择模块
  5. 在名称字段中输入不带引号的“ConvertSpacesToTabs”
  6. 点击添加
  7. 用上面的代码替换新模块的内容
  8. 点击保存
  9. 关闭宏 IDE
  10. 工具 > 宏 > 宏资源管理器
  11. 展开 MyMacros > ConvertSpacesToTabs
  12. 双击 FormatSolution
  13. 等待宏完成

编辑
我使用 Siegmund Frenzel 的代码更新了代码以支持 *.h、*.cpp 和 *.hpp 文件:https ://stackoverflow.com/a/14766393/90287


bro*_*xed 2

据我所知,“Tabify”的作用是这样的——它只用制表符替换“”(4个空格),它不会改变格式或其他任何内容。

尽管我建议使用文档格式,但“制表符”可以通过自定义应用程序轻松完成,该应用程序可以对您想要的所有文件模仿相同的操作。

希望这可以帮助!