Команда негайного вікна Visual Studio для Clear All


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
Важливе >значення. Не міг придумати природний спосіб зробити це більш явним у відповіді. Також див. Негайне вікно на MSDN для отримання більш корисних порад.
Палець


17
  1. Помістіть курсор миші у негайне вікно.
  2. Клацніть правою кнопкою миші та виберіть "Очистити все".


3

Ось як це зробити під час виконання:

  1. Посилайтеся на додатки 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" під час отримання об'єкта від маршала.
Mojtaba Rezaeian

Моя Visual Studio версії 2012 , тому я змінив VisualStudio.DTE.10.0до VisualStudio.DTE.11.0і він працював. Також тут я знайшов коротший синтаксис тієї самої відповіді: http://stackoverflow.com/a/16873888/2721611
Mojtaba Rezaeian

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.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, закон Мерфі продиктує, що він очистить інший і залишить вас намагатися з'ясувати, чому F ^ & $% **! це не працює. Принаймні, так я робив за останні 20 хвилин.
Люк VdV

І зараз це працює, але я думаю, лише якщо VS є активним вікном. Якщо інше вікно (наприклад, проект, який я налагоджую) активне під час виконання цього коду, я отримую "Виняток з HRESULT: 0x80010001 (RPC_E_CALL_REJECTED)".
Люк VdV

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