忍者ブログ
  C#   マクロ   Notepad++
04
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Visual Studioの"すべてのアウトラインの切り替え"で
折りたたんだり展開したり時折していたのですが、
いらぬとこまで折りたたんでくださります

いっそのこと#regionディレクティブだけを
折りたたんだり閉じたりしてくださる
マクロをこさえてみようと調べていたところ、
まさにやりたい事をマクロってる方がいらっしゃっいました。



「Region Tools for Visual Studio」
http://www.kynosarges.de/RegionTools.html

自分なりに解釈したコメントをつけたのが以下。

- マクロ
' すべての#regionを開く
Sub ExpandAllRegions()
    ' UIからの操作を停止
    DTE.SuppressUI = True
    ' 現在開いているドキュメントを取得
    Dim textSelection As TextSelection = DTE.ActiveDocument.Selection()
    textSelection.StartOfDocument()

    ' テキストエリア内ですべての#regionを探します。閉じてて見えない#regionも探します。
    ' 見つかったら自動的に選択される。選択されると自動的に開く仕組み。検索で見つかるのと同じ。
    Do While textSelection.FindText("#region", vsFindOptions.vsFindOptionsMatchInHiddenText)
    Loop

    ' キャレットをドキュメントの最初の位置に設定。
    textSelection.StartOfDocument()
    ' UIからの操作を再開
    DTE.SuppressUI = False

    ' 解放
    textSelection = Nothing
End Sub

' すべての#regionを閉じる
Sub CollapseAllRegions()

    ' 閉じ漏れがないように最初に全部の#regionを開いておく。
    ExpandAllRegions()

    ' UI操作を停止。
    DTE.SuppressUI = True
    ' 開いているドキュメントを捕獲。
    Dim textSelection As TextSelection = DTE.ActiveDocument.Selection()
    ' 現在の行位置を取得
    Dim line As Integer = textSelection.AnchorPoint.Line
    ' 現在の列位置を取得
    Dim offset As Integer = textSelection.AnchorPoint.LineCharOffset
    ' キャレットをドキュメントの終わりの位置に設定。
    ' 入れ子対策のため下から閉じていきます
    textSelection.EndOfDocument()

    ' ドキュメントの最後から#regionを探しだします
    Do While (textSelection.FindText("#region", vsFindOptions.vsFindOptionsBackwards))
        ' #regionが見つかったところで閉じる
        DTE.ExecuteCommand("Edit.ToggleOutliningExpansion")
        ' また下から閉じていくのでキャレットをドキュメントの終わりに設定
        textSelection.EndOfDocument()
    Loop
    ' アクティブポイントを最初の位置に。
    textSelection.MoveToLineAndOffset(line, offset)

    ' UI操作を再開
    DTE.SuppressUI = False

    ' 解放
    textSelection = Nothing
End Sub

めちゃ便利。
コードをサッパリとして見たい時とかにめちゃ便利。

たまに折りたたむ時にエラー発生するけども一番下の#regionだけ折りたたんで
もっかい折りたたむといけたりします。
PR
この記事にコメントする
名前
URL
本文
パス   
PREV  HOME  NEXT
忍者ブログ  [PR]

(design by 山瀬)