Comando della finestra immediata di Visual Studio per Cancella tutto


100

Esiste un comando per cancellare la finestra immediata in Visual Studio?

Odio dover afferrare il mouse per un menu di scelta rapida lì - preferirei semplicemente digitare "cls" o qualcosa del genere.


14
non si rendeva conto che c'era un menu di scelta rapida!
JonnyRaa

Risposte:


133

Per cancellare la finestra immediata, è possibile utilizzare >cls, che è un alias di comando predefinito per >Edit.ClearAll.

L'articolo di MSDN elenca tutti gli alias predefiniti e puoi anche definirne uno personalizzato. (Per VS 2010 e in precedenza, alias personalizzati sono descritti in un articolo a parte, però.) La scansione attraverso, c'è una grande quantità di loro, alcune delle quali potrebbero anche avere le loro radici in MS-DOS DEBUG.EXE (in particolare >d, >g, >p, >q, e> tvieni in mente).


Vale anche la pena notare, poiché sono solo due i tasti da premere: Il menu contestuale> Cancella tutto richiama lo stesso comando e può essere navigato utilizzando la tastiera. Nella finestra immediata, è possibile premere context-menu, L.

Se non hai un context-menutasto sulla tastiera (sai, quello tra right-alte right-ctrl), puoi invece usare shift+ F10.


1
Normalmente uso il tasto contestuale quando sono in ufficio, ma negli ultimi mesi ho lavorato su un laptop dall'ufficio di un cliente e non ho il tasto contestuale su di esso. Alla fine mi ha infastidito abbastanza da cercare una soluzione ...
Scott Ivey

1
Il >è importante. Impossibile pensare a un modo naturale per renderlo più esplicito nella risposta. Inoltre, vedere Finestra immediata su MSDN per suggerimenti più utili.
Palec


17
  1. Posiziona il cursore del mouse nella finestra immediata.
  2. Fare clic con il tasto destro del mouse e selezionare "Cancella tutto".


3

Ecco come farlo in fase di esecuzione:

  1. Fare riferimento alle DLL EnvDTE nell'applicazione.

  2. Creare e quindi utilizzare questa funzione secondo necessità.

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

Non funziona per me. L'errore è: "Si è verificata una prima eccezione di tipo" System.Runtime.InteropServices.COMException "in mscorlib.dll" durante il recupero dell'oggetto da Marshal.
Mojtaba Rezaeian

La mia versione di Visual Studio 2012 è quindi l'ho cambiato VisualStudio.DTE.10.0per VisualStudio.DTE.11.0e ha funzionato. Anche qui ho trovato una sintassi più breve della stessa risposta: http://stackoverflow.com/a/16873888/2721611
Mojtaba Rezaeian

1

Per visual studio 2012 utilizzo:

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

per cancellare automaticamente la finestra immediata dai codici (richiede l'aggiunta di riferimenti DTE al progetto). Se non funziona VisualStudio.DTE.8.0, prova VisualStudio.DTE.9.0, ...secondo la versione del tuo studio visivo.


0

Ho usato l'ultima risposta quasi letteralmente e funziona, anche se volevo concentrarmi di nuovo su dove si trovava. Ecco la versione C # leggermente migliorata. Lo abilito con un interruttore di configurazione.

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

finisci se


1
Solo un trucco; se hai più di un'istanza di VS aperta, la legge di Murphy impone che cancellerà l'altra e ti lascerà cercare di capire perché F ^ & $% **! non funziona. Almeno questo è quello che ho fatto negli ultimi 20 minuti.
Luc VdV

E ora funziona, ma penso solo se VS è la finestra attiva. Se un'altra finestra (ad esempio il progetto su cui sto eseguendo il debug) è attiva quando viene eseguito questo codice, ottengo "Eccezione da HRESULT: 0x80010001 (RPC_E_CALL_REJECTED)".
Luc VdV

Hai ragione. Se stai eseguendo 2 istanze, dovresti trovare un modo razionale per distinguere l'una dall'altra. Immagino che dovresti iterare tutte le finestre principali e controllare quella con lo ZOrder più alto. Ho smesso di usarlo qualche tempo fa perché ho trovato un modo migliore. Ho scritto questo perché Visual Studio ruba il messaggio di debug. Per tutti gli altri strumenti li eseguo tramite DbgView (SysInternals). Ho scritto un processo di back-end che li acquisisce prima che Visual Studio li rubi e li inoltra a DbgView, quindi sono tornato a quello che volevo in primo luogo.
Wade Hatler
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.