1. ホーム
  2. javascript

[解決済み] javascript で地域/コードの折りたたみを実装する方法

2022-05-13 19:43:51

質問

Visual StudioでJavaScriptのリージョン(コードの折りたたみ)を実装するにはどうしたらよいでしょうか。

javascriptで何百行もある場合、vb/C#のようにリージョンでコード折りたたみを使用するとより理解しやすいでしょう。

#region My Code

#endregion

どのように解決するのですか?

こちらのブログ記事で解説しています そして、この MSDN の質問 .

Visual Studio 2003/2005/2008 Macrosを使用する必要があります。

忠実のため、ブログのエントリからコピー+ペーストしています。

  1. マクロ エクスプローラーを開く
  2. 新しいマクロを作成する
  3. 名前を付けます。 OutlineRegions
  4. マクロの編集をクリックし、以下のVBコードを貼り付けます。
Option Strict Off
Option Explicit Off

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics
Imports System.Collections

Public Module JsMacros

    Sub OutlineRegions()
        Dim selection As EnvDTE.TextSelection = DTE.ActiveDocument.Selection

        Const REGION_START As String = "//#region"
        Const REGION_END As String = "//#endregion"

        selection.SelectAll()
        Dim text As String = selection.Text
        selection.StartOfDocument(True)

        Dim startIndex As Integer
        Dim endIndex As Integer
        Dim lastIndex As Integer = 0
        Dim startRegions As Stack = New Stack()

        Do
            startIndex = text.IndexOf(REGION_START, lastIndex)
            endIndex = text.IndexOf(REGION_END, lastIndex)

            If startIndex = -1 AndAlso endIndex = -1 Then
                Exit Do
            End If

            If startIndex <> -1 AndAlso startIndex < endIndex Then
                startRegions.Push(startIndex)
                lastIndex = startIndex + 1
            Else
                ' Outline region ...
                selection.MoveToLineAndOffset(CalcLineNumber(text, CInt(startRegions.Pop())), 1)
                selection.MoveToLineAndOffset(CalcLineNumber(text, endIndex) + 1, 1, True)
                selection.OutlineSection()

                lastIndex = endIndex + 1
            End If
        Loop

        selection.StartOfDocument()
    End Sub

    Private Function CalcLineNumber(ByVal text As String, ByVal index As Integer)
        Dim lineNumber As Integer = 1
        Dim i As Integer = 0

        While i < index
            If text.Chars(i) = vbCr Then
                lineNumber += 1
                i += 1
            End If

            i += 1
        End While

        Return lineNumber
    End Function

End Module

  1. マクロを保存し、エディターを閉じる
  2. それでは、マクロにショートカットを割り当ててみましょう。ツール->オプション->環境->キーボードに移動し、quot;show commands containing" テキストボックスでマクロを検索してください。
  3. の下にあるテキストボックスで、希望のショートカットを入力します。私は Ctrl+M+E を使っています。なぜか、最初に入力しただけで今使っています :)