用于全部清除的Visual Studio立即窗口命令


Answers:


133

要清除立即窗口,可以使用>cls,这是预定义的命令别名,用于>Edit.ClearAll

MSDN文章列出了所有预定义的别名,您也可以定义自己的别名。(2010年VS和更早版本,自定义别名在另一篇文章中所描述的,虽然)。通过扫描,还有他们的整体转换,其中一些甚至可能有他们的MS-DOS DEBUG.EXE根(特别是>d>g>p>q,和> t浮现在脑海中)。


同样值得一提的是,只需按两个键即可:上下文菜单>全部清除会调用同一命令,并且可以使用键盘进行导航。在立即窗口中,您可以按context-menuL

如果您的键盘上没有context-menuright-alt和之间的键right-ctrl),则可以使用shift+ F10代替。


1
我通常在办公室时使用上下文密钥-但过去几个月来我一直在客户办公室使用便携式计算机工作,而我没有上下文密钥。最终,它困扰着我,足以寻找解决方案……
Scott 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

我的Visual Studio版本是2012,所以我改成VisualStudio.DTE.10.0VisualStudio.DTE.11.0它,并且可以正常工作。同样在这里,我找到了相同答案的较短语法:http
//stackoverflow.com/a/16873888/2721611

1

对于Visual Studio 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引用)。如果不起作用,请根据Visual Studio版本尝试VisualStudio.DTE.8.0,。VisualStudio.DTE.9.0...


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

万一


1
只是个陷阱;如果您有多个打开的VS实例,墨菲定律规定它将清除另一个VS,并让您尝试找出为什么F ^&$%**!它不起作用。至少那是我最近20分钟一直在做的事情。
卢克VdV

现在它可以工作了,但是我认为只有在VS是活动窗口的情况下。如果执行此代码时另一个窗口(例如我正在调试的项目)处于活动状态,则会收到“来自HRESULT的异常:0x80010001(RPC_E_CALL_REJECTED)”。
卢克VdV

你是对的。如果您正在运行2个实例,则必须找出一种合理的方法来相互区分。我想您必须迭代所有主窗口并检查具有最高ZOrder的窗口。我前段时间不使用它,因为我想出了一种更好的方法。我写这篇文章是因为Visual Studio窃取了Debug消息。对于所有其他工具,我通过DbgView(SysInternals)运行它们。我编写了一个后端过程,该过程在Visual Studio窃取它们之前先将它们捕获,然后将它们转发给DbgView,所以我首先回到了我想要的东西。
韦德·哈特勒
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.