Commande de fenêtre immédiate Visual Studio pour Effacer tout


100

Existe-t-il une commande pour effacer la fenêtre immédiate dans Visual Studio?

Je déteste avoir à saisir la souris pour un menu contextuel - je préfère taper simplement "cls" ou quelque chose comme ça.


14
Je n'ai pas réalisé qu'il y avait un menu contextuel!
JonnyRaa

Réponses:


133

Pour effacer la fenêtre immédiate, vous pouvez utiliser >cls, qui est un alias de commande prédéfini à >Edit.ClearAll.

L'article MSDN répertorie tous les alias prédéfinis et vous pouvez également définir le vôtre. (Pour VS 2010 et les versions antérieures, alias personnalisés sont décrits dans un article distinct, bien que.) Numérisation à travers, il y a toute une série d'entre eux, dont certains pourraient même avoir leurs racines dans MS-DOS DEBUG.EXE ( en particulier >d, >g, >p, >q, et> tviens à l'esprit).


Il convient également de noter, car il n'y a que deux touches à appuyer: Menu contextuel> Effacer tout invoque la même commande et peut être parcourue à l'aide du clavier. Dans la fenêtre immédiate, vous pouvez appuyer sur context-menu, L.

Si vous n'avez pas de context-menutouche sur votre clavier (vous savez, celle entre right-altet right-ctrl), vous pouvez utiliser shift+ à la F10place.


1
J'utilise normalement la clé de contexte lorsque je suis au bureau - mais je travaille sur un ordinateur portable depuis quelques mois depuis un bureau client et je n'ai pas la clé de contexte dessus. Cela m'a finalement assez dérangé pour chercher une solution ...
Scott Ivey

1
Le >est important. Impossible de penser à un moyen naturel de le rendre plus explicite dans la réponse. Consultez également Fenêtre immédiate sur MSDN pour obtenir des conseils plus utiles.
Palec


17
  1. Placez le curseur de la souris dans la fenêtre Exécution.
  2. Faites un clic droit sur la souris et sélectionnez "Effacer tout".


3

Voici comment procéder au moment de l'exécution:

  1. Référencez les DLL EnvDTE dans votre application.

  2. Créez puis utilisez cette fonction si nécessaire.

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

Ne travaille pas pour moi. L'erreur est: «Une exception de première chance de type« System.Runtime.InteropServices.COMException »s'est produite dans mscorlib.dll» lors de l'obtention d'un objet de Marshal.
Mojtaba Rezaeian

Ma visuelle version studio est 2012 , donc je l' ai changé VisualStudio.DTE.10.0pour VisualStudio.DTE.11.0et cela a fonctionné. J'ai également trouvé ici une syntaxe plus courte de la même réponse: http://stackoverflow.com/a/16873888/2721611
Mojtaba Rezaeian

1

Pour Visual Studio 2012, j'utilise:

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

pour effacer automatiquement la fenêtre immédiate des codes (nécessite d'ajouter des références DTE au projet). Si ça marche pas essayer VisualStudio.DTE.8.0, VisualStudio.DTE.9.0, ...selon votre version de Visual Studio.


0

J'ai utilisé la dernière réponse à peu près mot pour mot et cela fonctionne, même si je voulais que le focus revienne là où il se trouvait. Voici la version C # très légèrement améliorée. Je l'active avec un commutateur de configuration.

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

fin si


1
Juste un gotcha; si vous avez plus d'une instance de VS ouverte, la loi de Murphy dicte qu'elle effacera l'autre et vous laissera essayer de comprendre pourquoi F ^ & $% **! ça ne marche pas. Du moins, c'est ce que je fais depuis 20 minutes.
Luc VdV

Et maintenant cela fonctionne, mais je pense que si VS est la fenêtre active. Si une autre fenêtre (par exemple le projet que je débogue) est active lorsque ce code est exécuté, j'obtiens "Exception de HRESULT: 0x80010001 (RPC_E_CALL_REJECTED)".
Luc VdV

Vous avez raison. Si vous exécutez 2 instances, vous devrez trouver un moyen rationnel de distinguer l'une de l'autre. J'imagine que vous devrez parcourir toutes les fenêtres principales et rechercher celle avec le ZOrder le plus élevé. J'ai arrêté de l'utiliser il y a quelque temps parce que j'ai trouvé un meilleur moyen. J'ai écrit ceci parce que Visual Studio vole le message de débogage. Pour tous les autres outils, je les lance via DbgView (SysInternals). J'ai écrit un processus back-end qui les capture avant que Visual Studio ne les vole, et les transmet à DbgView, donc je suis revenu à ce que je voulais en premier lieu.
Wade Hatler
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.