すべてをクリアするためのVisual Studioの即時ウィンドウコマンド


回答:


133

イミディエイトウィンドウをクリアするには、使用することができます>cls事前に定義されている、コマンドエイリアス>Edit.ClearAll

MSDNの記事には、すべての定義済みエイリアスが一覧表示されており、独自のエイリアスを定義することもできます。(VS 2010およびそれ以前の場合は、カスタムエイリアスはかかわらず、別の記事で説明されている。)を介して、スキャンし、それらの全体のスルーがあります、でもMS-DOS DEBUG.EXEで自分のルーツを持っているかもしれないそのうちのいくつか(特に>d>g>p>q、および> t頭に浮かぶ)。


また、押すべきキーが2つしかないため、注目に値します。コンテキストメニュー> [すべてクリア]は、同じコマンドを呼び出し、キーボードを使用してナビゲートできます。イミディエイトウィンドウでは、あなたが押すことができcontext-menuL

あなたが持っていない場合はcontext-menu、キー、キーボード上の(あなたが知っている、との1 right-altとしright-ctrl)は、使用することができますshift+ F10代わりに。


1
私は通常、オフィスにいるときにコンテキストキーを使用しますが、クライアントオフィスから過去数か月間ラップトップで作業していて、それにコンテキストキーがありません。最終的にそれは私に解決策を探すのに十分な迷惑をかけました...
スコットIvey

1
>重要です。答えでそれをより明確にする自然な方法を考えることができませんでした。また、より役立つヒントについては、MSDNのイミディエイトウィンドウを参照してください。
Palec


17
  1. マウスカーソルをイミディエイトウィンドウに置きます。
  2. マウスを右クリックして、「すべてクリア」を選択します。


3

実行時にこれを行う方法は次のとおりです。

  1. アプリケーションでEnvDTE dllを参照します。

  2. この関数を作成し、必要に応じて使用します。

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

私のために働いていません。エラーは次のとおりです。Marshalからオブジェクトを取得中に、「mscorlib.dllで「System.Runtime.InteropServices.COMException」タイプの最初のチャンス例外が発生しました」
Mojtaba Rezaeian 2016

私のビジュアルスタジオバージョンは2012なので、に変更VisualStudio.DTE.10.0VisualStudio.DTE.11.0て動作しました。また、ここで同じ回答の短い構文を見つけました:http
//stackoverflow.com/a/16873888/2721611

1

ビジュアルスタジオ2012では、以下を使用します。

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

コードからイミディエイトウィンドウを自動的にクリアします(プロジェクトにDTE参照を追加する必要があります)。それは試して動作しますされていない場合VisualStudio.DTE.8.0VisualStudio.DTE.9.0...あなたのVisual Studioのバージョンに応じました。


0

私は最後の答えを逐語的に使用しましたが、それはうまくいきました。これは、わずかに改善されたC#バージョンです。設定スイッチで有効にします。

#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


1
ただの落とし穴。VSの複数のインスタンスを開いている場合、マーフィーの法則により、他のインスタンスがクリアされ、F ^&$%**の理由を理解するように求められます。動作しません。少なくとも、これが私が過去20分間行ってきたことです。
Luc VdV

そして今、それは機能しますが、VSがアクティブなウィンドウである場合のみと思います。このコードを実行したときに別のウィンドウ(たとえば、デバッグしているプロジェクト)がアクティブな場合、「Exception from HRESULT:0x80010001(RPC_E_CALL_REJECTED)」が表示されます。
Luc VdV

あなたが正しい。2つのインスタンスを実行している場合、一方を他方から区別するための合理的な方法を考え出す必要があります。すべてのメインウィンドウを反復処理して、ZOrderが最も高いものを確認する必要があると思います。私はもっ​​と良い方法を思いついたので、少し前にこれをやめました。Visual Studioがデバッグメッセージを盗むため、これを書いた。他のすべてのツールについては、DbgView(SysInternals)を介して実行します。Visual Studioがそれらを盗む前にそれらをキャプチャし、DbgViewに転送するバックエンドプロセスを作成したので、最初に必要なものに戻りました。
ウェイドハトラー、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.