Команда немедленного окна Visual Studio для очистки всего


100

Есть ли команда для очистки немедленного окна в Visual Studio?

Ненавижу хватать мышку для вызова меню правой кнопкой мыши - я бы предпочел просто набрать "cls" или что-то в этом роде.


14
не понимал, что есть контекстное меню!
JonnyRaa

Ответы:


133

Чтобы очистить немедленное окно, вы можете использовать >cls, который является предопределенной командой псевдонима для >Edit.ClearAll.

В статье MSDN перечислены все предопределенные псевдонимы, и вы также можете определить свои собственные. (Для VS 2010 и более ранних версий, пользовательские псевдонимы описаны в отдельной статье, хотя.) Сканирование с помощью, есть целая куча из них, некоторые из которых , возможно , даже имеют свои корни в MS-DOS DEBUG.EXE ( в частности >d, >g, >p, >q, и> tв голову).


Также стоит отметить, что нужно нажать всего две клавиши: Контекстное меню> Очистить все вызывает ту же команду, и по ней можно перемещаться с помощью клавиатуры. В ближайшем окне, вы можете нажать context-menu, L.

Если у вас нет context-menuклавиши на клавиатуре (вы знаете, что она находится между right-altи right-ctrl), вы можете использовать вместо нее shift+ F10.


1
Обычно я использую контекстный ключ, когда нахожусь в офисе, но последние несколько месяцев я работаю на ноутбуке в офисе клиента, и у меня нет контекстного ключа на нем. Это, наконец, достаточно обеспокоило меня, чтобы искать решение ...
Скотт Айви

1
Это >важно. Не мог придумать естественного способа сделать это более явным в ответе. Также см. Immediate Window на MSDN для получения дополнительных полезных советов.
Palec 03


17
  1. Поместите курсор мыши в непосредственное окно.
  2. Щелкните правой кнопкой мыши и выберите «Очистить все».


3

Вот как это сделать во время выполнения:

  1. Ссылайтесь на библиотеки DLL EnvDTE в своем приложении.

  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

У меня не работает. Ошибка: «Первое случайное исключение типа 'System.Runtime.InteropServices.COMException' произошло в mscorlib.dll» при получении объекта от Marshal.
Mojtaba Rezaeian

Моя версия Visual Studio - 2012, поэтому я перешел VisualStudio.DTE.10.0на, VisualStudio.DTE.11.0и она сработала. Также здесь я нашел более короткий синтаксис того же ответа: http://stackoverflow.com/a/16873888/2721611
Mojtaba Rezaeian

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). Если это не работает попробуйте 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! */ }

endif


1
Просто ошибка; если у вас открыто несколько экземпляров VS, закон Мерфи гласит, что он очистит другой и оставит вас пытаться выяснить, почему F ^ & $% **! это не работает. По крайней мере, это то, чем я занимаюсь последние 20 минут.
Luc VdV

И теперь это работает, но я думаю, только если VS - активное окно. Если при выполнении этого кода активно другое окно (например, отлаживаемый мной проект), я получаю «Исключение из HRESULT: 0x80010001 (RPC_E_CALL_REJECTED)».
Luc VdV

Ты прав. Если вы используете 2 экземпляра, вам нужно будет найти рациональный способ отличить один от другого. Я полагаю, вам придется перебирать все главные окна и проверять одно с самым высоким ZOrder. Некоторое время назад я перестал использовать это, потому что придумал способ получше. Я написал это, потому что Visual Studio крадет сообщение отладки. Для всех других инструментов я запускаю их через DbgView (SysInternals). Я написал внутренний процесс, который захватывает их до того, как Visual Studio их украдет, и перенаправляет их в DbgView, так что я вернулся к тому, что хотел в первую очередь.
Уэйд Хатлер,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.