visual template studio snippets snippet para custom create crear code visual-studio visual-studio-macros

visual-studio - template - visual studio code typescript snippets



Awesome Visual Studio Macros (14)

Actualmente estoy trabajando en dos proyectos diferentes con diferentes estándares de codificación, uno que usa pestañas para los comienzos de línea y otro que usa espacios. Esta macro alternará entre qué estándar se utiliza en función de qué entorno está 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

Para una pequeña discusión en la comunidad, ¿cuáles son algunas de las macros esenciales de Visual Studio que utiliza?

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


Agregué botones en la barra de herramientas para las siguientes 3 macros. Cada uno tomará el texto seleccionado actualmente en cualquier archivo y lo buscará en google (o MSDN-it, o corrector ortográfico). Inventa un icono ingenioso para la barra de herramientas para obtener puntos de estilo adicionales.

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


Asigné ctrl-shift-G a una macro que genera un GUID en formato de registro, esto es útil para editar IDL


Insertar GUID, excelente para el trabajo de WiX, agregar al menú como botón o como atajo de teclado.

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


No es una macro en sí misma, pero es ú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


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

Editar: se actualizó el enlace


Solía ​​emplear muchas macros en VS 2002/2003. Un ejemplo sería la creación de una región: siempre me gusta que mis clases se dividan en las siguientes regiones: "Miembros privados", "Propiedades públicas", "Métodos públicos" y "Métodos privados". Por lo tanto, tengo una macro asignada a una tecla de método abreviado que crea estas regiones en cualquier archivo de clase nuevo.

Refactorizar el soporte en VS 2005/2008 (y la facilidad de agregar fragmentos de código comunes), así como el uso de complementos como DXCore y SlickEdit me permiten trabajar sin tener que crear demasiadas macros.


Trabajo con monitores duales, y considero que la macro de cambio de diseño de Sharon (desde un monitor a un diseño de 2 monitores) es totalmente invaluable. Cuando necesite hacer referencia a una página web u otro programa mientras escribe un poco de código, presione Ctrl-Alt-1 para cambiar a un diseño de monitor para sus ventanas de Visual Studio. Una vez que haya terminado, presione Ctrl-Alt-2 para cambiar a su diseño de dos monitores y recuperar todas sus ventanas. ¡Increíble!

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


Uso los siguientes accesos directos menos conocidos muy a menudo:

  • Ctrl + Enter : inserta una línea en blanco sobre la línea actual (y coloca el cursor allí)
  • Ctrl + Shift + Enter : inserta una línea en blanco debajo de la línea actual (y coloca el cursor allí)
  • Ctrl + Shift + V : recorre el anillo del portapapeles

Yo uso las macros FormatToHtml de Jeff si voy a pegar un ejemplo de código en una publicación de blog o un correo electrónico.


Contraiga todos los nodos del panel Solución, muy útil especialmente 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


Delinear: contraer las definiciones pero expandir las regiones

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

Lo que realmente necesita es una macro colapso-a-definiciones-pero-ampliar-regiones, como esta:

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

Coloque esto en un módulo de macros normal, asígnelo a una tecla de acceso rápido y su código está de vuelta.

(Excepto ... si trabajas con personas realmente nefastas que ponen regiones dentro de los métodos, desafortunadamente expandirán esos métodos. Si alguien sabe cómo escribir esto para evitar eso, siéntete libre de editarlo).


Mostrar la duración de la compilación en la ventana de resultados

Coloque este código en su módulo EnvironmentEvents. Esto escribirá la duración directamente en la ventana de compilación para cualquier acción en una solución (construir, reconstruir, limpiar, implementar).

Puede cambiar la función IsBuild para especificar las acciones para las que desea 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


Muestre la página de inicio después de cerrar una solución (pero mantenga abierto Visual Studio)

Coloque este código en su 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

Coloque este código en su 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 factores juntos harán que su página de inicio se oculte cuando abra una solución. Cuando cierra la solución, la Página de inicio vuelve.