Вопрос

Для небольшого обсуждения в сообществе: какие основные макросы Visual Studio вы используете?

Я только начал узнавать о них и хочу услышать, без чего некоторые из вас не могут жить.

Это было полезно?

Решение

Раньше я использовал много макросов в VS 2002/2003.Одним из примеров может быть создание региона. Мне всегда нравится, чтобы мои классы были разделены на следующие регионы: «Частные члены», «Публичные свойства», «Публичные методы» и «Частные методы».Итак, у меня есть макрос, сопоставленный с сочетанием клавиш, который создает эти области в любом новом файле класса.

Поддержка рефакторинга в VS 2005/2008 (и возможность добавления общих фрагментов кода), а также использование надстроек, таких как DXCore и SlickEdit, позволяют мне работать без необходимости создавать слишком много макросов.

Другие советы

Я добавляю кнопки на панель инструментов для следующих трех макросов.Каждый из них возьмет текущий выделенный текст в любом файле и погуглит его (или MSDN-он, или проверит орфографию).Создайте изящный значок для панели инструментов, чтобы получить дополнительные очки стиля.

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+Ввод:Вставьте пустую строку ниже текущей строки (и поместите туда курсор)
  • Ctrl+Shift+V:Циклически кольцо буфера обмена

Краткое описание:Свернуть до определений, но развернуть регионы

Вы работаете в одном из тех магазинов, который настаивает на том, чтобы регионы были рядом? все, чтобы при свертывании определений не было видно кода?

Что вам действительно нужно, так это макрос свертывания в определения, но расширения регионов, например этот:

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

Поместите это в обычный макромодуль, назначьте ему горячую клавишу, и ваш код вернется.

(За исключением… если вы работаете с некоторыми действительно гнусными людьми, которые ставят регионы внутри методы, это, к сожалению, расширит эти методы.Если кто-нибудь знает, как написать это, чтобы избежать этого, не стесняйтесь редактировать.)

Вставьте GUID, отлично подходит для работы с WiX, добавьте в меню как кнопку или сочетание клавиш.

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 в решении. Оригинальный автор: диджейпарк.

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

Я использую Джеффа ФорматтоХтмл макросы, если я собираюсь вставить пример кода в сообщение блога или электронное письмо.

Я работаю с двумя мониторами и считаю макрос переключения раскладки Шэрон (с одного монитора на раскладку с двумя мониторами) совершенно бесценным.Если вам нужно ссылаться на веб-страницу или другую программу при вводе небольшого количества кода, нажмите Ctrl-Alt-1, чтобы переключиться на макет одного монитора для ваших окон Visual Studio.Когда вы закончите, нажмите Ctrl-Alt-2, чтобы переключиться на макет с двумя мониторами и вернуть все окна обратно.Потрясающий!

http://www.invisible-city.com/sharon/2008/06/workstation-hack-visual-studio-on-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