Lệnh cửa sổ ngay lập tức Visual Studio cho Xóa tất cả


100

Có lệnh nào để xóa cửa sổ ngay lập tức trong Visual Studio không?

Tôi ghét phải lấy chuột để có menu chuột phải ở đó - thà chỉ gõ "cls" hoặc một cái gì đó.


14
không nhận ra có một menu chuột phải!
JonnyRaa

Câu trả lời:


133

Để xóa sổ ngay lập tức, bạn có thể sử dụng >cls, đó là một xác định trước lệnh alias để >Edit.ClearAll.

Bài báo MSDN liệt kê tất cả các bí danh được xác định trước và bạn cũng có thể xác định bí danh của riêng mình. (Đối với VS 2010 trở về trước, bí danh tùy chỉnh được mô tả trong một bài viết riêng biệt, mặc dù.) Quét qua, có một loạt toàn bộ trong số họ, một số trong đó thậm chí có thể có nguồn gốc từ MS-DOS DEBUG.EXE (cụ thể là >d, >g, >p, >q, và> tnghĩ đến).


Cũng cần lưu ý, vì nó chỉ có hai phím để nhấn: Menu ngữ cảnh> Xóa tất cả sẽ gọi cùng một lệnh và nó có thể được điều hướng bằng bàn phím. Trong cửa sổ ngay lập tức, bạn có thể nhấn context-menu, L.

Nếu bạn không có context-menuphím trên bàn phím (bạn biết đấy, phím ở giữa right-altright-ctrl), bạn có thể sử dụng shift+ F10để thay thế.


1
tôi thường sử dụng khóa ngữ cảnh khi ở văn phòng - nhưng tôi đã làm việc trên máy tính xách tay trong vài tháng qua từ văn phòng khách hàng và tôi không có khóa ngữ cảnh trên đó. Cuối cùng nó đã làm tôi bận tâm đủ để tìm kiếm một giải pháp ...
Scott Ivey

1
Điều >quan trọng. Không thể nghĩ ra một cách tự nhiên để làm cho nó rõ ràng hơn trong câu trả lời. Ngoài ra, hãy xem Cửa sổ ngay lập tức trên MSDN để biết thêm các mẹo hữu ích.
Palec


17
  1. Đặt con trỏ chuột vào Cửa sổ ngay lập tức.
  2. Nhấp chuột phải vào chuột và chọn "Clear All".


3

Đây là cách thực hiện vào lúc chạy:

  1. Tham khảo các dlls EnvDTE trong ứng dụng của bạn.

  2. Tạo và sau đó sử dụng chức năng này khi cần thiết.

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

Không làm việc cho tôi. Lỗi là: "Một ngoại lệ cơ hội đầu tiên của loại 'System.Runtime.InteropServices.COMException' xảy ra trong mscorlib.dll" khi nhận đối tượng từ Marshal.
Mojtaba Rezaeian

Phiên bản studio trực quan của tôi là năm 2012 nên tôi đã đổi VisualStudio.DTE.10.0sang VisualStudio.DTE.11.0và nó hoạt động. Cũng tại đây, tôi đã tìm thấy một cú pháp ngắn hơn của cùng một câu trả lời: http://stackoverflow.com/a/16873888/2721611
Mojtaba Rezaeian

1

Đối với studio trực quan 2012, tôi sử dụng:

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

để tự động xóa cửa sổ ngay lập tức khỏi mã (yêu cầu thêm tham chiếu DTE vào dự án). Nếu nó không hoạt động VisualStudio.DTE.8.0, hãy thử VisualStudio.DTE.9.0, ...theo phiên bản studio trực quan của bạn.


0

Tôi đã sử dụng câu trả lời cuối cùng chỉ về nguyên văn và nó hoạt động, mặc dù tôi muốn tập trung trở lại vị trí của nó. Đây là phiên bản C # được cải tiến rất nhẹ. Tôi kích hoạt nó bằng một công tắc cấu hình.

#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
Chỉ là một gotcha; nếu bạn có nhiều hơn một trường hợp của VS đang mở, định luật Murphy ra lệnh rằng nó sẽ xóa cái còn lại và khiến bạn cố gắng tìm ra lý do tại sao F ^ & $% **! nó không hoạt động. Ít nhất đó là những gì tôi đã làm trong 20 phút qua.
Luc VdV 19/09/19

Và bây giờ nó hoạt động, nhưng tôi nghĩ chỉ khi VS là cửa sổ hoạt động. Nếu một cửa sổ khác (ví dụ: dự án tôi đang gỡ lỗi) đang hoạt động khi mã này được thực thi, tôi nhận được "Ngoại lệ từ HRESULT: 0x80010001 (RPC_E_CALL_REJECTED)".
Luc VdV 19/09/19

Bạn đúng. Nếu bạn đang chạy 2 phiên bản, bạn phải tìm ra một cách hợp lý để phân biệt cái này với cái kia. Tôi tưởng tượng bạn sẽ phải lặp lại tất cả các cửa sổ chính và kiểm tra cửa sổ có ZOrder cao nhất. Tôi đã bỏ sử dụng cái này một thời gian trước vì tôi đã nghĩ ra một cách tốt hơn. Tôi đã viết điều này vì Visual Studio đánh cắp thông báo Gỡ lỗi. Đối với tất cả các công cụ khác, tôi chạy chúng thông qua DbgView (SysInternals). Tôi đã viết một quy trình back end để nắm bắt chúng trước khi Visual Studio đánh cắp chúng và chuyển tiếp chúng đến DbgView, vì vậy tôi đã quay lại những gì tôi muốn ngay từ đầu.
Wade Hatler
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.