문제

소규모 커뮤니티 토론을 위해 사용하는 필수 비주얼 스튜디오 매크로는 무엇입니까?

방금 그들에 대해 배우기 시작했고, 당신 중 일부가없이 살 수없는 것을 듣고 싶습니다.

도움이 되었습니까?

해결책

나는 2002/2003 대 VS에서 많은 매크로를 사용했었다. 한 가지 예는 지역 제작입니다. 저는 항상 내 수업이 "개인 회원", "공공 재산", "공공 방법"및 "개인 방법"으로 나누는 것을 좋아합니다. 따라서 새 클래스 파일에 이러한 영역을 생성하는 바로 가기 키에 매크로 맵핑되었습니다.

vs 2005/2008 (및 일반적인 코드 스 니펫 추가 시설)과 Dxcore 및 Slickedit와 같은 Addins의 사용을 통해 더 이상 너무 많은 매크로를 만들지 않고도 일할 수 있습니다.

다른 팁

다음 3 매크로의 도구 모음에 버튼을 추가합니다. 각각은 모든 파일 및 Google IT (또는 MSDN-IT 또는 Spell-Check-IT)에서 현재 선택된 텍스트를 취합니다. 추가 스타일 포인트 용 도구 모음의 멋진 아이콘을 구성하십시오.

Private Const BROWSER_PATH As String = "C:\Program Files\Mozilla Firefox\firefox.exe"

Sub SearchGoogle()
    Dim cmd As String
    cmd = String.Format("{0} http://www.google.com/search?hl-en&q={1}", BROWSER_PATH, DTE.ActiveDocument.Selection.Text)
    Shell(cmd, AppWinStyle.NormalFocus)
End Sub

Sub SearchMSDN()
    Dim cmd As String
    cmd = String.Format("{0} http://www.google.com/search?hl-en&q={1}+site%3Amsdn.microsoft.com", BROWSER_PATH, DTE.ActiveDocument.Selection.Text)
    Shell(cmd, AppWinStyle.NormalFocus)
End Sub

Sub SpellCheck()
    Dim cmd As String
    cmd = String.Format("{0} http://www.spellcheck.net/cgi-bin/spell.exe?action=CHECKWORD&string={1}", BROWSER_PATH, DTE.ActiveDocument.Selection.Text)
    Shell(cmd, AppWinStyle.NormalFocus)
End Sub

출력 창에 빌드 기간을 표시하십시오

이 코드를 EnvironmentEvents 모듈에 넣으십시오. 이렇게하면 솔루션 (빌드, 재건, 청정, 배포)에 대한 모든 작업에 대한 기간을 빌드 창에 직접 작성합니다.

isbuild 함수를 변경 하여이 정보를보고 싶은 작업을 지정할 수 있습니다.

Dim buildStart As Date

Private Function IsBuild(ByVal scope As EnvDTE.vsBuildScope, ByVal action As EnvDTE.vsBuildAction) As Boolean
    Return scope = vsBuildScope.vsBuildScopeSolution
End Function

Private Sub BuildEvents_OnBuildBegin(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildBegin
    If (IsBuild(Scope, Action)) Then
        buildStart = Date.Now
    End If
End Sub

Private Sub BuildEvents_OnBuildDone(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildDone
    If (IsBuild(Scope, Action)) Then
        Dim buildTime = Date.Now - buildStart
        WriteToBuildWindow(String.Format("Build time: {0}", buildTime.ToString))
    End If
End Sub

Private Sub WriteToBuildWindow(ByVal message As String)
    Dim win As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
    Dim ow As OutputWindow = CType(win.Object, OutputWindow)
    For Each owPane As OutputWindowPane In ow.OutputWindowPanes
        If (owPane.Name.Equals("Build")) Then
            owPane.OutputString(message)
            Exit For
        End If
    Next
End Sub

솔루션을 닫은 후 시작 페이지 표시 (그러나 Visual Studio를 열어 두십시오)

이 코드를 EnvironmentEvents 모듈에 넣으십시오.

Private Sub SolutionEvents_AfterClosing() Handles SolutionEvents.AfterClosing
    DTE.ExecuteCommand("View.StartPage")
End Sub


솔루션을 열면 시작 페이지를 숨 깁니다

이 코드를 EnvironmentEvents 모듈에 넣으십시오.

Private Sub SolutionEvents_Opened() Handles SolutionEvents.Opened
    Dim startPageGuid As String = "{387CB18D-6153-4156-9257-9AC3F9207BBE}"
    Dim startPage As EnvDTE.Window = DTE.Windows.Item(startPageGuid)
    If startPage IsNot Nothing Then startPage.Close()
End Sub


이 두 가지가 함께 솔루션을 열 때 시작 페이지가 숨어 있습니다. 솔루션을 닫으면 시작 페이지가 다시 나타납니다.

나는 다음과 같은 덜 알려진 단축키를 매우 자주 사용합니다.

  • ctrl+입력: 현재 선 위에 빈 줄을 삽입하고 커서를 거기에 놓습니다)
  • Ctrl+Shift+Enter: 현재 선 아래에 빈 줄을 삽입하고 커서를 거기에 놓습니다)
  • Ctrl+Shift+v: 순환 클립 보드 링

개요 : 정의로 붕괴되지만 지역을 확장합니다

당신은 주변 지역을 주장하는 상점 중 하나에서 일하고 있습니까? 모든 것, 정의로 붕괴되면 코드가 표시되지 않습니까?

당신이 정말로 필요로하는 것은 이와 같이 붕괴-expand-legions 매크로입니다.

Sub CollapseToDefinitionsButExpandAllRegions()
    DTE.ExecuteCommand("Edit.CollapsetoDefinitions")
    DTE.SuppressUI = True
    Dim objSelection As TextSelection = DTE.ActiveDocument.Selection
    objSelection.StartOfDocument()
    Do While objSelection.FindText("#region", 
        vsFindOptions.vsFindOptionsMatchInHiddenText)
    Loop
    objSelection.StartOfDocument()
    DTE.SuppressUI = False
End Sub

이것을 일반 매크로 모듈에 넣고 핫 키에 할당하면 코드가 돌아옵니다.

(제외 ... 당신이 지역을 두는 정말 사악한 사람들과 함께 일한다면 내부에 방법, 이것은 불행히도 이러한 방법을 확장합니다. 누구든지 피하기 위해 이것을 쓰는 방법을 알고 있다면 편집하십시오.)

Wix 작업에 적합한 Guid를 삽입하고 메뉴에 버튼 또는 키 단축키로 추가하십시오.

Sub InsertGuid()
    Dim objTextSelection As TextSelection
    objTextSelection = CType(DTE.ActiveDocument.Selection(), EnvDTE.TextSelection)
    objTextSelection.Text = System.Guid.NewGuid.ToString.ToUpper(New System.Globalization.CultureInfo("en", False))
End Sub

솔루션에서 모든 .CS 파일에 대한 성공을 구성하십시오. 오리지널 저자 : DJPARK.

Sub OrganizeSolution()
    Dim sol As Solution = DTE.Solution
    For i As Integer = 1 To sol.Projects.Count
        OrganizeProject(sol.Projects.Item(i))
    Next
End Sub

Private Sub OrganizeProject(ByVal proj As Project)
    For i As Integer = 1 To proj.ProjectItems.Count
        OrganizeProjectItem(proj.ProjectItems.Item(i))
    Next
End Sub

Private Sub OrganizeProjectItem(ByVal projectItem As ProjectItem)
    Dim fileIsOpen As Boolean = False
    If projectItem.Kind = Constants.vsProjectItemKindPhysicalFile Then
        'If this is a c# file             
        If projectItem.Name.LastIndexOf(".cs") = projectItem.Name.Length - 3 Then
            'Set flag to true if file is already open                 
            fileIsOpen = projectItem.IsOpen
            Dim window As Window = projectItem.Open(Constants.vsViewKindCode)
            window.Activate()
            projectItem.Document.DTE.ExecuteCommand("Edit.RemoveAndSort")
            'Only close the file if it was not already open                 
            If Not fileIsOpen Then
                window.Close(vsSaveChanges.vsSaveChangesYes)
            End If
        End If
    End If
    'Be sure to apply RemoveAndSort on all of the ProjectItems.         
    If Not projectItem.ProjectItems Is Nothing Then
        For i As Integer = 1 To projectItem.ProjectItems.Count
            OrganizeProjectItem(projectItem.ProjectItems.Item(i))
        Next
    End If
    'Apply RemoveAndSort on a SubProject if it exists.         
    If Not projectItem.SubProject Is Nothing Then
        OrganizeProject(projectItem.SubProject)
    End If
End Sub

모든 노드를 붕괴시킵니다 솔루션 패널의 대형 프로젝트에 매우 유용합니다.

    Public Module CollapseAllNodes
    Sub RunCollapseAllNodes()
        Dim UIHSolutionExplorer As UIHierarchy
        UIHSolutionExplorer = DTE.Windows.Item(Constants.vsext_wk_SProjectWindow).Object()

        ' Check if there is any open solution 
        If (UIHSolutionExplorer.UIHierarchyItems.Count = 0) Then
            Return
        End If

        ' Get the top node (the name of the solution) 
        Dim UIHSolutionRootNode As UIHierarchyItem
        UIHSolutionRootNode = UIHSolutionExplorer.UIHierarchyItems.Item(1)

        CloseRecursif(UIHSolutionRootNode)

        ' Select the solution node, or else when you click 
        ' on the solution windows scrollbar, it will synchronize the open document 
        ' with the tree and pop out the corresponding node which is probably not 
        ' what you want. 
        UIHSolutionRootNode.Select(vsUISelectionType.vsUISelectionTypeSelect)
    End Sub

    Function CloseRecursif(ByRef element)
        For Each UIHChild In element.UIHierarchyItems()
            CloseRecursif(UIHChild)

            If (UIHChild.UIHierarchyItems.Expanded = True) Then
                UIHChild.UIHierarchyItems.Expanded = False
            End If

        Next
    End Function
End Module

나는 Jeff 's를 사용합니다 formattohtml 매크로 코드 예제를 블로그 게시물이나 이메일에 붙일 것입니다.

나는 듀얼 모니터와 함께 일하며 Sharon의 레이아웃 전환 매크로 (1 모니터에서 2 모니터 레이아웃까지)는 완전히 귀중합니다. 약간의 코드를 입력하는 동안 웹 페이지 또는 기타 프로그램을 참조 해야하는 경우 CTRL-ALT-1은 Visual Studio Windows의 하나의 모니터 레이아웃으로 전환해야합니다. 완료되면 Ctrl-Alt-2를 사용하여 두 모니터 레이아웃으로 전환하고 모든 Windows를 다시 가져옵니다. 대박!

http://www.invisible-city.com/sharon/2008/06/workstation-hack-visual-studio-2.html

그 자체로 매크로는 아니지만 유용합니다.

Public Sub WriteToOutputWindow(ByVal pane as String, ByVal Msg As String)
    Dim owPane As OutputWindowPane

    Dim win As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
    Dim ow As OutputWindow = win.Object
    Try
        owPane = ow.OutputWindowPanes.Item(pane)
    Catch
        owPane = ow.OutputWindowPanes.Add(pane)
    End Try
    If Not owPane Is Nothing Then
        owPane.Activate()
        owPane.OutputString(Msg & vbCrLf)
    End If
End Sub

Ctrl-Shift-G를 레지스트리 형식으로 GUID를 생성하는 매크로에 매핑했습니다. 이것은 IDL을 편집하는 데 유용합니다.

현재 다른 코딩 표준을 가진 두 개의 다른 프로젝트 (하나는 라인 시작에 탭을 사용하고 다른 하나는 공백을 사용하는 두 가지 프로젝트를 진행하고 있습니다. 이 매크로는 현재 활성화중인 환경을 기반으로 사용되는 표준간에 전환합니다.

Public Sub ToggleTabs()
  If DTE.ActiveDocument.Language = "CSharp" Then
      Dim currentSetting As Boolean = DTE.Properties("TextEditor", "CSharp").Item("InsertTabs").Value
      DTE.Properties("TextEditor", "CSharp").Item("InsertTabs").Value = Not currentSetting
  End If

  If DTE.ActiveDocument.Language = "SQL" Then
      Dim currentSQLSetting As Boolean = DTE.Properties("TextEditor", "SQL").Item("InsertTabs").Value
      DTE.Properties("TextEditor", "SQL").Item("InsertTabs").Value = Not currentSQLSetting
  End If

  If DTE.ActiveDocument.Language = "HTML" Then
      Dim currentHTMLSetting As Boolean = DTE.Properties("TextEditor", "HTML").Item("InsertTabs").Value
      DTE.Properties("TextEditor", "HTML").Item("InsertTabs").Value = Not currentHTMLSetting
  End If

  If DTE.ActiveDocument.Language = "JScript" Then
      Dim currentJScriptSetting As Boolean = DTE.Properties("TextEditor", "JScript").Item("InsertTabs").Value
      DTE.Properties("TextEditor", "JScript").Item("InsertTabs").Value = Not currentJScriptSetting
  End If

End Sub

나는이 질문을 언급하지 않고 놓을 수 없었다 이 하나. 설치 및 사용 방법을 보여주는 비디오도 있습니다. 이 매크로를 사용하면 솔루션 탐색기 (Resources.resx)에서 중첩 파일을 만들 수 있습니다.

편집 : 링크를 업데이트했습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top