Zmienianie zachowania Ctrl + Tab w celu przemieszczania się między dokumentami w Visual Studio


286

Czy można zmienić sposób działania Ctrl+ Tabi Shift+ Ctrl+ Tabw Visual Studio? Wyłączyłem wyskakujące okno nawigatora, ponieważ chcę tylko przełączać między elementami w kontrolce tabulatorów. Moim problemem jest niespójność tego, co robią przejścia do następnego i poprzedniego dokumentu.

Każdy inny program, który korzysta z kontrolki tabulatorów w otwartym dokumencie, który widziałem, używa Ctrl+, Tababy przechodzić od lewej do prawej i Shift+ Ctrl+, Tababy przechodzić od prawej do lewej. Program Visual Studio przerywa to, przechodząc do ostatniej wybranej karty. Nigdy nie wiadomo, na jakim dokumencie się skończysz, i nigdy nie jest tak samo dwa razy.

Jest to bardzo sprzeczne z intuicją. Czy to subtelny sposób, aby zachęcić wszystkich do otwarcia tylko dwóch dokumentów jednocześnie?


Powiedzmy, że mam kilka otwartych plików. Pracuję w jednym i muszę zobaczyć, co znajduje się w następnej zakładce po prawej stronie. W każdej innej aplikacji na powierzchni Ziemi Ctrl+ Tabmnie tam zaprowadzi. Ale w Visual Studio nie mam pojęcia, do której innej karty mnie zaprowadzi. Jeśli mam tylko dwa dokumenty otwarte, działa to świetnie. Jak tylko przejdziesz do trzech lub więcej, wszystkie zakłady są wyłączone, do której karty Visual Studio zdecydował się wysłać.

Problem polega na tym, że nie powinienem myśleć o narzędziu, powinno ono znikać w tle i powinienem myśleć o zadaniu. Obecne zachowanie tabulatorów wyciąga mnie z zadania i sprawia, że ​​muszę zwracać uwagę na narzędzie.


4
„Wyłączyłem wyskakujące okno nawigatora” ... Jak wyłączyłeś irytujące wyskakujące okno wyboru? To takie denerwujące, że migotanie za każdym razem, gdy naciskam Ctrl + Tab.
demoncodemonkey

31
Ach, rozumiem, w Narzędzia-> Opcje-> Klawiatura odwróciłem Ctrl + Tab z Window.NextDocumentWindowNav do Window.NextDocumentWindow (usunąłem „Nav”). To samo dotyczy Ctrl + Shift + Tab z Window.PreviousDocumentWindowNav.
demoncodemonkey

11
Czy to źle, że podoba mi się to zachowanie, ponieważ jest to jak Alt-Tab?
Theo Belaire

3
Wygląda na to, że Visual Studio porusza się po kartach przy użyciu zachowania „ostatnio używane” (MRU). Notepad ++ oferuje opcję włączenia / wyłączenia tego zachowania (wydaje się, że niektórym się to podoba). Naprawdę jednak chciałbym móc przejść do normalnego / intuicyjnego zachowania.
André Caron,

4
Szczerze mówiąc, nie podoba mi się, gdy program przechodzi cyklicznie w wizualnej kolejności tabulatorów. Zgadzam się z zachowaniem Visual Studio. Dla każdej karty ctrl + wraca do ostatnio używanej, a następnie do poprzednio używanej. Ten wzór istnieje już od bardzo dawna (VB6 lub wcześniej). Mam na myśli, użyj wzoru, który wolisz, ale jeśli wiesz, jak to działa, łatwiej docenić :)
Josh Robinson

Odpowiedzi:


227

W Visual Studio 2015 (jak również we wcześniejszych wersjach VS, ale musisz zainstalować Productivity Power Tools, jeśli używasz VS2013 lub niższej wersji), w Visual Studio są dwa nowe polecenia:

Window.NextTab i Window.PreviousTab

Po prostu zmień mapę z Ctrl+ Alt+ PageUp/ Ctrl+ Alt+ PageDownna Ctrl+ Tab/ Ctrl+ Shift+ Tabw:

Narzędzia menu -> Opcje -> Środowisko -> Klawiatura

Uwaga: We wcześniejszych wersjach, takich jak Visual Studio 2010, Window.NextTab i Window.PreviousTab były nazywane Window.NextDocumentWellTab i Window.PreviousDocumentWellTab .


1
To najlepsza odpowiedź dla visual studio 2010. To było bardzo pomocne. Akceptowane rozwiązanie makro jest gorsze od tego.
jmq

2
Brak wersji dla Visual Studio 2012
pułkownik Panic

4
To nie pomoże, jeśli używasz Visual Studio Express
BornToCode,

18
W Visual Studio 2012 nazwy poleceń zmieniły się nieznacznie. Teraz jest Window.NextTab i Window.PreviousTab .
JP ten Berge

3
@JP ten Berge - Przetestowałem to w VS 2012, a skrót Window.PreviousTab (Ctrl + Alt + PgUp) nie działa, jeśli korzystasz z widoku Razor (plik .cshtml). Bardzo denerwujące, chociaż Ctrl + Alt + PgDown nadal działa, więc nie jesteś całkowicie zablokowany. Istnieje również Window.NextDocumentWindow (Ctrl + F6), chociaż wydaje się, że przełącza tabulatory w dziwnej kolejności.
DGreen 30.04.13

70

Program Visual Studio 2010 ma wbudowany sposób na rozwiązanie tego problemu.

Domyślnie Ctrl+ Tabi Ctrl+ Shift+ Tabsą przypisane do Window.[Previous/Next]..Document, ale możesz, poprzez

Tools -> Options -> Environment -> Keyboard,

usuń te kluczowe przypisania i przypisz je, Window.[Next/Previous]Tababy dodać pożądane zachowanie.


5
Najwyraźniej ktoś pomylił uzasadnienie opinii - jeśli odpowiedź nie jest zgodna z pytaniem lub jeśli faktycznie jest przecząca, zasługuje na jedną ... Ale moja odpowiedź odpowiada na pytanie poprawnie, choć w mniejszym stopniu niż twoja odpowiedź. Czy to tylko dlatego, że moje oczekuje, że ludzie zrozumieją menu opcji zamiast „Tutaj, uruchom ten skrypt” lub „Zainstaluj ten dodatek!” ... Czy to nie jest strona dla programistów?
Zoey,

1
Ludzie mogli chcieć przełączać się między kartami dokumentów. Edycja „Window. [Next / Previuos] Tab” nie wpłynęła na moje zakładki dokumentu w VS2010, podczas gdy rozwiązanie @thepaulpage zrobiło to. +1 za czyste i wolne od dodatków podejście!
GnomeDePlume

Also¹, również pomyślałem, dlaczego ktoś mógłby zanegować twoją odpowiedź: Visual Studio 2010 miał dziwną wersję, która nie miała opcji «Klawiatura». Prawdopodobnie ten miał tę wersję, spojrzał na opcje i uznał, że odpowiedź jest zła, ponieważ z ich subiektywnego punktu widzenia rzeczywiście tak jest.
Cześć Anioł

1
Musiałem usunąć powiązanie z Window.[Previous|Next]DocumentWindowustawienia, aby to zadziałało (w VS2015). Domyślnie istniał dla niego osobny edytor tekstów, który wydawał się mieć priorytet.
Kat.

51

można to zmienić, przynajmniej w VS 2012 (myślę, że powinien działać również w 2010 roku).

1) TOOLS > Options > Environment > Keyboard

(Tak NARZĘDZIA, jego VS2012!) Teraz trzy skróty do sprawdzenia.

2) Window.NextDocumentWindow- możesz tam szybko dotrzeć, pisząc w okienku wyszukiwania u góry. To jest twój wróg . Usuń go, jeśli ci się nie podoba. Zmień go na coś innego (i nie zapomnij przycisku Przypisz ), jeśli chcesz mieć własny, ale pamiętaj o tym skrócie, cokolwiek to jest na końcu . Przyda się później.

(Mam na myśli to skrót, który pamięta twoją ostatnią kartę)

wprowadź opis zdjęcia tutaj

3) Teraz poszukaj Window.NextDocumentWindowNav- jest tak samo jak powyżej, ale pokazuje podgląd otwartych kart (za pomocą tego wyskakującego okienka możesz zbyt szybko przechodzić do innych okien). Jednak nigdy nie uważałem tego za pomocny. Wykonaj wszystkie czynności wymienione w kroku 2 (nie zapomnij pamiętać ).

4) Window.NextTab- twoja magiczna mikstura. Umożliwi to cykliczne przechodzenie między kartami w kolejności do przodu. Może chcesz CTRL+ TAB? Ponownie krok 2 i pamiętaj .

5) Teraz umieść kursor na klawiszach skrótu Naciśnij: pole tekstowe (nieważne, co jest aktualnie wybrane, nie zamierzasz przypisywać tym razem) i wpisz pierwszy z trzech (lub dwóch lub jednego) skrótów.

wprowadź opis zdjęcia tutaj

Zobaczysz skrót aktualnie używany przez: na liście. Upewnij się, że nie masz zduplikowanego wpisu dla skrótu. Na zdjęciu nie ma zduplikowanych wpisów. Jeśli masz (rzadkość), powiedz X, a następnie przejdź do X i usuń skrót. Powtórz ten krok dla innych skrótów.

6) Teraz powtórz 1-5 dla Previousskrótów (najlepiej dodawanie Shift).

7) Bonus: Schemat odwzorowania Wybierz VS2005 (w górnej części tej samej obudowie), więc teraz można dostać F2za przemianować członków, a nie CTRL+ R+ R, a F7do widoku kodu i nie CTRL+ ALT+ 0.

Jestem zdania, że ​​VS domyślnie ma rację. Uważam za niezwykle użyteczne, że VS zapamiętuje to, czego użyłem ostatnio, i sprawia, że ​​przełączanie jest łatwiejsze, podobnie jak robi to sam system operacyjny (na ALT+ TAB). Moja przeglądarka domyślnie robi to samo (Opera), choć wiem, że Firefox zachowuje się inaczej.


Nie uważam tego zachowania za antykoncepcyjne. ;-)
dotNET

opinia na górze tej odpowiedzi zawsze mnie wstrętna jako nieinformacyjna i (z powodu dużego rozmiaru) niepotrzebnie antagonistyczna.
thepaulpage

@thepaulpage Zaktualizowałem swoją odpowiedź. Powodem, dla którego musiałem wyrazić opinię, jest to, że wielu użytkowników (w tym OP) wyraziło opinię, że jest to sprzeczne z intuicją.
nawfal

16

W Visual Studio 2012 lub nowszym (2013, 2015, 2017 ...):

  1. Przeglądaj menu Narzędzia / Opcje / Środowisko / Klawiatura.
  2. Wyszukaj polecenie „Window.NextTab”, ustaw skrót na Ctrl+Tab
  3. Wyszukaj polecenie „Window.PreviousTab”, ustaw skrót na Ctrl+ Shift+Tab

wprowadź opis zdjęcia tutaj


4
Dla odniesienia domyślnie Ctrl + Tab i Ctrl + Shift + Tab są mapowane na polecenia „Window.NextDocumentWindowNav” i „Window.PreviousDocumentWindowNav”.
Rory O'Kane

8

Przejdź do wpisu na blogu Zakładka Visual Studio Makro Stupidifier Macro i skorzystaj z makra. Po zastosowaniu makra do instalacji programu Visual Studio możesz powiązać z nimi ulubione skróty klawiaturowe. Zwróć także uwagę na poprawkę rejestru w komentarzach, która nie wyświetlała dymka z makropoleceniem, ponieważ po pewnym czasie mogą się denerwować.


Najwyraźniej nadal psuje się w pewnych warunkach, ale jest to najlepszy sposób, aby faktycznie działał zgodnie z oczekiwaniami.
Jeff Cuscutis,

W VS 2010 możesz skonfigurować Ctrl + Tab i Ctrl + Shift + Tab, aby przełączać się między dokumentami tekstowymi, ale to nie działa z zakładkami projektanta lub BinaryEditor. Makro z powyższego wpisu na blogu jest jedyną metodą, która działa z większością typów okien dokumentów. Złożyłem także błąd w Microsoft, który ma więcej szczegółów ( goo.gl/K9rz ), i powiedzieli, że zmienią się Window.NextTabi Window.PreviousTabzapewnią przełączanie dokumentów innych niż MRU dla dokumentów w „następnej wersji Visual Studio”.
Greg Bray

7

Po kilku godzinach poszukiwań znalazłem rozwiązanie, jak przełączać się między otwartymi dokumentami za pomocą CTRL+, TABktóre poruszają się od lewej do prawej i SHIFT+ CTRL+, TABaby przejść od prawej do lewej.

Krótko mówiąc, musisz skopiować i wkleić to makro:

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

Makro pochodzi z: www.mrspeaker.net/2006/10/12/tab-un-stupidifier/

Jeśli nigdy nie dodasz makra do programu Visual Studio, istnieje bardzo przydatny link, jak to zrobić .


2
Czy nadal zajmuje to 10 sekund i miga ikoną zasobnika systemowego przy każdym kolejnym użyciu? Tak właśnie zrobił VS2005 i nie mogłem tego znieść ...
Roman Starkov

1
Romkyns: Tak, obawiam się. Nadal nie jest realnym rozwiązaniem.
David Foster,

1
Romkyns: tak, to prawda, za każdym razem, gdy uruchamiam makro, dymek pojawia się w zasobniku systemowym, wskazując, że makro jest uruchomione. aby pozbyć się tego balonu, możesz edytować rejestr systemu Windows i dodać następującą wartość DWORD: „DontShowMacrosBalloon” = 1, w tym kluczu: HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 9.0 (użyj 9.0 dla Visual Studio 2008; 8.0 dla 2005) . Balon znika, ale ikona zasobnika systemowego nadal będzie wyświetlana. Dla mnie to rozwiązanie jest wystarczająco dobre, nie znalazłem lepszego i nienawidzę zachowania orginalne ctrl + tab.
user410261,

6

Filozofia kolejności kart w Visual Studio jest bardzo sprzeczna z intuicją, ponieważ kolejność wyświetlanych kart różni się od logiki przełączania kart, co sprawia, że ​​kolejność kart jest całkowicie bezużyteczna .

Tak więc, dopóki nie pojawi się lepsze rozwiązanie, zmień układ okna (w Środowisko-> Ogólne) z dokumentów na kartach na wiele dokumentów; nie zmieni zachowania, ale zmniejszy zamieszanie spowodowane przez zakładki.

W ten sposób okaże się również bardziej przydatne DocumentWindowNav!


6

Ctl+ Alt+ PgUplub PgDnskróty działały, aby przełączyć następną / poprzednią kartę dla mnie ...


3
Nielogiczne jest to, że: jeśli pasek kart ma tylko poziome miejsce dla n Tab, te skróty nie spowodują, że tabulator będzie się wyświetlał cyklicznie dla kart, które w tej chwili nie są widoczne!
sergiol

5

Jestem w 100% zgodny z Jeffem.

Pracowałem nad Borland C ++ Builder od kilku lat, a jedną z funkcji, za którymi najbardziej tęsknię, jest „poprawne” porządkowanie kart przy pomocy Ctrl- Tab. Jak powiedział Jeff: „ Obecne zachowanie tabulatorów wyciąga mnie z zadania i sprawia, że ​​muszę zwracać uwagę na to narzędzie ”, tak właśnie się z tym czuję i jestem bardzo zaskoczony faktem, że nie ma wiele osób narzeka na to.

Myślę, że Ctrl- F6- NextDocumentWindowNav - porusza się po dokumentach na podstawie czasu ostatniej aktywacji dokumentu. To zachowanie jest podobne do tego, jak kiedyś zachowywały się aplikacje MDI.

Biorąc to pod uwagę, zwykle używam Ctrl+ F6do przełączania między 2 dokumentami (co jest całkiem przydatne w przełączaniu między plikami .cpp i .h podczas pracy nad projektem c ++), nawet jeśli istnieją więcej niż 2 aktualnie otwarte dokumenty. Na przykład, jeśli masz otwartych 10 dokumentów (Tab1, Tab2, Tab3, ...., Tab10), klikam Tab1, a następnie Tab2. Kiedy zrobię Ctrl+ F6i zwolnię klawisze, przejdę do Tab1. Ponowne naciśnięcie Ctrl+ F6przeniesie mnie z powrotem do Tab2.


5

Myślę, że chcesz, co VSS nazywa Next (Poprzedni) DocumentWindow. Domyślnie jest on Ctrl(-Shift)-F6na mojej VSS 8. Ctrl(-Shift)-Tabmają Next(Previous)DocumentWindowNav. Możesz zmienić przypisania klawiszy za pomocą Narzędzia / Opcje / Klawiatura.


3
Ctrl- (Shift-) F6 nie prowadzi do lewej lub prawej karty. ma taką samą kolejność jak Ctrl-Tab, ale bez irytującego okna.
shoosh,

1
Prawidłowo ... Visual Studio 2010 ma Window.NextTab i Window.PreviousTab, który zmienia dokumenty nie oparte na MRU, ale nie działa ze wszystkimi typami dokumentów: connect.microsoft.com/VisualStudio/feedback/details/571750/...
Greg Bray

4

W gałęzi rejestru: HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 9.0 dodaj DWORD o nazwie „UseMRUDocOrdering” o wartości 1. Porządkuje dokumenty tak, aby ostatnio używane były umieszczane po lewej stronie. To nie jest idealne, ale lepsze niż domyślne niewłaściwe zachowanie.


0

Zaktualizowano do VS 2017+, gdzie zgodnie z komentarzem @ J-Boba pod odpowiedzią @ thepaulpage (wyróżnienie dodane):

Wygląda na to, że polecenia zmieniły się ponownie. Jest teraz 2017 r., A skróty klawiaturowe nazywają się Otwórz następny edytor i Otwórz poprzedni edytor . Nie potrzebujesz do tego żadnych rozszerzeń.

Opcje można znaleźć w Ustawieniach, do których można uzyskać dostęp za pomocą symbolu koła zębatego w lewym dolnym rogu lub [Ctrl]+,polecenia.


-5

Nie używam Visual Studio ( tak, tak naprawdę nie używam go ), ale AutoHotkey może mapować dowolny skrót klawiszowy globalnie lub w określonej aplikacji:

#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

Są to dwa remapowania mojego głównego skryptu AutoHotKey. Myślę, że jest to doskonałe narzędzie do tego typu zadań.


3
Przykro nam, ale problem polega na tym, że nie ma odpowiedniego klucza, więc to nie pomoże.
Roman Starkov,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.