Потрясающие макросы Visual Studio [закрываются]

Вы можете использовать map для перебора вложенных массивов, а затем использовать Math.min(...array) для каждого, чтобы получить минимум. Вывод из map представляет собой массив минимальных значений.

const arr = [[4, 8, 2], [7, 6, 42], [41, 77, 32, 9]];

const out = arr.map(a => Math.min(...a));

console.log(out);

67
задан 3 revs, 3 users 71% 13 October 2016 в 17:50
поделиться

12 ответов

Я раньше использовал много макросов в VS 2002/2003. Одним примером было бы создание региона - мне всегда нравится, когда мои классы разделены на следующие регионы - "Члены парламента, не занимающие официального поста", "Общественные собственности", "Открытые методы" и "Закрытые методы". Так, мне отобразили макрос на сочетание клавиш, которое создает эти регионы в любом новом файле класса.

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

0
ответ дан Cerebrus 24 November 2019 в 14:38
поделиться

Я использую Jeff макросы FormatToHtml , если я собираюсь быть вставкой примера кода в сообщение в блоге или электронного письма.

4
ответ дан Glenn Lang 24 November 2019 в 14:38
поделиться

Я отобразил ctrl-shift-G на макрос, который генерирует GUID в формате реестра - это полезно для редактирования IDL

1
ответ дан 1800 INFORMATION 24 November 2019 в 14:38
поделиться

Вставьте 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 файлов в решении - Исходный Автор: 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
8
ответ дан si618 24 November 2019 в 14:38
поделиться

Я добавляю кнопки на панели инструментов для следующих 3 макросов. Каждый возьмет в настоящее время выделенный текст в любом файле и погуглит его (или MSDN - он или 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
31
ответ дан Aardvark 24 November 2019 в 14:38
поделиться

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

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

4
ответ дан womp 24 November 2019 в 14:38
поделиться

Я не мог позволить этому вопросу обойтись без помощи упоминания этого. Это даже имеет видео, чтобы показать, как установить и использовать его. Этот макрос просто позволяет Вам создавать вложенные файлы в проводнике решения (как resources.resx).

Править: Обновленный ссылка

0
ответ дан 3 revs, 2 users 90% 24 November 2019 в 14:38
поделиться

Я очень часто использую следующие менее известные сочетания клавиш:

  • Ctrl + Enter : вставьте пустую строку над текущей строкой (и поместите туда курсор)
  • Ctrl + Shift + Enter : вставить пустую строку под текущей строкой (и поместить туда курсор)
  • Ctrl + Shift + V : циклически переключать кольцо буфера обмена
13
ответ дан 24 November 2019 в 14:38
поделиться

Показывать начальную страницу после закрытия решения (но не закрывать 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


Эти два вместе заставят вашу стартовую страницу скрываться, когда вы открываете решение. Когда вы закрываете решение, стартовая страница возвращается.

14
ответ дан 24 November 2019 в 14:38
поделиться

Схема: свернуть до определений, но расширить регионы

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

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

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

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

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

9
ответ дан 24 November 2019 в 14:38
поделиться

Показать продолжительность сборки в выходном окне

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

Вы можете изменить функцию 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
25
ответ дан 24 November 2019 в 14:38
поделиться

Свернуть все узлы панели решений, очень полезно, особенно для больших проекты:

    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
5
ответ дан 24 November 2019 в 14:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: