Thay đổi hành vi Ctrl + Tab để di chuyển giữa các tài liệu trong Visual Studio


286

Có thể thay đổi cách Ctrl+ TabShift+ Ctrl+ Tabhoạt động trong Visual Studio không? Tôi đã tắt cửa sổ điều hướng bật lên, vì tôi chỉ muốn chuyển đổi giữa các mục trong điều khiển tab. Vấn đề của tôi là sự không nhất quán của việc chuyển sang tài liệu tiếp theo và trước đó làm gì.

Mọi chương trình khác sử dụng điều khiển tab cho tài liệu mở tôi đã thấy sử dụng Ctrl+ Tabđể di chuyển từ trái sang phải và Shift+ Ctrl+ Tabđể chuyển từ phải sang trái. Visual Studio phá vỡ điều này khi nhảy đến tab cuối cùng được chọn. Bạn không bao giờ có thể biết tài liệu nào bạn sẽ kết thúc, và nó không bao giờ giống như vậy hai lần.

Nó rất phản khoa học. Đây có phải là một cách tinh tế để khuyến khích tất cả mọi người chỉ mở hai tài liệu cùng một lúc?


Hãy nói rằng tôi có một vài tập tin mở. Tôi đang làm việc trong một, và tôi cần xem những gì trong tab tiếp theo bên phải. Trong mọi ứng dụng khác trên bề mặt Trái đất, Ctrl+ Tabsẽ đưa tôi đến đó. Nhưng trong Visual Studio, tôi không biết nó sẽ đưa tôi đến những tab nào khác. Nếu tôi chỉ có hai tài liệu mở, điều này hoạt động rất tốt. Ngay sau khi bạn đi đến ba hoặc nhiều hơn, tất cả các cược đã tắt như tab Visual Studio đã quyết định gửi cho bạn.

Vấn đề với điều này là tôi không nên nghĩ về công cụ này, nó sẽ mờ dần vào nền và tôi nên suy nghĩ về nhiệm vụ. Hành vi tab hiện tại tiếp tục kéo tôi ra khỏi nhiệm vụ và khiến tôi phải chú ý đến công cụ.


4
"Tôi đã vô hiệu hóa cửa sổ điều hướng cửa sổ bật lên" ... Làm thế nào bạn tắt cửa sổ bật lên chọn cửa sổ gây phiền nhiễu? Thật khó chịu khi chỉ nhấp nháy mỗi khi tôi nhấn Ctrl + Tab.
demcodemonkey

31
À, hiểu rồi, trong Công cụ-> Tùy chọn-> Bàn phím tôi đã ánh xạ lại Ctrl + Tab từ Window.NextDocumentWindowNav sang Window.NextDocumentWindow (đã xóa "Nav"). Và tương tự với Ctrl + Shift + Tab với Window.PreinglyDocumentWindowNav.
quỷ dữ

11
Có sai không khi tôi thích hành vi này, vì nó giống như alt-tab?
Theo Belaire

3
Visual Studio dường như điều hướng qua các tab bằng cách sử dụng hành vi "được sử dụng gần đây nhất" (MRU). Notepad ++ cung cấp một tùy chọn để bật / tắt hành vi này (vì vậy có vẻ như một số người thích nó). Tôi thực sự muốn có thể chuyển sang hành vi thường xuyên / trực quan mặc dù.
André Caron

4
Thành thật mà nói, tôi không thích khi một chương trình quay vòng theo thứ tự tab trực quan. Tôi đồng ý với hành vi của Visual studio. Đối với mỗi tab ctrl +, nó sẽ quay trở lại cái cuối cùng được sử dụng, rồi cái cuối cùng được sử dụng trước đó. Mô hình đã ở đó trong một thời gian rất dài (VB6 hoặc trước khi tôi nghĩ). Ý tôi là, sử dụng mô hình bạn thích, nhưng nếu bạn biết nó hoạt động như thế nào, thì sẽ dễ dàng hơn để đánh giá cao :)
Josh Robinson

Câu trả lời:


227

Trong Visual Studio 2015 (cũng như các phiên bản trước của VS, nhưng bạn phải cài đặt Công cụ năng suất năng suất nếu bạn đang sử dụng VS2013 trở xuống), có hai lệnh mới trong Visual Studio:

Window.NextTabWindow.PreinglyTab

Chỉ cần đi lại từ chúng từ Ctrl+ Alt+ PageUp/ Ctrl+ Alt+ PageDownđến Ctrl+ Tab/ Ctrl+ Shift+ Tabtrong:

Công cụ Menu -> Tùy chọn -> Môi trường -> Bàn phím

Lưu ý: Trong các phiên bản trước như Visual Studio 2010, Window.NextTab và Window.PreinglyTab được đặt tên là Window.NextDocumentWellTabWindow.PreinglyDocumentWellTab .


1
Đây là câu trả lời tốt nhất bây giờ cho visual studio 2010. Điều này rất hữu ích. Giải pháp vĩ mô được chấp nhận là kém hơn so với giải pháp này.
jmq

2
Chưa có phiên bản nào cho Visual Studio 2012
Đại tá Panic

4
Điều này sẽ không hữu ích nếu bạn sử dụng Visual Studio Express
Sinh ra vào

18
Với Visual Studio 2012, tên lệnh đã thay đổi một chút. Bây giờ là Window.NextTabWindow.PreinglyTab .
JP mười Berge

3
@JP ten Berge - Tôi đã thử nghiệm điều này trong VS 2012 và phím tắt Window.PreinglyTab (Ctrl + Alt + PGUp) không hoạt động nếu bạn đang ở chế độ xem Dao cạo (tệp .cshtml). Rất khó chịu, mặc dù Ctrl + Alt + PGDown vẫn hoạt động để bạn không bị kẹt hoàn toàn. Ngoài ra còn có Window.NextDocumentWindow (Ctrl + F6) mặc dù điều đó dường như xoay vòng các tab theo một thứ tự lạ.
DGreen

70

Visual Studio 2010 đã được xây dựng để giải quyết vấn đề này.

Theo mặc định, Ctrl+ TabCtrl+ Shift+ Tabđược gán cho Window.[Previous/Next]..Document, nhưng bạn có thể, thông qua

Tools -> Options -> Environment -> Keyboard,

xóa các bài tập chính đó và gán lại chúng Window.[Next/Previous]Tabđể thêm hành vi mong muốn.


5
Rõ ràng có ai đó đã nhầm lẫn lý do đằng sau một downvote- Nếu một câu trả lời không tuân thủ câu hỏi hoặc nếu nó thực sự tiêu cực thì nó xứng đáng với một ... Nhưng tôi trả lời chính xác câu hỏi, mặc dù ít hơn câu trả lời của bạn. Có phải tôi chỉ mong mọi người thực sự hiểu một menu tùy chọn hơn là "Ở đây, chạy tập lệnh này" hay "Cài đặt addon này!" ... Đây không phải là trang web dành cho lập trình viên sao?
Zoey

1
Mọi người có thể đã tìm cách chuyển đổi giữa các tab tài liệu. Chỉnh sửa 'Cửa sổ. [Tiếp theo / Previuos] Tab' không ảnh hưởng đến các tab tài liệu đối với tôi trong VS2010 trong khi giải pháp của @thepaulpage đã làm. +1 cho cách tiếp cận rõ ràng và không có addon!
GnomeDePlume

⁺¹, tôi cũng có suy nghĩ tại sao ai đó có thể hạ thấp câu trả lời của bạn: Visual Studio 2010 có một số phiên bản kỳ lạ không có tùy chọn «Bàn phím». Vì vậy, có lẽ phiên bản này đã có phiên bản này, xem xét các tùy chọn và quyết định rằng câu trả lời sai vì theo quan điểm chủ quan của họ thì nó thực sự là như vậy.
Hi-Angel

1
Tôi đã phải gỡ bỏ ràng buộc khỏi Window.[Previous|Next]DocumentWindowcài đặt để nó hoạt động (trong VS2015). Theo mặc định, có một ràng buộc trình soạn thảo văn bản riêng cho nó dường như được ưu tiên.
Kat

51

nó có thể được thay đổi, ít nhất là trong VS 2012 (tôi nghĩ nó cũng sẽ hoạt động cho năm 2010).

1) TOOLS > Options > Environment > Keyboard

(Có CÔNG CỤ, VS2012 của nó!) Bây giờ có ba phím tắt để kiểm tra.

2) Window.NextDocumentWindow- bạn có thể đến đó nhanh chóng bằng cách gõ vào khung tìm kiếm trên đầu trang. Bây giờ đây là kẻ thù của bạn . Hủy bỏ nó nếu bạn không thích nó. Thay đổi nó thành một cái gì đó khác (và đừng quên nút Assign ) nếu muốn có cái riêng của bạn, nhưng hãy nhớ phím tắt đó bất kể cuối cùng là gì . Nó sẽ có ích sau này.

(Ý tôi là đây là lối tắt ghi nhớ tab cuối cùng của bạn)

nhập mô tả hình ảnh ở đây

3) Bây giờ hãy tìm kiếm Window.NextDocumentWindowNav- điều này giống như trên nhưng hiển thị bản xem trước của các tab đã mở (bạn có thể điều hướng đến các cửa sổ khác quá nhanh với cửa sổ bật lên này). Tôi chưa bao giờ thấy điều này hữu ích mặc dù. Làm tất cả những gì được đề cập trong bước 2 (đừng quên ghi nhớ ).

4) Window.NextTab- lọ thuốc ma thuật của bạn. Điều này sẽ cho phép bạn quay vòng qua các tab theo thứ tự chuyển tiếp. Có thể bạn muốn CTRL+ TAB? Lại bước 2 và nhớ .

5) Bây giờ đặt con trỏ vào các phím tắt Bấm: hộp văn bản (không quan trọng hiện tại được chọn gì, bạn sẽ không Gán lần này) và nhập trước một trong ba (hoặc hai hoặc một) phím tắt.

nhập mô tả hình ảnh ở đây

Bạn sẽ thấy Shortcut hiện đang được sử dụng bởi: được liệt kê. Đảm bảo rằng bạn không có mục trùng lặp cho phím tắt. Trong pic, không có mục trùng lặp. Trong trường hợp bạn có (hiếm), hãy nói X, sau đó đi đến X và xóa phím tắt. Lặp lại bước này cho các phím tắt khác là tốt.

6) Bây giờ lặp lại 1-5 cho các Previousphím tắt (tốt nhất là thêm Shift).

7) Phần thưởng: Chọn sơ đồ ánh xạ VS2005 (ở trên cùng của hộp), vì vậy bây giờ bạn nhận được F2cho Đổi tên thành viên và không CTRL+ R+ R, và F7cho Xem mã và không CTRL+ ALT+ 0.

Theo ý kiến ​​của tôi, VS đã hiểu đúng theo mặc định. Tôi thấy cực kỳ hữu ích khi VS ghi nhớ những gì tôi đã sử dụng cuối cùng và giúp chuyển đổi dễ dàng hơn, giống như những gì hệ điều hành tự làm (trên ALT+ TAB). Trình duyệt của tôi cũng làm như vậy theo mặc định (Opera), mặc dù tôi biết Firefox hoạt động khác đi.


Tôi cũng không thấy hành vi này chống phản trực giác. ;-)
dotNET

ý kiến ​​ở đầu câu trả lời này luôn luôn cho tôi là không thông tin và (vì kích thước lớn) không cần thiết phải đối kháng.
thepaulpage

@thepaulpage Tôi đã cập nhật câu trả lời của mình. Lý do tôi phải đưa ra ý kiến ​​là vì nhiều người dùng (bao gồm cả OP) đã đưa ra ý kiến ​​của họ rằng nó phản trực giác.
nawfal

16

Trong Visual Studio 2012 trở lên (2013, 2015, 2017 ...):

  1. Duyệt menu Công cụ / Tùy chọn / Môi trường / Bàn phím.
  2. Tìm kiếm lệnh 'Window.NextTab', đặt phím tắt thành Ctrl+Tab
  3. Tìm kiếm lệnh 'Window.PreinglyTab', đặt phím tắt thành Ctrl+ Shift+Tab

nhập mô tả hình ảnh ở đây


4
Để tham khảo, theo mặc định, Ctrl + Tab và Ctrl + Shift + Tab được ánh xạ tới các lệnh 'Window.NextDocumentWindowNav' và 'Window.PreinglyDocumentWindowNav'.
Rory O'Kane

8

Điều hướng đến bài đăng trên blog Visual Studio Tab Un-ngu ngốc Macro và sử dụng macro. Sau khi bạn áp dụng macro cho cài đặt Visual Studio, bạn có thể liên kết các phím tắt yêu thích của mình với chúng. Cũng lưu ý sửa lỗi registry trong các bình luận vì không hiển thị bóng macro vì chúng có thể gây khó chịu sau một thời gian.


Nó dường như vẫn bị phá vỡ trong một số điều kiện, nhưng đây là điều tốt nhất để thực sự làm việc như mong muốn.
Jeff Cuscutis

Trong VS 2010, bạn có thể định cấu hình Ctrl + Tab và Ctrl + Shift + Tab để thay đổi giữa các tài liệu văn bản, nhưng nó không hoạt động với các tab thiết kế hoặc BinaryEditor. Macro từ bài viết trên blog là phương pháp duy nhất hoạt động với phần lớn các loại cửa sổ tài liệu. Tôi cũng đã gửi một lỗi với Microsoft có nhiều chi tiết hơn ( goo.gl/K9rz ) và họ nói rằng họ sẽ thay đổi Window.NextTabWindow.PreviousTabcung cấp chuyển đổi không phải MRU cho các tài liệu trong "phiên bản Visual Studio tiếp theo".
Greg Bray

7

Sau một vài giờ tìm kiếm, tôi đã tìm ra giải pháp làm thế nào để chuyển đổi giữa các tài liệu đang mở bằng cách sử dụng CTRL+ TABdi chuyển từ trái sang phải và SHIFT+ CTRL+ TABđể chuyển từ phải sang trái.

Nói tóm lại, bạn cần sao chép và dán macro này:

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports System.Diagnostics

Public Module TabCtrl

Public Sub TabForward()
    Dim i As Integer
    Dim activateNext As Boolean = False

    For i = 1 To DTE.Windows.Count
        If DTE.Windows().Item(i).Kind = "Document" Then

            If activateNext Then
                DTE.Windows().Item(i).Activate()
                GoTo done
            End If

            If DTE.Windows().Item(i) Is DTE.ActiveWindow Then
                activateNext = True
            End If
        End If
    Next

    ' Was the last window... go back to the first
    If activateNext Then
        For i = 1 To DTE.Windows.Count
            If DTE.Windows().Item(i).Kind = "Document" Then
                DTE.Windows().Item(i).Activate()
                GoTo done
            End If
        Next
    End If
done:

End Sub

Public Sub TabBackward()
    Dim i As Integer
    Dim activateNext As Boolean = False

    For i = DTE.Windows.Count To 1 Step -1
        If DTE.Windows().Item(i).Kind = "Document" Then

            If activateNext Then
                DTE.Windows().Item(i).Activate()
                GoTo done
            End If

            If DTE.Windows().Item(i) Is DTE.ActiveWindow Then
                activateNext = True
            End If
        End If
    Next

    ' Was the first window... go back to the last
    If activateNext Then
        For i = DTE.Windows.Count To 1 Step -1
            If DTE.Windows().Item(i).Kind = "Document" Then
                DTE.Windows().Item(i).Activate()
                GoTo done
            End If
        Next
    End If
done:

End Sub

End Module

Macro đến từ: www.mrspeaker.net/2006/10/12/tab-un-stoolifier/

Nếu bạn không bao giờ thêm macro vào Visual Studio, có một liên kết rất hữu ích để làm điều đó .


2
Nó vẫn mất 10 giây để làm điều này lần đầu tiên và flash biểu tượng khay hệ thống mỗi lần bạn sử dụng nó tiếp theo? Đó là những gì VS2005 đã làm, và tôi không thể lấy nó ...
Roman Starkov

1
Romkyns: Vâng, tôi sợ. Vẫn không phải là một giải pháp khả thi.
David Foster

1
Romkyns: đúng vậy, mỗi khi tôi thực hiện macro, một quả bóng sẽ bật lên trong khay hệ thống để cho biết macro đang chạy. để loại bỏ ballon đó, bạn có thể chỉnh sửa Windows Registry và thêm giá trị DWORD sau: "DontShowMacrosBalloon" = 1, trong khóa đó: HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 9.0 (sử dụng 9.0 cho Visual Studio 2008; 8.0 cho 2005) . Bong bóng biến mất nhưng biểu tượng khay hệ thống vẫn sẽ xuất hiện. Đối với tôi giải pháp này là đủ tốt, tôi đã không tìm thấy một tốt hơn và tôi ghét hành vi tab orginalne ctrl +.
user410261

6

Triết lý của thứ tự tab Visual Studio là rất trực quan vì thứ tự của các tab được hiển thị khác với logic chuyển đổi tab, khiến cho thứ tự của các tab hoàn toàn vô dụng .

Vì vậy, cho đến khi có giải pháp tốt hơn, thay đổi bố cục cửa sổ (trong Môi trường-> Chung) từ tài liệu được gắn thẻ thành nhiều tài liệu; nó sẽ không thay đổi hành vi, nhưng nó làm giảm sự nhầm lẫn gây ra bởi các tab.

Bằng cách đó, bạn cũng sẽ thấy DocumentWindowNav hữu ích hơn!


6

Ctl+ Alt+ PgUphoặc các PgDnphím tắt hoạt động để chuyển tab tiếp theo / trước ra khỏi hộp cho tôi ...


3
Điều phi logic là: Nếu thanh tab của bạn chỉ có không gian ngang cho n Tab, các phím tắt đó sẽ không làm cho tab quay vòng cho các tab không hiển thị tại thời điểm này!
sergiol

5

Tôi đồng ý 100% với Jeff.

Tôi đã làm việc với Borland C ++ Builder trong vài năm và một trong những tính năng tôi nhớ nhất là thứ tự lập bảng tài liệu 'chính xác' với Ctrl- Tab. Như Jeff đã nói, " Hành vi tab hiện tại tiếp tục kéo tôi ra khỏi nhiệm vụ và khiến tôi phải chú ý đến công cụ " chính xác là cảm giác của tôi về điều này, và tôi rất ngạc nhiên vì thực tế là không có nhiều người phàn nàn về điều này

Tôi nghĩ Ctrl- F6- NextDocumentWindowNav - điều hướng các tài liệu dựa trên thời gian kích hoạt lần cuối của tài liệu. Hành vi này rất giống với cách các ứng dụng MDI được sử dụng để hành xử trong những ngày xưa.

Với điều này đã được tính đến, tôi thường sử dụng Ctrl+ F6để chuyển đổi giữa 2 tài liệu (khá tiện lợi trong việc chuyển đổi giữa các tệp .cpp và .h khi làm việc trên dự án c ++) ngay cả khi có hơn 2 tài liệu hiện đang mở. Ví dụ: nếu bạn có 10 tài liệu đang mở (Tab1, Tab2, Tab3, ...., Tab10), tôi nhấp vào Tab1 và sau đó là Tab2. Khi tôi làm Ctrl+ F6và nhả phím, tôi sẽ chuyển sang Tab1. Nhấn Ctrl+ F6lần nữa sẽ đưa tôi trở lại Tab2.


5

Tôi đoán bạn muốn những gì VSS gọi Next (Trước) DocumentWindow. Theo mặc định, nó có trên Ctrl(-Shift)-F6VSS 8. Trên Ctrl(-Shift)-Tabchúng có Next(Previous)DocumentWindowNav. Bạn có thể thay đổi các bài tập chính thông qua Công cụ / Tùy chọn / Bàn phím.


3
Ctrl- (Shift-) F6 không đưa bạn đến tab bên trái hoặc bên phải. Nó có cùng thứ tự với Ctrl-Tab nhưng không có cửa sổ gây phiền nhiễu.
shoosh

1
Đúng ... Visual Studio 2010 có Window.NextTab và Window.PreinglyTab, không thay đổi tài liệu dựa trên MRU, nhưng nó không hoạt động với tất cả các loại tài liệu: connect.microsoft.com/VisualStudio/feedback/details/571750/
Greg Bray

4

Trong nhánh đăng ký: HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 9.0 thêm DWORD có tên "UseMRUDocOrdering" với giá trị là 1. Nó sẽ đặt hàng các tài liệu được sử dụng gần đây nhất được đặt ở bên trái. Nó không hoàn hảo nhưng tốt hơn so với hành vi sai trái mặc định.


0

Đã cập nhật lên VS 2017+, trong đó, theo nhận xét của @ J-Bob dưới câu trả lời của @ thepaulpage, (nhấn mạnh thêm):

Có vẻ như các lệnh đã thay đổi một lần nữa. Bây giờ là năm 2017 và các phím tắt được gọi là Open Next EditorOpen Before Editor . Bạn không cần bất kỳ tiện ích mở rộng nào cho việc này.

Bạn có thể tìm thấy các tùy chọn trong Cài đặt, có thể được truy cập thông qua biểu tượng bánh răng ở phía dưới bên trái hoặc bằng [Ctrl]+,lệnh.


-5

Tôi không sử dụng Visual Studio ( vâng, thực sự, tôi không sử dụng nó ), nhưng AutoHotkey có thể ánh xạ lại bất kỳ phím nóng nào trên toàn cầu hoặc trong một ứng dụng cụ thể:

#IfWinActive Microsoft Excel (application specific remapping)

; Printing area in Excel (@ Ctrl+Alt+A)
^!a::
Send !ade
return

#IfWinActive


$f4::
; Closes the active window (make double tapping F4 works like ALT+F4)
if f4_cnt > 0 
{
    f4_cnt += 1
    return
}

f4_cnt = 1
SetTimer, f4_Handler, 250
return

f4_Handler:
SetTimer, f4_Handler, off

if (f4_cnt >= 2)    ; Pressed more than two times
{   
    SendInput !{f4}
} else {
    ; Resend f4 to the application
    Send {f4}
}

f4_cnt = 0
return

Đây là hai bản sửa lỗi của tập lệnh AutoHotKey chính của tôi. Tôi nghĩ rằng nó là một công cụ tuyệt vời cho loại nhiệm vụ này.


3
Xin lỗi, nhưng vấn đề là không có chìa khóa nào làm đúng, vì vậy điều này sẽ không có ích.
Roman Starkov
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.