web-dev-qa-db-ja.com

Visual Studioソリューションのすべてのファイルを「タブ化」しますか?

に「tabify」コマンドがあります

編集>詳細>選択した行をタブ化

(そしてPower Tools 2010もファイルごとにこの機能を提供します)しかし、これを行う方法はありますかソリューション内のすべてのコードファイル

ReSharperにはクリーンアップコマンドがありますが、私が見つけた唯一の半分適切なオプションは、すべてのファイルに対してフォーマットを実行することです。

29
Borek Bernard

Microsoft Productivity Power tools拡張機能を追加した場合(まだ追加していない場合は、オプションを追加します)ファイルを集計します。これは、ソリューション内のすべてのファイルに適用されるわけではありませんが、各ファイルを編集するときに、ファイルごとにプロンプ​​トが表示されます。あなたが求めているものではありませんが、助けになります。

また、タブを使用するようにIDEエディター設定を設定してから、menu-edit-advanced-formatドキュメント(CTRL + E、D)を実行してみてください。これにより、タブ長スペースのグループがタブであり、マクロを介してソリューション内のすべてのファイルに対してスクリプト可能である必要があります。

16
Pete Stensønes

リクエストには、ジョブを実行できる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

これは、開いているソリューションですべての* .cs、*。h、*。cpp、および* .hppファイルを自動的にフォーマットするVisualStudioマクロのサンプルコードです。これには、スペースのタブへの変換が含まれます([ツール]>の[タブ設定]によって異なります)オプション>テキストエディタ>特定の言語または「すべての言語」>タブ):

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. VisualStudioを起動します
  2. ツール>マクロ>マクロIDE.。
  3. MyMacrosを右クリック>追加>新しいアイテムを追加...
  4. モジュールを選択
  5. [名前]フィールドに引用符なしで「ConvertSpacesToTabs」と入力します
  6. [追加]をクリックします
  7. 新しいモジュールの内容を上記のコードに置き換えます
  8. [保存]をクリックします
  9. マクロIDEを閉じます
  10. ツール>マクロ>マクロエクスプローラー
  11. MyMacros> ConvertSpacesToTabsを展開します
  12. FormatSolutionをダブルクリックします
  13. マクロが終了するのを待ちます

編集
ここでSiegmundFrenzelのコードを使用して、*。h、*。cpp、および* .hppファイルもサポートするようにコードを更新しました: https://stackoverflow.com/a/14766393/90287

4
Rami A.

「Tabify」の機能はこれです。「」(4つのスペース)をタブに置き換えるだけで、フォーマットなどは変更されません。

ドキュメントの書式設定を使用することをお勧めしますが、「タブ化」は、必要なすべてのファイルで同じアクションを模倣するカスタムアプリケーションを介して簡単に実行できます。

お役に立てれば!

3
brokenisfixed

Vs2010の場合、次の検索と置換を使用できます(この例は4つのスペースへのタブ用です)。

検索ボックスに次のように入力します。^{ *}^{ space *} tab)

置換ボックスに、\1\1スペーススペーススペーススペース)と入力します。

条件ボックスをチェックして、正規表現に設定します。 vsの新しいバージョンは異なる正規表現構文を使用しますが、同じことが実行可能であるはずです。

更新これはvbファイルに対して1回実行することで機能しましたが、resxファイルに対しては複数のパスが必要であったため、ファイルの種類によっては複数回実行する必要がある場合があります。

1
jswolf19