คำสั่งหน้าต่าง Visual Studio ทันทีสำหรับล้างทั้งหมด


101

มีคำสั่งให้ล้างหน้าต่างทันทีใน Visual Studio หรือไม่

ฉันเกลียดการจับเมาส์เพื่อคลิกเมนูขวาที่นั่น - อยากจะพิมพ์แค่ "cls" หรืออะไรสักอย่าง


14
ไม่รู้ว่ามีเมนูคลิกขวา!
JonnyRaa

คำตอบ:


135

เพื่อล้างหน้าต่างทันทีคุณสามารถใช้>clsซึ่งเป็นที่กำหนดไว้ล่วงหน้านามแฝงคำสั่ง>Edit.ClearAllไปยัง

บทความ MSDNแสดงรายการนามแฝงที่กำหนดไว้ล่วงหน้าทั้งหมดและคุณสามารถกำหนดของคุณเองได้เช่นกัน (สำหรับ VS ปี 2010 และก่อนหน้านี้นามแฝงที่กำหนดเองที่อธิบายไว้ในบทความแยกแม้ว่า.) การสแกนผ่านมีฆ่าทั้งของพวกเขาซึ่งบางส่วนก็อาจจะมีรากของพวกเขาใน MS-DOS DEBUG.EXE (เฉพาะ>d, >g, >p, >q, และ> tทำใจ)


นอกจากนี้ที่น่าสังเกตเนื่องจากมีเพียงสองปุ่มให้กด: เมนูบริบท> ล้างทั้งหมดเรียกใช้คำสั่งเดียวกันและสามารถนำทางได้โดยใช้แป้นพิมพ์ ในหน้าต่างทันทีคุณสามารถกด,context-menuL

หากคุณไม่มีcontext-menuคีย์บนแป้นพิมพ์ (คุณรู้ไหมว่าปุ่มระหว่างright-altและright-ctrl) คุณสามารถใช้shift+ F10แทนได้


1
โดยปกติฉันจะใช้คีย์บริบทเมื่อฉันอยู่ในสำนักงาน - แต่ฉันทำงานกับแล็ปท็อปจากสำนักงานลูกค้าในช่วงสองสามเดือนที่ผ่านมาและฉันไม่มีคีย์บริบท ในที่สุดมันก็รบกวนฉันมากพอที่จะหาวิธีแก้ปัญหา ...
Scott Ivey

1
ที่>สำคัญคือ ไม่สามารถคิดวิธีที่เป็นธรรมชาติเพื่อให้คำตอบชัดเจนยิ่งขึ้น นอกจากนี้โปรดดูหน้าต่างทันทีบน MSDN สำหรับคำแนะนำที่เป็นประโยชน์เพิ่มเติม
Palec


17
  1. วางเคอร์เซอร์ของเมาส์ในหน้าต่างทันที
  2. คลิกขวาที่เมาส์แล้วเลือก "ล้างทั้งหมด"


3

นี่คือวิธีการดำเนินการ:

  1. อ้างอิง EnvDTE dlls ในแอปพลิเคชันของคุณ

  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

เวอร์ชันสตูดิโอภาพของฉันคือ 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
แค่ gotcha; หากคุณมี VS เปิดมากกว่าหนึ่งอินสแตนซ์กฎหมายของ Murphy จะกำหนดว่ามันจะล้างอีกอันหนึ่งและปล่อยให้คุณพยายามหาสาเหตุว่าทำไม F ^ & $% **! มันไม่ทำงาน อย่างน้อยนั่นคือสิ่งที่ฉันทำในช่วง 20 นาทีที่ผ่านมา
Luc VdV

และตอนนี้มันใช้งานได้ แต่ฉันคิดว่า VS เป็นหน้าต่างที่ใช้งานอยู่เท่านั้น หากหน้าต่างอื่น (เช่นโปรเจ็กต์ที่ฉันกำลังดีบัก) ทำงานอยู่เมื่อเรียกใช้โค้ดนี้ฉันจะได้รับ "Exception from HRESULT: 0x80010001 (RPC_E_CALL_REJECTED)"
Luc VdV

คุณถูก. หากคุณใช้งาน 2 อินสแตนซ์คุณจะต้องหาวิธีที่เป็นเหตุเป็นผลในการบอกหนึ่งจากอีกกรณี ฉันคิดว่าคุณจะต้องวนซ้ำหน้าต่างหลักทั้งหมดและตรวจสอบหน้าต่างที่มี ZOrder สูงสุด ฉันเลิกใช้สิ่งนี้ไปแล้วเพราะฉันมีวิธีที่ดีกว่า ฉันเขียนสิ่งนี้เนื่องจาก Visual Studio ขโมยข้อความ Debug สำหรับเครื่องมืออื่น ๆ ทั้งหมดฉันเรียกใช้ผ่าน DbgView (SysInternals) ฉันเขียนกระบวนการแบ็คเอนด์ที่จับภาพก่อนที่ Visual Studio จะขโมยและส่งต่อไปยัง DbgView ดังนั้นฉันจึงกลับไปที่สิ่งที่ฉันต้องการตั้งแต่แรก
Wade Hatler
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.