자바 스크립트에서 지역 / 코드 축소를 구현하는 방법


132

Visual Studio에서 JavaScript에 대한 코드 축소 (일명 코드 축소) 영역을 어떻게 구현할 수 있습니까?

자바 스크립트에 수백 줄이있는 경우 vb / C #에서와 같이 영역으로 코드 접기를 사용하면 더 이해할 수 있습니다.

#region My Code

#endregion

1
이 솔루션들 중 어느 것도 이것만큼 효과적이지 않았습니다. stackoverflow.com/questions/46267908/…
마이클 드럼

답변:


25

블로그 항목은 여기 와이 MSDN 질문에 대해 설명합니다 .

Visual Studio 2003/2005/2008 매크로를 사용해야합니다.

충실도를 위해 블로그 항목에서 복사 + 붙여 넣기 :

  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. 이제 매크로에 단축키를 할당 해 봅시다. 도구-> 옵션-> 환경-> 키보드로 이동하여 "다음을 포함하는 명령 표시"텍스트 상자에서 매크로를 검색하십시오.
  3. 텍스트 상자에서 "바로 가기 키 누르기"아래에서 원하는 바로 가기를 입력 할 수 있습니다. Ctrl + M + E를 사용합니다. 왜 그런지 모르겠습니다-방금 처음 입력하여 지금 사용하십시오 :)

이것은 유용하고 사이트의 의견에서 주목할 중요한 점은 "위의 코드에서 모듈의 이름을 새 매크로의 이름으로 확인해야합니다. 두 이름이 모두 일치해야합니다!"입니다.
Prasad

이것은 VS2010에서 작동합니까? 나는 갈 수 없다. 매크로를 검색 할 때 매크로가 표시되지 않습니다.
Mr. Flibble

@씨. 깜박임 : 확실하지 않습니다. VS2005 만 있습니다.

확인. 여기에 새로운 질문이 있습니다 : stackoverflow.com/questions/2923177/…
Mr. Flibble

Microsoft는 이제이 기능을 제공하는 VS2010 확장 기능을 제공합니다 (링크는 아래 답변 참조).
BrianFinkel 2016 년

52

Microsoft는 이제이 기능을 제공 하는 VS 2010 의 확장 기능을 갖습니다 .

JScript 에디터 익스텐션


환상적이다! 이들이 다음 VS 업데이트에 포함되기를 바랍니다. 공유해 주셔서 감사합니다!
William Niu

확장 기능을 설명하는 타사보다 훨씬 뛰어난 확장 기능.
Hovis Biddle

2
VS 2012 및 2013에서 이러한 일이 발생합니까?
Jacques

1
대단해! VS 2012 또는 2013 용 버전이 있습니까?
Axel

50

최신 버전의 Visual Studio를 사용하는 개발자에게 희소식

웹 요점은 이 기능을오고있다.

이것 좀 봐

여기에 이미지 설명을 입력하십시오

참고 : VS 2017의 경우 JavaScript 리전 사용 : https://marketplace.visualstudio.com/items?itemName=MadsKristensen.JavaScriptRegions


@William 언젠가 사람들은 이것을 확실히 필요로 할 것입니다;)
Kaushik Thanki

2
시간이 지남에 따라 이것은 사실상 대답을 받아 들일 것입니다.
Hakan Fıstık

2019 년 6 월 10 일 기준 최신 버전의 VSCode-Typescript와 완벽하게 작동합니다.
Eddy Howard

40

간단합니다!

접고 싶은 부분을 표시하고

Ctrl + M + H

확장하려면 왼쪽에 '+'표시를 사용하십시오.


3
효과가 있었다!. 단일 아약스 호출에서 많은 아약스 호출이 있기 때문에 코드가 더 얇아 보였으므로 저를 구했습니다.
Sorangwala Abbasali

3
임시 해결책입니다. 파일을 닫았다가 다시 열면 선택한 영역이 사라집니다.
oneNiceFriend

32

Visual Studio 2012를 사용하려는 사람들을 위해 Web Essentials 2012가 있습니다.

Visual Studio 2015를 사용하려는 사람들을 위해 Web Essentials 2015가 있습니다 .3

사용법은 @prasad와 정확히 같습니다.


4
+1-대부분의 사람들이 지금까지 2012/2013을 사용할 것이므로 이것이 정답입니다! (2013 년에도 작동)
Peter Albert

26

논리 블록에 관계없이 코드 섹션을 표시하고 CTRL + M + H를 누르면 선택 영역이 축소 가능하고 확장 가능한 영역으로 정의됩니다.


감사합니다! 실수로 제거하거나 변경하려는 지역을 만든 경우이 작업을 실행 취소하는 방법을 알려주시겠습니까?
Tingo

3
CTRL + M + U를 사용하여 실행 취소 할 수 있습니다. 추가 단축키 : msdn.microsoft.com/en-us/library/td6a5x4s.aspx
laurian November


9

좋은 답변 을 주신 0A0D 에게 감사드립니다 . 나는 행운을 빕니다. Darin Dimitrov 는 또한 JS 파일의 복잡성을 제한하는 것에 대해 좋은 주장을합니다. 그럼에도 불구하고 정의에 대한 축소 기능으로 인해 파일을 훨씬 쉽게 탐색 할 수있는 경우가 있습니다.

일반적으로 #region과 관련 하여이 SO Question 은이를 잘 다루고 있습니다.

고급 코드 축소를 지원하기 위해 매크로를 약간 수정했습니다. 이 메소드를 사용하면 // # region 키워드 ala C # 뒤에 설명을 넣고 코드에 다음과 같이 표시 할 수 있습니다.

예제 코드 :

//#region InputHandler
var InputHandler = {
    inputMode: 'simple', //simple or advanced

    //#region filterKeys
    filterKeys: function(e) {
        var doSomething = true;
        if (doSomething) {
            alert('something');
        }
    },
    //#endregion filterKeys

    //#region handleInput
    handleInput: function(input, specialKeys) {
        //blah blah blah
    }
    //#endregion handleInput

};
//#endregion InputHandler

업데이트 된 매크로 :

Option Explicit On
Option Strict On

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports System.Diagnostics
Imports System.Collections.Generic

Public Module JsMacros


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

        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 New Stack(Of Integer)

        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 ...
                Dim tempStartIndex As Integer = CInt(startRegions.Pop())
                selection.MoveToLineAndOffset(CalcLineNumber(text, tempStartIndex), CalcLineOffset(text, tempStartIndex))
                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) As Integer
        Dim lineNumber As Integer = 1
        Dim i As Integer = 0

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

            If text.Chars(i) = vbCr Then
                lineNumber += 1
                i += 1
                If text.Chars(i) = vbLf Then
                    i += 1 'Swallow the next vbLf
                End If
            End If

            i += 1
        End While

        Return lineNumber
    End Function

    Private Function CalcLineOffset(ByVal text As String, ByVal index As Integer) As Integer
        Dim offset As Integer = 1
        Dim i As Integer = index - 1

        'Count backwards from //#region to the previous line counting the white spaces
        Dim whiteSpaces = 1
        While i >= 0
            Dim chr As Char = text.Chars(i)
            If chr = vbCr Or chr = vbLf Then
                whiteSpaces = offset
                Exit While
            End If
            i -= 1
            offset += 1
        End While

        'Count forwards from //#region to the end of the region line
        i = index
        offset = 0
        Do
            Dim chr As Char = text.Chars(i)
            If chr = vbCr Or chr = vbLf Then
                Return whiteSpaces + offset
            End If
            offset += 1
            i += 1
        Loop

        Return whiteSpaces
    End Function

End Module

6
VS 2010에는 업데이트 된 확장 프레임 워크가 있으며 누군가 "Visual Studio 2010 JavaScript Outlining"이라는 코드 접는 플러그인을 만들 수있을 정도로 훌륭했습니다. jsoutlining.codeplex.com
Michael La Voie

2
VB 대신 C #으로 매크로를 작성할 수 있습니까?
xport

6

이것은 기본적으로 VS2017에 있습니다.

//#region fold this up

//#endregion

//와 # 사이의 공백은 중요하지 않습니다.

변경 로그에서 언급 할 수 없으므로 어떤 버전이 추가되었는지 알 수 없습니다. v15.7.3에서 사용할 수 있습니다.



0

Resharper를 사용하는 경우

이 사진의 단계를 포기

여기에 이미지 설명을 입력하십시오 그런 다음 템플릿 편집기에서 작성하십시오.

  //#region $name$
$END$$SELECTION$
  //#endregion $name$

#region이 그림 과 같이 이름을여기에 이미지 설명을 입력하십시오

이것이 당신을 도울 수 있기를 바랍니다



0

비주얼 스튜디오 2017.

    //#region Get Deactivation JS
    .
    .
    //#endregion Get Deactivation JS

이것은 이전에 작동하지 않았으므로 여기 에서 확장 프로그램을 다운로드했습니다 .


-2

지역은 설정을 변경하지 않고 작동해야합니다

//#region Optional Naming
    var x = 5 -0; // Code runs inside #REGION
    /* Unnecessary code must be commented out */
//#endregion

축소 주석 영역을 활성화하려면 / ** /

/* Collapse this

*/

설정-> "폴딩"검색-> 편집기 : 접기 전략-> "자동"에서 "들여 쓰기"로.

태그 : Node.js Nodejs Node js Javascript ES5 ECMAScript 주석 접기 숨기기 영역 Visual Studio 코드 vscode 2018 버전 1.2 이상 https://code.visualstudio.com/updates/v1_17#_folding-regions


-3

VS뿐만 아니라 거의 모든 편집자에게도 적합합니다.

(function /* RegionName */ () { ... })();

경고 : 범위와 같은 단점이 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.