2009-02-07 12 views
67

एक छोटी सा समुदाय चर्चा के लिए, आपके द्वारा उपयोग किए जाने वाले कुछ आवश्यक विजुअल स्टूडियो मैक्रोज़ क्या हैं?विस्मयकारी विजुअल स्टूडियो मैक्रोज़

मैंने अभी उनके बारे में सीखना शुरू कर दिया है, और यह जानना चाहते हैं कि आप में से कुछ क्या नहीं रह सकते हैं।

+34

इस प्रश्न को बंद होने के साथ और असहमत नहीं हो सकता है। यह बेहद रचनात्मक और एक महान सवाल है। –

+6

मैं सहमत हूं। यह एक उपयोगी विषय था और इसमें उत्तर है जो मैं – SturmUndDrang

+1

के लिए देख रहा था वीएस 2012 में, मैक्रो संपादक को हटा दिया गया है। यह बुरी खबर है। अच्छी खबर यह है कि, आप ऐड-इन बनाकर मूल रूप से वही कोड अपनी पसंद की भाषा में उपयोग कर सकते हैं। एक विजुअल स्टूडियो ऐड-इन प्रोजेक्ट बनाएं, जिसमें आपको आवश्यक बॉयलरप्लेट कोड शामिल होगा। जब आप परीक्षण करते हैं, तो वीएस 2012 आपके एड-इन इंस्टॉल के साथ वीएस 2012 का एक अलग उदाहरण फायर करेगा। जब आप वास्तव में तैनाती के लिए तैयार हों, तो 'मेरे दस्तावेज़ \ विजुअल स्टूडियो 2012 \ Addins' पर जाएं। वहां, आपकी परियोजना 'जो कुछ भी' के लिए, अपने ऐड-इन के लिए 'whatever.dll', साथ ही मुख्य परियोजना निर्देशिका से' जो भी। AddIn' फ़ाइल डालें। –

उत्तर

0

संपादन मैं वी.एस. 2002/2003 में मैक्रो का एक बहुत काम करने के लिए इस्तेमाल के लिए उपयोगी है। एक उदाहरण क्षेत्र निर्माण होगा - मैं हमेशा अपने वर्गों को निम्नलिखित क्षेत्रों में विभाजित करना चाहता हूं - "निजी सदस्य", "सार्वजनिक गुण", "सार्वजनिक तरीके" और "निजी विधियां"। इसलिए, मेरे पास एक शॉर्टकट कुंजी पर मैक्रो मैप किया गया है जो इन क्षेत्रों को किसी भी नई कक्षा फ़ाइल में बनाता है।

वीएस 2005/2008 (और सामान्य कोड स्निपेट जोड़ने की सुविधा) में समर्थन को पुन: सक्रिय करने के साथ-साथ डीएक्सकोर और स्लेकएडिट जैसे एडिन के उपयोग से मुझे बहुत सारे मैक्रोज़ बनाने के बिना काम करने की अनुमति मिलती है।

+45

स्वीकार्य उत्तर के लिए एक अजीब विकल्प है। –

+2

मैंने अजनबी को देखा है। तारीख के अनुसार उत्तर क्रमबद्ध करें और आप तर्क देखेंगे। ;-) – Cerebrus

+1

इसे ज्यादा समय नहीं दिया, क्या वह? –

1

मैं उस मैक्रो रजिस्ट्री प्रारूप में एक GUID उत्पन्न करने के लिए Ctrl-Shift-जी मैप किया - इस आईडीएल

4

मैं जेफ के FormatToHtml मैक्रोज़ का उपयोग करता हूं यदि मैं किसी ब्लॉग पोस्ट या ईमेल में कोड उदाहरण चिपका रहा हूं।

8

वाईआईएक्स काम के लिए अच्छा, 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 फ़ाइलों के लिए usings व्यवस्थित करें - मूल लेखक: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 
31

मैं निम्नलिखित 3 मैक्रोज़ के लिए टूलबार पर बटन जोड़ता हूं। प्रत्येक व्यक्ति वर्तमान में चयनित फ़ाइल को किसी भी फाइल में ले जाएगा और इसे Google (या एमएसडीएन-इट, या स्पेल-चेक-इट) करेगा। अतिरिक्त स्टाइल-पॉइंट्स के लिए टूलबार के लिए निफ्टी आइकन बनाएं।

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 
+0

अब एक वर्तनी जांच एक्सटेंशन है, बीटीडब्ल्यू। –

4

मैं दोहरी पर नज़र रखता है के साथ काम है, और मैं शेरोन की लेआउट-स्विचिंग मैक्रो (एक 1 की निगरानी से एक 2 मॉनिटर लेआउट के लिए) पूरी तरह से अमूल्य पाते हैं। जब आपको थोड़ा सा कोड टाइप करते समय किसी वेब पेज या अन्य प्रोग्राम का संदर्भ देने की आवश्यकता होती है, तो अपने विजुअल स्टूडियो विंडो के लिए एक मॉनीटर लेआउट पर स्विच करने के लिए Ctrl-Alt-1। एक बार पूरा हो जाने के बाद, अपने दो मॉनीटर लेआउट पर स्विच करने के लिए Ctrl-Alt-2 और अपनी सभी विंडो वापस प्राप्त करें। बहुत बढ़िया!

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

0

मैं इस सवाल this one का उल्लेख किए बिना जाने नहीं कर सकता है। यह दिखाने के लिए एक वीडियो भी है कि इसे कैसे स्थापित करें और इसका उपयोग कैसे करें। यह मैक्रो आपको समाधान एक्सप्लोरर (जैसे resource.resx) में घोंसला वाली फ़ाइलों को बनाने की अनुमति देता है।

संपादित करें: अपडेट किया गया लिंक

+0

लिंक टूट गया, शायद अपडेट करें? – Maslow

+0

धन्यवाद maslow, मैंने लिंक –

13

मैं बहुत बार निम्नलिखित कम प्रसिद्ध शॉर्टकट का उपयोग:

  • Ctrl + दर्ज करें: वर्तमान रेखा से ऊपर एक रिक्त पंक्ति सम्मिलित करें (और वहाँ कर्सर रखें)
  • Ctrl + Shift + दर्ज करें: वर्तमान रेखा से नीचे एक रिक्त पंक्ति सम्मिलित करें (और जगह वहाँ कर्सर)
  • Ctrl + Shift + V: साइकिल clipboard ring
+0

को अपडेट किया है क्या आप हमें बता सकते हैं कि उन्हें क्या करना है? .. – levesque

+1

गरीब आदमी के वीआईएम – kizzx2

14

आरम्भ पृष्ठ दिखाती है कि आप एक समाधान बंद (लेकिन दृश्य स्टूडियो खुला रखने)

अपने EnvironmentEvents मॉड्यूल में इस कोड डाल के बाद:

आप के रूप में खोलने के बाद
Private Sub SolutionEvents_AfterClosing() Handles SolutionEvents.AfterClosing 
    DTE.ExecuteCommand("View.StartPage") 
End Sub 


आरम्भ पृष्ठ छुपाएं olution अपने 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 


इन दोनों को एक साथ आपके प्रारंभ पृष्ठ को खुद को छिपाने के लिए जब आप एक समाधान को खोलने का कारण होगा। जब आप समाधान बंद करो, आरंभ पृष्ठ वापस आता है।

+11

की तरह लगता है कि वास्तव में प्रारंभ पृष्ठ की आवश्यकता कौन है? – kizzx2

+1

प्रारंभ पृष्ठ लंगड़ा – Pacerier

+2

वीएस 2010 ने प्रारंभ पृष्ठ पर "प्रोजेक्ट लोड के बाद बंद पृष्ठ" विकल्प जोड़ा, इसलिए बंद मैक्रो की अब आवश्यकता नहीं है। उनके पास यह है और "स्टार्टअप पर पेज दिखाएं", लेकिन मेरे लिए अज्ञात अजीब कारणों के लिए, "समाधान बंद होने के बाद पृष्ठ दिखाएं" विकल्प नहीं है, जो "प्रोजेक्ट लोड के बाद बंद पृष्ठ" के विपरीत मेल खाता है। प्रारंभ पृष्ठ की आवश्यकता किसके लिए है? मैं हालिया परियोजनाओं को पिन करने के लिए इसका इस्तेमाल करता हूं। AFAIK, यह एकमात्र ऐसा स्थान है जहां आप हालिया परियोजनाओं/समाधानों (2010 में) को पिन कर सकते हैं। आप फ़ाइल -> हालिया प्रोजेक्ट्स और सॉल्यूशंस मेनू में आइटम पिन नहीं कर सकते हैं, इसलिए यह दीर्घकालिक उपयोग के लिए विश्वसनीय नहीं है। – minnow

9

को रेखांकित करते: परिभाषाओं को संक्षिप्त करें लेकिन विस्तार क्षेत्रों

आप उन दुकानों कि सब कुछ के आसपास के क्षेत्रों पर जोर से एक में काम कर रहे, ताकि जब आप परिभाषाओं को पतन आपको कोई कोड नहीं देख सकते हैं ?

क्या तुम सच में की जरूरत है इस तरह का पतन करने वाली परिभाषाओं बल्कि विस्तार क्षेत्रों मैक्रो है,:

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 

एक नियमित रूप से मैक्रो मॉड्यूल में इस रखो, एक गर्म कुंजी के लिए असाइन करें, और अपने कोड वापस आ गया है।

(सिवाय ... यदि आप वास्तव में कुछ नापाक व्यक्तियों, जो क्षेत्रों डाल अंदर तरीकों के साथ काम करते हैं, इस दुर्भाग्य से उन तरीकों का विस्तार होगा। किसी को भी एक तरह से यह है कि से बचने के लिए, संपादित करने के लिए स्वतंत्र लग रहा है लिखने के लिए जानता है।)

25

आउटपुट खिड़की

रखें अपने 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 
+4

मेरे पास कुछ समान है, लेकिन मैं सोच रहा था कि लगातार चलने वाला कुल तरीका बनाने का कोई तरीका है, इसलिए मैं ट्रैक कर सकता हूं कि मैं कितना जीवन व्यतीत करता हूं। – Dolphin

+0

निश्चित रूप से, बस समय लें और इसे डेटाबेस में संग्रहीत करें। जहां तक ​​मुझे पता है, आप मैक्रो में बहुत अधिक कोड चला सकते हैं। तो बस नवीनतम टाइमस्पैन को स्टोर करने के लिए कोड लिखें, और उसके बाद कुल पुनर्प्राप्त करने के लिए और इसके बजाय प्रदर्शित करें। –

+0

पार्टी के लिए बहुत देर हो चुकी है, लेकिन इस के लिए आपको धन्यवाद देना चाहता था क्योंकि यह वही है जो मैं ढूंढ रहा था। एक sidenote पर: आप 'ow.OutputWindowPanes.Item (" बिल्ड ") का उपयोग कर सकते हैं। 'प्रत्येक के लिए' के ​​बजाय आउटपुटस्ट्रिंग (संदेश) '। – Chrono

5

संक्षिप्त समाधान पैनल के सभी नोड्स, विशेष रूप से बड़ी परियोजनाओं के लिए बहुत उपयोगी:

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 
2

नहीं अपने आप ही एक मैक्रो, लेकिन उपयोगी:

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 
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 
संबंधित मुद्दे