Visual Studio-Sofortfensterbefehl für Alle löschen


100

Gibt es einen Befehl zum Löschen des unmittelbaren Fensters in Visual Studio?

Ich hasse es, die Maus für ein Rechtsklick-Menü dort greifen zu müssen - würde lieber einfach "cls" oder so etwas eingeben.


14
Ich wusste nicht, dass es ein Kontextmenü gibt!
JonnyRaa

Antworten:


133

Zum Löschen des unmittelbaren Fensters können Sie >clseinen vordefinierten Befehlsalias verwenden für verwenden>Edit.ClearAll .

Der MSDN-Artikel listet alle vordefinierten Aliase auf, und Sie können auch Ihre eigenen definieren. (Für VS 2010 und früher, benutzerdefinierte Aliase werden in einem separaten Artikel beschrieben, though.) Scannen durch, gibt es eine ganze Reihe von ihnen, von denen einige sogar ihre Wurzeln in MS-DOS DEBUG.EXE haben könnte (speziell >d, >g, >p, >q, und>t in den Sinn kommen).


Ebenfalls erwähnenswert, da nur zwei Tasten gedrückt werden müssen: Kontextmenü> Alle löschen ruft denselben Befehl auf und kann über die Tastatur navigiert werden. Im unmittelbaren Fenster können Sie drücken context-menu,L .

Wenn Sie keine context-menuTaste auf Ihrer Tastatur haben (Sie wissen, die zwischen right-altund right-ctrl), können Sie stattdessen shift+ F10verwenden.


1
Normalerweise verwende ich den Kontextschlüssel, wenn ich im Büro bin - aber ich habe in den letzten Monaten von einem Kundenbüro aus an einem Laptop gearbeitet, und ich habe keinen Kontextschlüssel darauf. Es hat mich schließlich genug
Scott Ivey

1
Das >ist wichtig. Konnte mir keinen natürlichen Weg vorstellen, um es in der Antwort deutlicher zu machen. Siehe auch Direkt - Fenster auf MSDN für mehr nützliche Tipps.
Palec


17
  1. Platzieren Sie den Mauszeiger im Direktfenster.
  2. Klicken Sie mit der rechten Maustaste und wählen Sie "Alle löschen".


3

So geht's zur Laufzeit:

  1. Verweisen Sie auf die EnvDTE-DLLs in Ihrer Anwendung.

  2. Erstellen Sie diese Funktion und verwenden Sie sie nach Bedarf.

Public Sub ClearImmediateWindow()
  Try
    Dim vsWindowKindImmediateWindow As String _ 
          = "{ECB7191A-597B-41F5-9843-03A4CF275DDE}"
    Try
      Dim obj As Object = System.Runtime.InteropServices.Marshal._ 
                          GetActiveObject("VisualStudio.DTE.10.0")
      If obj IsNot Nothing Then
        Dim DTE2 As EnvDTE80.DTE2 = CType(obj, EnvDTE80.DTE2)
        For Each wndw As EnvDTE.Window In DTE2.Windows
          If wndw.ObjectKind = vsWindowKindImmediateWindow Then
            wndw.Activate()
            DTE2.ExecuteCommand("Edit.ClearAll")
            Exit For
          End If
        Next
      End If
    Catch comEx As COMException
      ' Not running from within the VS IDE?
    Catch ex As Exception
      Throw ex
    End Try
  Catch ex As Exception
    ' Handle this as you desire.
  End Try
End Sub
  End Sub

Ich arbeite nicht für mich. Fehler ist: "Eine erste zufällige Ausnahme vom Typ 'System.Runtime.InteropServices.COMException' ist in mscorlib.dll aufgetreten", als das Objekt vom Marshal abgerufen wurde .
Mojtaba Rezaeian

Meine Visual Studio - Version ist 2012 also habe ich VisualStudio.DTE.10.0auf VisualStudio.DTE.11.0und es funktionierte. Auch hier fand ich eine kürzere Syntax der gleichen Antwort: http://stackoverflow.com/a/16873888/2721611
Mojtaba Rezaeian

1

Für Visual Studio 2012 verwende ich:

Public Sub ClearImmediateWindow()
    Dim dte As EnvDTE80.DTE2 = Marshal.GetActiveObject("VisualStudio.DTE.11.0")
    dte.Windows.Item("Immediate Window").Activate() 'Activate Immediate Window  
    dte.ExecuteCommand("Edit.SelectAll")
    dte.ExecuteCommand("Edit.ClearAll")
    Marshal.ReleaseComObject(dte)
End Sub

um das sofortige Fenster automatisch aus den Codes zu löschen (erfordert das Hinzufügen von DTE-Referenzen zum Projekt). Wenn es nicht funktioniert versuchen VisualStudio.DTE.8.0, VisualStudio.DTE.9.0, ...entsprechend Ihrer Visual Studio - Version.


0

Ich habe die letzte Antwort fast wörtlich verwendet und sie funktioniert, obwohl ich mich wieder darauf konzentrieren wollte, wo sie war. Hier ist die leicht verbesserte C # -Version. Ich aktiviere es mit einem Konfigurationsschalter.

#if DEBUG
    if (GetIni("Debug", "ClearImmediateWindow", true)) {
        try {
            var dte = (EnvDTE.DTE) Marshal.GetActiveObject("VisualStudio.DTE.15.0");
            var me  = dte.ActiveWindow;
            dte.Windows.Item("Immediate Window").Activate();
            dte.ExecuteCommand("Edit.ClearAll");
            me.Activate();
        }
        catch { /* Meh! */ }

endif


1
Nur ein Gotcha; Wenn Sie mehr als eine Instanz von VS geöffnet haben, schreibt Murphys Gesetz vor, dass die andere gelöscht wird und Sie versuchen herauszufinden, warum die F ^ & $% **! es funktioniert nicht Zumindest habe ich das in den letzten 20 Minuten getan.
Luc VdV

Und jetzt funktioniert es, aber ich denke nur, wenn VS das aktive Fenster ist. Wenn bei der Ausführung dieses Codes ein anderes Fenster (z. B. das Projekt, das ich debugge) aktiv ist, wird "Ausnahme von HRESULT: 0x80010001 (RPC_E_CALL_REJECTED)" angezeigt.
Luc VdV

Du hast recht. Wenn Sie zwei Instanzen ausführen, müssen Sie einen rationalen Weg finden, um eine von der anderen zu unterscheiden. Ich stelle mir vor, Sie müssten alle Hauptfenster durchlaufen und nach dem Fenster mit der höchsten ZOrder suchen. Ich habe vor einiger Zeit damit aufgehört, weil ich einen besseren Weg gefunden habe. Ich habe dies geschrieben, weil Visual Studio die Debug-Nachricht stiehlt. Für alle anderen Tools führe ich sie über DbgView (SysInternals) aus. Ich habe einen Back-End-Prozess geschrieben, der sie erfasst, bevor Visual Studio sie stiehlt, und sie an DbgView weiterleitet, sodass ich zunächst zu dem zurückgekehrt bin, was ich wollte.
Wade Hatler
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.