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.

Scott Ivey
źródło
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.

lc.
źródło
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
50
>cls 

wydaje się, że robi to dla mnie.

Martin Brown
źródło
17
  1. Umieść kursor myszy w oknie bezpośrednim.
  2. Kliknij prawym przyciskiem myszy i wybierz „Wyczyść wszystko”.
rossco78
źródło
12

znalazłem to ...

"> Edit.ClearAll"

lub

„> cls”

Scott Ivey
źródło
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
user1330634
źródło
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.

Mojtaba Rezaeian
źródło
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

Wade Hatler
źródło
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,