Pregunta

Para una pequeña discusión de la comunidad, ¿cuáles son algunas macros de Visual Studio esenciales se utilizan?

Acabo de empezar a aprender acerca de ellos, y quiero escuchar lo que algunos de ustedes no pueden vivir sin él.

¿Fue útil?

Solución

Yo solía emplear una gran cantidad de macros en VS 2002/2003. Un ejemplo sería la creación Región - siempre me gusta mis clases que se dividen en las siguientes regiones - "Los miembros privados", "propiedades públicas", "Métodos públicos" y "métodos privados". Por lo tanto, tiene una macro asignada a una tecla de acceso directo que crea estas regiones, en cualquier archivo de clase de nuevo.

Refactorizando apoyo en VS 2005/2008 (y la facilidad de añadir fragmentos de código común), así como el uso de complementos como DXCore y SlickEdit me permiten trabajar sin tener que crear demasiadas macros más.

Otros consejos

agrego botones en la barra de herramientas para los siguientes 3 macros. Cada uno tomará el texto seleccionado en cualquier archivo y google (o MSDN-it, o revisar la ortografía-it). Hacer un icono de la barra de herramientas ingenioso para el estilo de puntos extra.

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

Mostrar duración de la acumulación en la ventana de salida

Pon este código en el módulo EnvironmentEvents. Esto escribirá la duración directamente a la ventana de construcción para cualquier acción en una solución de (construir, reconstruir, limpio, desplegar).

Puede cambiar la función IsBuild para especificar las acciones que desee para ver esta información.

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

Mostrar la página de inicio después de cerrar una solución (pero mantener abierta Visual Studio)

Pon este código en el módulo EnvironmentEvents:

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


Ocultar la página de inicio después de abrir una solución

Pon este código en el módulo 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


Estos dos juntos hará que su página de inicio a ocultarse cuando se abre una solución. Cuando se cierra la solución, la página de inicio regresa.

Yo uso los siguientes atajos menos conocidos con mucha frecuencia:

  • Ctrl + Enter : Insertar una línea en blanco por encima de la línea actual (y coloque el cursor allí)
  • Ctrl + Shift + Enter : Inserte una línea en blanco debajo de la línea actual (y coloque el cursor allí)
  • Ctrl + Shift + V : Ciclos de la anillo portapapeles

contornea: Reducir a las definiciones pero expandir regiones

¿Estás trabajando en una de esas tiendas que insiste en las regiones alrededor de todo , de manera que cuando se contrae a las definiciones, no se puede ver ningún código?

Lo que realmente necesita es un-pero-expand-regiones colapso a las definiciones de macro, como éste:

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

Ponga esto en un módulo de macro regular, asignarlo a una tecla de acceso rápido, y su código está de vuelta.

(Excepto ... si se trabaja con algunos individuos realmente nefastos que ponen regiones dentro de métodos, esto lamentablemente ampliar esos métodos. Si alguien conoce una manera de escribir esto para evitar que, no dude editar.)

Insertar GUID, ideal para el trabajo de WiX, añadir al menú como el botón o como tecla de acceso directo.

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

Organizar usings para todos los archivos .cs en una solución - Autor: 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

Contraer todos los nodos del panel de solución, muy útil sobre todo para grandes proyectos:

    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

Yo uso de Jeff FormatToHtml macros si yo voy a estar pegado un ejemplo de código en una entrada de blog o un correo electrónico.

Yo trabajo con monitores duales, y encuentro macro diseño de conmutación de Sharon (de un monitor 1 a un diseño de 2 monitor) totalmente inapreciable. Cuando tenga que estar haciendo referencia a una página web o de otro programa mientras se escribe un poco de código, Ctrl-Alt-1 para cambiar a un diseño de un monitor para las ventanas de Visual Studio. Una vez que haya terminado, Ctrl-Alt-2 para cambiar a su diseño de dos monitores y obtener todas las ventanas de atrás. Increíble!

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

No es un macro en sí mismo, pero útil:

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

Me asignan Ctrl-Shift-G a una macro que genera un GUID en formato de registro - esto es útil para la edición de IDL

Actualmente estoy trabajando en dos proyectos diferentes con diferentes estándares de codificación, uno que utiliza pestañas para inicios de línea y otra que utiliza espacios. Esta macro alternar entre los que estándar se utiliza basado en qué entorno se encuentra actualmente activo:

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

No podía dejar pasar esta pregunta sin mencionar éste . Incluso tiene un video para mostrar cómo instalar y usarlo. Esta macro simplemente le permite crear los archivos anidados en el explorador de soluciones (como resources.resx).

Editar: Se ha actualizado el enlace

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top