Comando de janela imediata do Visual Studio para Limpar tudo


100

Existe um comando para limpar a janela imediata no Visual Studio?

Eu odeio ter que pegar o mouse para clicar com o botão direito do mouse no menu - prefiro apenas digitar "cls" ou algo assim.


14
não sabia que havia um menu do botão direito!
JonnyRaa

Respostas:


133

Para limpar a janela imediata, você pode usar >cls, que é um alias de comando predefinido para >Edit.ClearAll.

O artigo do MSDN lista todos os aliases predefinidos e você também pode definir o seu próprio. (Para VS 2010 e anteriores, aliases personalizados são descritos em um artigo separado, no entanto.) Digitalizar através, há toda uma série deles, alguns dos quais podem até ter suas raízes na MS-DOS DEBUG.EXE (especificamente >d, >g, >p, >q, e> tvêm à mente).


Também vale a pena notar, visto que são apenas duas teclas para pressionar: Menu de contexto> Limpar tudo invoca o mesmo comando e pode ser navegado usando o teclado. Na janela imediata, você pode pressionar context-menu, L.

Se você não tiver uma context-menutecla no teclado (você sabe, aquela entre right-alte right-ctrl), você pode usar shift+ em F10vez disso.


1
Eu normalmente uso a chave de contexto quando estou no escritório - mas tenho trabalhado em um laptop nos últimos meses em um escritório de clientes e não tenho a chave de contexto nela. Finalmente me incomodou o suficiente para procurar uma solução ...
Scott Ivey

1
O >é importante. Não consegui pensar em uma maneira natural de torná-lo mais explícito na resposta. Além disso, consulte a janela Immediate no MSDN para obter mais dicas úteis.
Palec,


17
  1. Coloque o cursor do mouse na janela imediata.
  2. Clique com o botão direito do mouse e selecione "Limpar tudo".


3

Aqui está como fazer isso em tempo de execução:

  1. Consulte as dlls EnvDTE em seu aplicativo.

  2. Crie e use esta função conforme necessário.

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

Não está funcionando para mim. O erro é: "Uma exceção de primeira chance do tipo 'System.Runtime.InteropServices.COMException' ocorreu em mscorlib.dll" ao obter o objeto do Marshal.
Mojtaba Rezaeian

Minha versão de estúdio visual é 2012, então mudei VisualStudio.DTE.10.0para VisualStudio.DTE.11.0e funcionou. Também aqui encontrei uma sintaxe mais curta para a mesma resposta: http://stackoverflow.com/a/16873888/2721611
Mojtaba Rezaeian

1

Para o Visual Studio 2012, eu uso:

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 limpar automaticamente a janela imediata dos códigos (requer adicionar referências DTE ao projeto). Se não funcionar VisualStudio.DTE.8.0, tente VisualStudio.DTE.9.0, de ...acordo com sua versão do estúdio visual.


0

Eu usei a última resposta quase literalmente e funcionou, embora eu quisesse o foco de volta onde estava. Aqui está a versão C # ligeiramente melhorada. Eu habilito com um switch de configuração.

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

fim se


1
Apenas uma pegadinha; se você tiver mais de uma instância de VS aberta, a lei de Murphy dita que irá limpar a outra e deixá-lo tentando descobrir por que F ^ & $% **! não funciona. Pelo menos é o que tenho feito nos últimos 20 minutos.
Luc VdV

E agora funciona, mas acho que apenas se VS for a janela ativa. Se outra janela (por exemplo, o projeto que estou depurando) estiver ativa quando este código for executado, recebo "Exceção de HRESULT: 0x80010001 (RPC_E_CALL_REJECTED)".
Luc VdV

Você está certo. Se você estiver executando 2 instâncias, terá que descobrir uma maneira racional de diferenciar uma da outra. Eu imagino que você teria que iterar todas as janelas principais e verificar aquela com o ZOrder mais alto. Eu parei de usar isso há algum tempo porque descobri uma maneira melhor. Eu escrevi isso porque o Visual Studio rouba a mensagem de depuração. Para todas as outras ferramentas, eu as executo por meio do DbgView (SysInternals). Eu escrevi um processo de back-end que os captura antes que o Visual Studio os roube e os encaminha para o DbgView, então voltei ao que eu queria em primeiro lugar.
Wade Hatler de
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.