Polecenie bezpośredniego okna programu Visual Studio do czyszczenia wszystkiego


100

Czy istnieje polecenie wyczyszczenia bezpośredniego okna w programie Visual Studio?

Nienawidzę konieczności chwytania myszy za menu prawego przycisku myszy - wolałbym po prostu wpisać „cls” czy coś w tym stylu.


14
nie zdawałem sobie sprawy, że istnieje menu prawego przycisku myszy!
JonnyRaa

Odpowiedzi:


133

Aby wyczyścić natychmiastowe okno, można użyć >cls, który jest predefiniowany polecenie alias do >Edit.ClearAll.

Artykuł MSDN zawiera listę wszystkich predefiniowanych aliasów, ale możesz także zdefiniować własne. (Dla VS 2010 i wcześniej, niestandardowe aliasy są opisane w osobnym artykule, choć.) Skanowanie przez, istnieje cały zabił z nich, z których niektóre mogą nawet mieć swoje korzenie w MS-DOS (konkretnie Debug.exe >d, >g, >p, >q, i> tprzyjdą na myśl).


Warto również zauważyć, że wystarczy nacisnąć tylko dwa klawisze: Menu kontekstowe> Wyczyść wszystko wywołuje to samo polecenie i można po nim nawigować za pomocą klawiatury. W najbliższym okienku, można nacisnąć context-menu, L.

Jeśli nie masz context-menuklawisza na klawiaturze (wiesz, ten między right-alta right-ctrl), możesz zamiast tego użyć shift+ F10.


1
Zwykle używam klawisza kontekstowego, gdy jestem w biurze - ale od kilku miesięcy pracuję na laptopie w biurze klienta i nie mam na nim klucza kontekstowego. W końcu zmartwiło mnie to na tyle, że szukałem rozwiązania ...
Scott Ivey

1
To >jest ważne. Nie mogłem wymyślić naturalnego sposobu, aby uściślić to w odpowiedzi. Więcej przydatnych wskazówek można znaleźć w sekcji Immediate Window w witrynie MSDN.
Palec


17
  1. Umieść kursor myszy w oknie bezpośrednim.
  2. Kliknij prawym przyciskiem myszy i wybierz „Wyczyść wszystko”.


3

Oto jak to zrobić w czasie wykonywania:

  1. Odwołaj się do bibliotek DLL EnvDTE w swojej aplikacji.

  2. Utwórz, a następnie użyj tej funkcji, jeśli to konieczne.

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

Nie działa dla mnie. Błąd: „Wystąpił wyjątek pierwszej szansy typu„ System.Runtime.InteropServices.COMException ”w pliku mscorlib.dll” podczas pobierania obiektu z Marshal.
Mojtaba Rezaeian,

Moja wersja visual studio 2012, więc zmienił VisualStudio.DTE.10.0się VisualStudio.DTE.11.0i to zadziałało. Również tutaj znalazłem krótszą składnię tej samej odpowiedzi: http://stackoverflow.com/a/16873888/2721611
Mojtaba Rezaeian,

1

Do Visual Studio 2012 używam:

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

aby automatycznie wyczyścić natychmiastowe okno z kodów (wymaga dodania odniesień DTE do projektu). Jeśli to nie zadziała VisualStudio.DTE.8.0, spróbuj VisualStudio.DTE.9.0, ...zgodnie z wersją Twojego programu Visual Studio.


0

Użyłem ostatniej odpowiedzi prawie dosłownie i działa, chociaż chciałem skupić się z powrotem na tym, gdzie to było. Oto bardzo nieznacznie ulepszona wersja C #. Włączam to za pomocą przełącznika konfiguracyjnego.

#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
Tylko gotcha; jeśli masz otwartą więcej niż jedną instancję VS, prawo Murphy'ego nakazuje wyczyścić drugą i sprawi, że będziesz próbował dowiedzieć się, dlaczego F ^ & $% **! to nie działa. Przynajmniej to robię przez ostatnie 20 minut.
Luc VdV

A teraz działa, ale myślę, że tylko jeśli VS jest aktywnym oknem. Jeśli inne okno (na przykład projekt, który debuguję) jest aktywne podczas wykonywania tego kodu, wyświetlany jest komunikat „Wyjątek od HRESULT: 0x80010001 (RPC_E_CALL_REJECTED)”.
Luc VdV

Masz rację. Jeśli uruchamiasz 2 instancje, musisz wypracować racjonalny sposób na odróżnienie jednej od drugiej. Wyobrażam sobie, że musiałbyś iterować wszystkie główne okna i sprawdzić, które ma najwyższy ZOrder. Zrezygnowałem z tego jakiś czas temu, bo wymyśliłem lepszy sposób. Napisałem to, ponieważ Visual Studio kradnie komunikat debugowania. W przypadku wszystkich innych narzędzi uruchamiam je przez DbgView (SysInternals). Napisałem proces zaplecza, który przechwytuje je, zanim Visual Studio je ukradnie i przekaże do DbgView, więc wróciłem do tego, czego chciałem w pierwszej kolejności.
Wade Hatler,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.