Comando de ventana inmediata de Visual Studio para Borrar todo

100

¿Existe un comando para borrar la ventana inmediata en Visual Studio?

Odio tener que agarrar el mouse para un menú de clic derecho allí; prefiero simplemente escribir "cls" o algo así.

Scott Ivey
fuente
14
¡No me di cuenta de que había un menú contextual!
JonnyRaa

Respuestas:

133

Para borrar la ventana inmediata, puede usar >cls, que es un alias de comando predefinido para >Edit.ClearAll.

El artículo de MSDN enumera todos los alias predefinidos y también puede definir los suyos propios. (Para VS 2010 y anteriores, alias personalizados están descritos en un artículo separado, sin embargo.) Escaneo a través, hay una gran cantidad de ellos, algunos de los cuales podrían incluso tener sus raíces en MS-DOS DEBUG.EXE (específicamente >d, >g, >p, >q, y> tvienen a la mente).


También vale la pena señalar, ya que solo se deben presionar dos teclas: Menú contextual> Borrar todo invoca el mismo comando y se puede navegar usando el teclado. En la ventana inmediata, puede pulsar context-menu, L.

Si no tiene una context-menutecla en su teclado (ya sabe, la que está entre right-alty right-ctrl), puede usar shift+ en su F10lugar.

lc.
fuente
1
Normalmente uso la clave de contexto cuando estoy en la oficina, pero he estado trabajando en una computadora portátil durante los últimos meses desde la oficina de un cliente y no tengo la clave de contexto en ella. Finalmente me molestó lo suficiente como para buscar una solución ...
Scott Ivey
1
El >es importante. No se me ocurrió una forma natural de hacerlo más explícito en la respuesta. Además, consulte Ventana inmediata en MSDN para obtener más sugerencias útiles.
Palec
50
>cls 

parece que lo hace por mí.

Martin Brown
fuente
17
  1. Coloque el cursor del mouse en la ventana Inmediato.
  2. Haga clic derecho en el mouse y seleccione "Borrar todo".
rossco78
fuente
12

Lo encontré...

"> Edit.ClearAll"

o

"> cls"

Scott Ivey
fuente
3

A continuación se explica cómo hacerlo en tiempo de ejecución:

  1. Haga referencia a los dlls de EnvDTE en su aplicación.

  2. Cree y luego use esta función según sea necesario.

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
usuario1330634
fuente
No funciona para mi. El error es: "Se produjo una excepción de primera oportunidad del tipo 'System.Runtime.InteropServices.COMException' en mscorlib.dll" al obtener el objeto de Marshal.
Mojtaba Rezaeian
Mi versión de Visual Studio 2012 es así que cambié VisualStudio.DTE.10.0a VisualStudio.DTE.11.0y funcionó. También aquí encontré una sintaxis más corta de la misma respuesta: http://stackoverflow.com/a/16873888/2721611
Mojtaba Rezaeian
1

Para Visual Studio 2012 utilizo:

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

para borrar automáticamente la ventana inmediata de los códigos (requiere agregar referencias DTE al proyecto). Si no funciona VisualStudio.DTE.8.0, intente VisualStudio.DTE.9.0, de ...acuerdo con su versión de Visual Studio.

Mojtaba Rezaeian
fuente
0

Usé la última respuesta casi literalmente y funciona, aunque quería volver a centrarme en dónde estaba. Aquí está la versión de C # ligeramente mejorada. Lo habilito con un interruptor de configuración.

#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! */ }

terminara si

Wade Hatler
fuente
1
Solo un gotcha; si tiene más de una instancia de VS abierta, la ley de Murphy dicta que borrará la otra y lo dejará tratando de averiguar por qué F ^ & $% **! no funciona. Al menos eso es lo que he estado haciendo durante los últimos 20 minutos.
Luc VdV
Y ahora funciona, pero creo que solo si VS es la ventana activa. Si otra ventana (por ejemplo, el proyecto que estoy depurando) está activa cuando se ejecuta este código, obtengo "Excepción de HRESULT: 0x80010001 (RPC_E_CALL_REJECTED)".
Luc VdV
Tienes razón. Si está ejecutando 2 instancias, tendrá que encontrar una forma racional de distinguir una de la otra. Imagino que tendrías que iterar todas las ventanas principales y buscar la que tenga el ZOrder más alto. Dejé de usar esto hace algún tiempo porque se me ocurrió una manera mejor. Escribí esto porque Visual Studio roba el mensaje de depuración. Para todas las demás herramientas, las ejecuto a través de DbgView (SysInternals). Escribí un proceso de back-end que los captura antes de que Visual Studio los robe y los reenvía a DbgView, así que volví a lo que quería en primer lugar.
Wade Hatler