web-dev-qa-db-ja.com

素晴らしいVisual Studioマクロ

小規模なコミュニティディスカッションで、使用するVisual Studioの重要なマクロは何ですか?

私は彼らについて学び始めたばかりで、あなた方の何人かはそれなしでは生きていけないものを聞きたいです。

67
BBetances

私はVS 2002/2003で多くのマクロを使用していました。 1つの例としては、リージョンの作成があります。クラスは常に「プライベートメンバー」、「パブリックプロパティ」、「パブリックメソッド」、および「プライベートメソッド」のリージョンに分割されるのが好きです。そのため、新しいクラスファイルにこれらの領域を作成するショートカットキーにマップされたマクロがあります。

VS 2005/2008のリファクタリングサポート(および一般的なコードスニペットを追加する機能)、およびDXCoreやSlickEditなどのアドインの使用により、あまり多くのマクロを作成しなくても作業できます。

0
Cerebrus

次の3つのマクロのツールバーにボタンを追加します。それぞれが任意のファイルで現在選択されているテキストを取得し、グーグルで検索します(または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
31
Aardvark

ビルド期間を出力ウィンドウに表示する

このコードを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
25
Ryan Lundy

ソリューションを閉じた後に開始ページを表示します(ただし、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


これら2つを組み合わせると、ソリューションを開いたときにスタートページが非表示になります。ソリューションを閉じると、スタートページに戻ります。

14
Ryan Lundy

次のあまり知られていないショートカットを頻繁に使用します。

  • Ctrl + Enter:現在の行の上に空白行を挿入します(そしてそこにカーソルを置きます)
  • Ctrl + Shift + Enter:現在の行の下に空白行を挿入します(そしてそこにカーソルを置きます)
  • Ctrl + Shift + Vクリップボードリング
13
Sam Harwell

アウトライン:定義に折りたたみますが、領域を展開します

everythingの周りの地域を主張しているお店の1つで働いているので、定義に折りたたまれたときにコードが表示されませんか?

本当に必要なのは、次のような定義領域を縮小して展開するマクロです:

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

これを通常のマクロモジュールに入れ、ホットキーに割り当てると、コードが戻ります。

(ただし、リージョンinsideメソッドを配置する本当に悪名高い個人と作業する場合は、残念ながらこれらのメソッドを拡張します。これを避けて書いてください。自由に編集してください。)

9
Ryan Lundy

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
8
si618

すべてのノードを折りたたむソリューションパネルの、特に大きなプロジェクトに非常に便利です:

    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
Olivier Payen

私はデュアルモニターを使用していますが、Sharonのレイアウト切り替えマクロ(1モニターから2モニターレイアウトへ)は非常に貴重です。少しのコードを入力しながらWebページまたは他のプログラムを参照する必要がある場合は、Ctrl-Alt-1を押してVisual Studioウィンドウの1つのモニターレイアウトに切り替えます。完了したら、Ctrl-Alt-2で2つのモニターレイアウトに切り替え、すべてのウィンドウを元に戻します。驚くばかり!

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

4
womp

ブログの投稿やメールにコード例を貼り付ける場合は、Jeffの FormatToHtml マクロを使用します。

4
Glenn Lang

マクロ自体ではありませんが、便利です。

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
2
Benjol

現在、異なるコーディング標準を持つ2つの異なるプロジェクトに取り組んでいます。1つは行頭のタブを使用し、もう1つはスペースを使用します。このマクロは、現在アクティブな環境に基づいて、使用される標準を切り替えます。

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
1
yanigisawa

Ctrl-shift-Gをレジストリ形式でGUIDを生成するマクロにマッピングしました-これはIDLの編集に役立ちます

1

this one に言及せずに、この質問を手放すことはできませんでした。それをインストールして使用する方法を示すビデオもあります。このマクロでは、ソリューションエクスプローラーでネストされたファイル(resources.resxなど)を作成できます。

編集:リンクを更新しました

0
Preet Sangha