Ändern des Verhaltens von Strg + Tab für das Wechseln zwischen Dokumenten in Visual Studio

286

Ist es möglich zu ändern, wie Ctrl+ Tabund Shift+ Ctrl+ Tabin Visual Studio funktionieren? Ich habe das Popup-Navigatorfenster deaktiviert, da ich nur zwischen Elementen im Registersteuerelement wechseln möchte. Mein Problem ist die Inkonsistenz bei der Umstellung auf das nächste und das vorherige Dokument.

Jedes andere Programm, das ein Tab-Steuerelement zum Öffnen eines Dokuments verwendet, verwendet Ctrl+ Tab, um von links nach rechts und Shift+ Ctrl+ Tabvon rechts nach links zu wechseln . Visual Studio unterbricht dies mit dem Sprung zur zuletzt ausgewählten Registerkarte. Sie können nie wissen, auf welchem ​​Dokument Sie landen werden, und es ist nie zweimal der gleiche Weg.

Es ist sehr eingängig. Ist dies eine subtile Möglichkeit, alle zu ermutigen, immer nur zwei Dokumente gleichzeitig zu öffnen?


Angenommen, ich habe ein paar Dateien geöffnet. Ich arbeite in einem und ich muss sehen, was sich auf der nächsten Registerkarte rechts befindet. In jeder anderen Anwendung auf der Erde bringt mich Ctrl+ Tabdorthin. In Visual Studio habe ich jedoch keine Ahnung, zu welcher der anderen Registerkarten ich gelangen soll. Wenn ich immer nur zwei Dokumente offen habe, funktioniert das großartig. Sobald Sie zu drei oder mehr wechseln, sind alle Wetten deaktiviert, auf welche Registerkarte Visual Studio Sie senden möchte.

Das Problem dabei ist, dass ich nicht über das Tool nachdenken muss, es sollte in den Hintergrund treten und ich sollte über die Aufgabe nachdenken. Das aktuelle Tab-Verhalten zieht mich immer wieder aus der Aufgabe heraus und lässt mich auf das Tool achten.

Jeff Cuscutis
quelle
4
"Ich habe das Popup-Navigatorfenster deaktiviert" ... Wie haben Sie das nervige Popup-Fenster für das Auswahlfenster deaktiviert? Es ist so ärgerlich, jedes Mal zu flackern, wenn ich Strg + Tab drücke.
Demoncodemonkey
31
Ich habe es verstanden, in Extras-> Optionen-> Tastatur habe ich Strg + Tab von Window.NextDocumentWindowNav zu Window.NextDocumentWindow neu zugeordnet (das "Nav" entfernt). Und das Gleiche gilt für Strg + Umschalt + Tab mit Window.PreviousDocumentWindowNav.
Demoncodemonkey
11
Ist es falsch, dass ich dieses Verhalten mag, da es wie Alt-Tab ist?
Theo Belaire
3
Visual Studio scheint mit dem "zuletzt verwendeten" (MRU) Verhalten durch Registerkarten zu navigieren. Notepad ++ bietet eine Option zum Aktivieren / Deaktivieren dieses Verhaltens (so scheint es einigen Leuten zu gefallen). Ich würde aber wirklich gerne zu normalem / intuitivem Verhalten wechseln können.
André Caron
4
Ehrlich gesagt mag ich es nicht, wenn ein Programm in visueller Tab-Reihenfolge durchläuft. Ich stimme dem Verhalten von Visual Studio zu. Für jede Strg + Tabulatortaste wird auf die zuletzt verwendete und die zuletzt verwendete Registerkarte zurückgegriffen. Das Muster ist schon sehr lange da (VB6 oder bevor ich denke). Ich meine, verwenden Sie das Muster, das Sie bevorzugen, aber wenn Sie wissen, wie es funktioniert, ist es einfacher zu schätzen :)
Josh Robinson

Antworten:

227

In Visual Studio 2015 (sowie in früheren Versionen von VS, aber Sie müssen Productivity Power Tools installieren, wenn Sie VS2013 oder niedriger verwenden) gibt es in Visual Studio zwei neue Befehle:

Window.NextTab und Window.PreviousTab

Ordnen Sie sie einfach von Ctrl+ Alt+ PageUp/ Ctrl+ Alt+ PageDownauf Ctrl+ Tab/ Ctrl+ Shift+ Tabin:

Menü Extras -> Optionen -> Umgebung -> Tastatur

Hinweis: In früheren Versionen wie Visual Studio 2010 wurden Window.NextTab und Window.PreviousTab als Window.NextDocumentWellTab und Window.PreviousDocumentWellTab bezeichnet .

thepaulpage
quelle
1
Dies ist jetzt die beste Antwort für Visual Studio 2010. Dies war sehr hilfreich. Die akzeptierte Makrolösung ist dieser unterlegen.
jmq
2
Noch keine Version für Visual Studio 2012
Colonel Panic
4
Dies hilft auch nicht, wenn Sie Visual Studio Express verwenden
BornToCode
18
Mit Visual Studio 2012 haben sich die Befehlsnamen geringfügig geändert. Es ist jetzt Window.NextTab und Window.PreviousTab .
JP Ten Berge
3
@JP ten Berge - Ich habe dies in VS 2012 getestet, und die Verknüpfung Window.PreviousTab (Strg + Alt + PgUp) funktioniert nicht, wenn Sie sich in einer Razor-Ansicht (CSHML-Datei) befinden. Sehr ärgerlich, obwohl Strg + Alt + PgDown immer noch funktioniert, sodass Sie nicht vollständig stecken bleiben. Es gibt auch Window.NextDocumentWindow (Strg + F6), obwohl dies die Registerkarten in einer seltsamen Reihenfolge zu wechseln scheint.
DGreen
70

In Visual Studio 2010 ist eine Möglichkeit integriert, dies zu lösen.

Standardmäßig sind Ctrl+ Tabund Ctrl+ Shift+ Tabzugewiesen Window.[Previous/Next]..Document, aber Sie können durch

Tools -> Options -> Environment -> Keyboard,

Entfernen Sie diese Schlüsselzuweisungen und weisen Sie sie neu zu Window.[Next/Previous]Tab, um das gewünschte Verhalten hinzuzufügen.

Zoey
quelle
5
Anscheinend hat jemand die Gründe für eine Ablehnung verwirrt. Wenn eine Antwort nicht mit der Frage übereinstimmt oder tatsächlich negativ ist, verdient sie eine ... Aber meine beantwortet die Frage richtig, wenn auch weniger als Ihre Antwort. Erwartet ich nur, dass die Leute tatsächlich ein Optionsmenü verstehen, anstatt "Hier, führen Sie dieses Skript aus" oder "Installieren Sie dieses Addon!" ... Ist dies nicht eine Site für Programmierer?
Zoey
1
Möglicherweise haben Benutzer versucht, zwischen Dokumentregistern zu wechseln. Das Bearbeiten der Registerkarte "Fenster. [Weiter / Vorherige]]" hatte für mich in VS2010 keine Auswirkungen auf die Dokumentregisterkarten, während die Lösung von @thepaulpage dies tat. +1 für den klaren und addonfreien Ansatz!
GnomeDePlume
¹, auch ich hatte gerade einen Gedanken, warum jemand Ihre Antwort ablehnen könnte: Visual Studio 2010 hatte eine seltsame Version, die die Option «Tastatur» nicht hatte. Wahrscheinlich hatte derjenige diese Version, schaute sich die Optionen an und entschied, dass die Antwort falsch war, da dies mit ihrem subjektiven Standpunkt tatsächlich so ist.
Hi-Angel
1
Ich musste die Bindung aus der Window.[Previous|Next]DocumentWindowEinstellung entfernen, damit dies funktioniert (in VS2015). Standardmäßig gab es eine separate Texteditor-Bindung, die Priorität zu haben schien.
Kat
51

Es kann zumindest in VS 2012 geändert werden (ich denke, es sollte auch für 2010 funktionieren).

1) TOOLS > Options > Environment > Keyboard

(Ja WERKZEUGE, es ist VS2012!) Jetzt drei Verknüpfungen zu überprüfen.

2) Window.NextDocumentWindow- Sie können schnell dorthin gelangen, indem Sie oben im Suchbereich tippen. Das ist dein Feind . Entfernen Sie es, wenn Sie es nicht mögen. Ändern Sie es in etwas anderes (und vergessen Sie nicht die Schaltfläche Zuweisen ), wenn Sie Ihre eigene haben möchten, aber denken Sie an diese Verknüpfung, was auch immer sie am Ende ist . Es wird später nützlich sein.

(Ich meine, dies ist die Verknüpfung, die sich an Ihre letzte Registerkarte erinnert.)

Geben Sie hier die Bildbeschreibung ein

3) Suchen Sie nun nach Window.NextDocumentWindowNav- dies ist das gleiche wie oben, zeigt jedoch eine Vorschau der geöffneten Registerkarten (Sie können mit diesem Popup zu schnell zu anderen Fenstern navigieren). Ich fand das allerdings nie hilfreich. Tun Sie alles, was in Schritt 2 erwähnt wurde (vergessen Sie nicht, sich zu erinnern ).

4) Window.NextTab- dein Zaubertrank. Auf diese Weise können Sie die Registerkarten in der Vorwärtsreihenfolge durchlaufen. Vielleicht willst du CTRL+ TAB? Wieder Schritt 2 und denken Sie daran .

5) Setzen Sie nun den Cursor in das Textfeld Drücken Sie die Tastenkombinationen: Text (egal was aktuell ausgewählt ist, Sie werden diesmal nicht zuweisen ) und geben Sie zuerst die drei (oder zwei oder eine) Tastenkombinationen ein.

Geben Sie hier die Bildbeschreibung ein

Sie sehen die Verknüpfung, die derzeit verwendet wird von: aufgelistet. Stellen Sie sicher, dass Sie keinen doppelten Eintrag für die Verknüpfung haben. Im Bild gibt es keine doppelten Einträge. Wenn Sie (eine Seltenheit) haben, sagen Sie X, gehen Sie zu X und entfernen Sie die Verknüpfung. Wiederholen Sie diesen Schritt auch für andere Verknüpfungen.

6) Wiederholen Sie nun 1-5 auch für PreviousVerknüpfungen (vorzugsweise Hinzufügen Shift).

7) Bonus: Wählen Sie das VS2005-Zuordnungsschema (oben im selben Feld), sodass Sie jetzt F2für Mitglieder umbenennen und nicht CTRL+ R+ Rund F7für Code anzeigen und nicht CTRL+ ALT+ erhalten 0.

Ich bin der Meinung, dass VS es standardmäßig richtig gemacht hat. Ich finde es äußerst nützlich, dass VS sich an das erinnert, was ich zuletzt verwendet habe, und das Umschalten erleichtert, ähnlich wie das Betriebssystem selbst (auf ALT+ TAB). Mein Browser macht das auch standardmäßig (Opera), obwohl ich weiß, dass sich Firefox anders verhält.

nawfal
quelle
Ich finde dieses Verhalten auch nicht anti-nicht-kontraintuitiv. ;-)
dotNET
Die Meinung oben in dieser Antwort hat mich immer als nicht informativ und (wegen der Größe) unnötig antagonistisch abgehört.
Thepaulpage
@thepaulpage Ich habe meine Antwort aktualisiert. Der Grund, warum ich eine Meinung abgeben musste, ist, dass viele Benutzer (einschließlich OP) ihre Meinung abgegeben haben, dass dies nicht intuitiv ist.
Nawfal
16

In Visual Studio 2012 oder höher (2013, 2015, 2017 ...):

  1. Durchsuchen Sie das Menü Extras / Optionen / Umgebung / Tastatur.
  2. Suchen Sie nach dem Befehl 'Window.NextTab' und setzen Sie die Verknüpfung auf Ctrl+Tab
  3. Suchen Sie nach dem Befehl 'Window.PreviousTab' und setzen Sie die Verknüpfung auf Ctrl+ Shift+Tab

Geben Sie hier die Bildbeschreibung ein

Oberst Panik
quelle
4
Als Referenz werden Strg + Tab und Strg + Umschalt + Tab standardmäßig den Befehlen 'Window.NextDocumentWindowNav' und 'Window.PreviousDocumentWindowNav' zugeordnet.
Rory O'Kane
8

Navigieren Sie zum Blog-Beitrag Visual Studio Tab Undumbifier Macro und verwenden Sie das Makro. Nachdem Sie das Makro auf Ihre Installation von Visual Studio angewendet haben, können Sie Ihre bevorzugten Tastaturkürzel daran binden. Beachten Sie auch die Registrierungskorrektur in den Kommentaren, weil die Makro-Sprechblase nicht angezeigt wird, da sie nach einer Weile möglicherweise ärgerlich wird.

user178908
quelle
Es bricht anscheinend immer noch unter bestimmten Bedingungen, aber dies ist die schwierigste Methode, um tatsächlich wie gewünscht zu arbeiten.
Jeff Cuscutis
In VS 2010 können Sie Strg + Tab und Strg + Umschalt + Tab so konfigurieren, dass zwischen Textdokumenten gewechselt wird. Dies funktioniert jedoch nicht mit Designer-Registerkarten oder dem BinaryEditor. Das Makro aus dem obigen Blog-Beitrag ist die einzige Methode, die mit den meisten Dokumentfenstertypen funktioniert. Ich habe auch einen Fehler bei Microsoft eingereicht, der weitere Details enthält ( goo.gl/K9rz ), und sie sagten, dass sie Änderungen vornehmenWindow.NextTab und Window.PreviousTabeine Nicht-MRU-Umschaltung für Dokumente in der "nächsten Visual Studio-Version" bereitstellen werden.
Greg Bray
7

Nach ein paar Stunden der Suche fand ich eine Lösung, wie man zwischen offenen Dokumenten mit CTRL+ TABwechseln kann, die sich von links nach rechts bewegen, und SHIFT+ CTRL+ TAB, um von rechts nach links zu gehen.

Kurz gesagt, Sie müssen dieses Makro kopieren und einfügen:

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

Das Makro stammt von: www.mrspeaker.net/2006/10/12/tab-un-stupidifier/

Wenn Sie Visual Studio niemals ein Makro hinzufügen, gibt es einen sehr nützlichen Link dazu .

user410261
quelle
2
Dauert es beim ersten Mal noch 10 Sekunden, und jedes Mal, wenn Sie es verwenden, blinkt ein Taskleistensymbol? Das hat VS2005 getan, und ich konnte es nicht ertragen ...
Roman Starkov
1
Romkyns: Ja, ich fürchte. Immer noch keine praktikable Lösung.
David Foster
1
Romkyns: Ja, es stimmt, jedes Mal, wenn ich das Makro ausführe, erscheint eine Sprechblase in der Taskleiste, um anzuzeigen, dass das Makro ausgeführt wird. Um diesen Ballon zu entfernen, können Sie die Windows-Registrierung bearbeiten und den folgenden DWORD-Wert hinzufügen: "DontShowMacrosBalloon" = 1 in diesem Schlüssel: HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 9.0 (verwenden Sie 9.0 für Visual Studio 2008; 8.0 für 2005). . Die Sprechblase verschwindet, aber das Taskleistensymbol wird weiterhin angezeigt. Für mich ist diese Lösung gut genug, ich habe keine bessere gefunden und ich hasse das Verhalten von orginalne Strg + Tab.
user410261
6

Die Philosophie der Registerkartenreihenfolge in Visual Studio ist sehr intuitiv, da sich die Reihenfolge der angezeigten Registerkarten von der Logik zum Wechseln der Registerkarten unterscheidet und die Reihenfolge der Registerkarten völlig unbrauchbar wird .

Ändern Sie das Fensterlayout (unter Umgebung-> Allgemein) von Dokumenten mit Registerkarten in Dokumente mit mehreren Dokumenten, bis eine bessere Lösung gefunden wird. Das Verhalten wird dadurch nicht geändert, aber die durch die Registerkarten verursachte Verwirrung wird verringert.

Auf diese Weise finden Sie auch das DocumentWindowNav nützlicher!

Peter Mortensen
quelle
6

Ctl+ Alt+ PgUpoder PgDnVerknüpfungen haben funktioniert, um die nächste / vorherige Registerkarte für mich sofort zu aktivieren ...

FlashJordan
quelle
3
Das Unlogische ist: Wenn Ihre Registerkartenleiste nur horizontalen Platz für n Registerkarten hat, wird durch diese Verknüpfungen die Registerkarte nicht für die Registerkarten gewechselt, die im Moment nicht sichtbar sind!
Sergiol
5

Ich bin zu 100% mit Jeff einverstanden.

Ich habe mehrere Jahre an Borland C ++ Builder gearbeitet und eine der Funktionen, die ich am meisten vermisse, ist die 'richtige' Reihenfolge der Dokumententabellen mit Ctrl- Tab. Wie Jeff sagte: " Das aktuelle Tab-Verhalten zieht mich immer wieder aus der Aufgabe heraus und ich muss auf das Tool achten. " Genau so fühle ich mich dabei, und ich bin sehr überrascht, dass es keine gibt viele Leute beschweren sich darüber.

Ich denke Ctrl- F6- NextDocumentWindowNav - navigiert Dokumente basierend auf der zuletzt aktivierten Zeit des Dokuments. Dieses Verhalten ähnelt weitgehend dem Verhalten von MDI-Anwendungen in früheren Zeiten.

In Anbetracht dessen verwende ich normalerweise Ctrl+ F6, um zwischen zwei Dokumenten zu wechseln (was beim Wechseln zwischen CPP- und H-Dateien bei der Arbeit an einem C ++ - Projekt sehr praktisch ist), selbst wenn mehr als zwei aktuell geöffnete Dokumente vorhanden sind. Wenn Sie beispielsweise 10 Dokumente geöffnet haben (Tab1, Tab2, Tab3, ...., Tab10), klicke ich auf Tab1 und dann auf Tab2. Wenn ich Ctrl+ mache F6und die Tasten loslasse, springe ich zu Tab1. Durch erneutes Drücken von Ctrl+ F6komme ich zurück zu Tab2.

Kei
quelle
5

Ich denke, Sie möchten, was VSS Next (Previous) DocumentWindow nennt. Standardmäßig ist es Ctrl(-Shift)-F6auf meinem VSS 8 eingeschaltet. Auf Ctrl(-Shift)-Tabhaben sie Next(Previous)DocumentWindowNav. Sie können die Tastenbelegung über Extras / Optionen / Tastatur ändern.

Buti-Oxa
quelle
3
Strg- (Umschalt-) F6 bringt Sie nicht zur linken oder rechten Registerkarte. Es ist die gleiche Reihenfolge wie Strg-Tab, aber ohne das nervige Fenster.
Shoosh
1
Richtig ... Visual Studio 2010 verfügt über Window.NextTab und Window.PreviousTab, die nicht auf MRU basierende Dokumentänderungen ausführen, jedoch nicht mit allen Dokumenttypen funktionieren
Greg Bray
4

Fügen Sie im Registrierungszweig: HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 9.0 das DWORD mit dem Namen "UseMRUDocOrdering" mit dem Wert 1 hinzu. Es werden die zuletzt verwendeten Dokumente links platziert. Es ist nicht perfekt, aber besser als das Standard-Fehlverhalten.

RiFF RAFF
quelle
0

Aktualisiert auf VS 2017+, wo laut dem Kommentar von @ J-Bob unter der Antwort von @ thepaulpage (Hervorhebung hinzugefügt):

Anscheinend haben sich die Befehle wieder geändert. Es ist jetzt 2017 und die Tastaturkürzel heißen Open Next Editor und Open Previous Editor . Sie benötigen hierfür keine Erweiterungen.

Sie finden die Optionen unter Einstellungen, auf die Sie über das Zahnradsymbol unten links oder über den [Ctrl]+,Befehl zugreifen können .

JWCS
quelle
-5

Ich verwende Visual Studio nicht ( ja, wirklich, ich verwende es nicht ), aber AutoHotkey kann jeden Hotkey global oder in einer bestimmten Anwendung neu zuordnen:

#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

Dies sind zwei Neuzuordnungen meines AutoHotKey-Hauptskripts. Ich denke, es ist ein ausgezeichnetes Werkzeug für diese Art von Aufgaben.

PabloG
quelle
3
Entschuldigung, aber das Problem ist, dass es keinen Schlüssel gibt, der das Richtige tut. Das hilft also nicht.
Roman Starkov