讓Visual Studio 也支援JS程式碼摺疊功能 [ #region | #endregion ]

來源:互聯網
上載者:User

 

 

前言

      Visual Studio的程式碼摺疊功能功能非常好用,#region #endregion 這個詞連搜狗的詞庫裡面都出現了(不含'#'號),可見使用頻率很高,但是他不支援js的程式碼摺疊功能 : ( 最近Ext用得比較多,一寫就是上百行JS代碼,非常不方便,想著自己寫個擴充或外掛程式什麼的,意外搜到了下面的文章,已經用宏來實現了,本文可以理解為該文的簡單譯本,注意宏代碼部分我有所改動 : )
 

文章

      1.      Using #region Directive With JavaScript Files in Visual Studio

 

環境

      Microsoft Visual Studio 2008

 

本文

      1.      開啟宏資源管理員:視圖 -> 其他視窗 -> 宏資源管理員

   

      2.      建立一個新模組

  

  3.  編輯宏:  選中模組 -> 右鍵編輯

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

-->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()
        '農民伯伯 --- 自動為"//#endregion"結束的代碼添加最後一行,不然出錯
        If selection.Text.EndsWith(REGION_END) Then
            selection.EndOfLine()
            selection.NewLine()
            selection.SelectAll()
        End If

        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

    儲存即可。這裡可以省去建立宏的步驟,他會根據代碼自動給你產生一個宏的。

    注意我加的程式碼片段,如果不加,並且你的JS最後一行為#endregion,宏將報錯,顯示“值不在預期的範圍內”。

 

  4.  設定快速鍵

   

    4.1  工具 -> 選項 - > 環境 -> 鍵盤

    4.2  在顯示命令包含下面的文字框中輸入宏名outli,不用輸全,下面能顯示你建立的宏

    4.3  點一下 按快速鍵 下面的文字框, 然後自訂快速鍵組合,我定義的是Ctrl+M,Ctrl+J,點分配(別忘了!),點確定。

 

  5.效果

    5.1  輸入代碼:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

-->
//aasdsadsad

//#region
//#endregion

    5.2  快速鍵Ctrl+M,Ctrl+J啟動宏,能看到系統的右下角顯示可愛的小方塊在轉動,js編輯框顯示效果如下:

    

    5.3  之後就可以用快速鍵Ctrl+M,Ctrl+L來[展開/摺疊]代碼了,注意關閉之後重新開啟需要再啟動一次宏,展開效果如下:

     

 

結束

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.