Modification du comportement Ctrl + Tab pour passer d'un document à l'autre dans Visual Studio

286

Est-il possible de changer le fonctionnement de Ctrl+ Tabet Shift+ Ctrl+ Tabdans Visual Studio? J'ai désactivé la fenêtre du navigateur contextuel, car je souhaite uniquement basculer entre les éléments du contrôle onglet. Mon problème est l'incohérence de ce que fait le passage au document suivant et précédent.

Tous les autres programmes qui utilisent un contrôle onglet pour un document ouvert que j'ai vu utilisent Ctrl+ Tabpour se déplacer de gauche à droite et Shift+ Ctrl+ Tabpour aller de droite à gauche. Visual Studio rompt cela en sautant au dernier onglet sélectionné. Vous ne pouvez jamais savoir sur quel document vous vous retrouverez, et ce n'est jamais la même manière deux fois.

C'est très contre-intuitif. Est-ce une manière subtile d'encourager tout le monde à n'avoir que deux documents ouverts à la fois?


Disons que j'ai quelques fichiers ouverts. Je travaille dans un, et j'ai besoin de voir ce qui est dans l'onglet suivant à droite. Dans toutes les autres applications sur la surface de la Terre, Ctrl+ Tabm'y amènera. Mais dans Visual Studio, je n'ai aucune idée des autres onglets vers lesquels il m'emmènera. Si je n'ai que deux documents ouverts, cela fonctionne très bien. Dès que vous passez à trois ou plus, tous les paris sont désactivés sur l'onglet dans lequel Visual Studio a décidé de vous envoyer.

Le problème, c'est que je ne devrais pas avoir à penser à l'outil, il devrait s'effacer en arrière-plan et je devrais penser à la tâche. Le comportement actuel des onglets ne cesse de me tirer de la tâche et m'oblige à prêter attention à l'outil.

Jeff Cuscutis
la source
4
"J'ai désactivé la fenêtre du navigateur contextuel" ... Comment avez-vous désactivé la fenêtre ennuyeuse de sélection? C'est tellement ennuyeux de simplement scintiller chaque fois que j'appuie sur Ctrl + Tab.
demoncodemonkey
31
Ah j'ai compris, dans Outils-> Options-> Clavier, j'ai remappé Ctrl + Tab de Window.NextDocumentWindowNav à Window.NextDocumentWindow (supprimé le "Nav"). Et la même chose avec Ctrl + Maj + Tab avec Window.PreviousDocumentWindowNav.
demoncodemonkey
11
Est-ce mal que j'aime ce comportement, car c'est comme alt-tab?
Theo Belaire
3
Visual Studio semble naviguer dans les onglets en utilisant le comportement «MRU (dernier utilisé)». Notepad ++ offre une option pour activer / désactiver ce comportement (il semble donc que certaines personnes l'aiment). J'aimerais vraiment pouvoir passer à un comportement régulier / intuitif.
André Caron
4
Honnêtement, je n'aime pas quand un programme passe en revue par tabulation visuelle. Je suis d'accord avec le comportement de Visual studio. Pour chaque ctrl + tab, il revient à la dernière utilisée, puis à la dernière utilisée avant. Le motif existe depuis très longtemps (VB6 ou avant je pense). Je veux dire, utilisez le modèle que vous préférez, mais si vous savez comment cela fonctionne, il est plus facile à apprécier :)
Josh Robinson

Réponses:

227

Dans Visual Studio 2015 (ainsi que dans les versions précédentes de VS, mais vous devez installer Productivity Power Tools si vous utilisez VS2013 ou une version antérieure), il existe deux nouvelles commandes dans Visual Studio:

Window.NextTab et Window.PreviousTab

Allez simplement les remapper de Ctrl+ Alt+ PageUp/ Ctrl+ Alt+ PageDownà Ctrl+ Tab/ Ctrl+ Shift+ Tabdans:

Outils de menu -> Options -> Environnement -> Clavier

Remarque: Dans les versions antérieures telles que Visual Studio 2010, Window.NextTab et Window.PreviousTab étaient nommées Window.NextDocumentWellTab et Window.PreviousDocumentWellTab .

thepaulpage
la source
1
C'est la meilleure réponse maintenant pour Visual Studio 2010. Cela a été très utile. La macro solution acceptée est inférieure à celle-ci.
jmq
2
Pas encore de version pour Visual Studio 2012
Colonel Panic
4
Cela n'aidera pas non plus si vous utilisez Visual Studio Express
BornToCode
18
Avec Visual Studio 2012, les noms des commandes ont légèrement changé. C'est maintenant Window.NextTab et Window.PreviousTab .
JP ten Berge
3
@JP ten Berge - J'ai testé cela dans VS 2012, et le raccourci Window.PreviousTab (Ctrl + Alt + PgUp) ne fonctionne pas si vous êtes sur une vue Razor (fichier .cshtml). Très ennuyeux, bien que Ctrl + Alt + PgDown fonctionne toujours, donc vous n'êtes pas complètement coincé. Il y a aussi Window.NextDocumentWindow (Ctrl + F6) bien que cela semble faire défiler les onglets dans un ordre étrange.
DGreen
70

Visual Studio 2010 a, intégré, un moyen de résoudre ce problème.

Par défaut, Ctrl+ Tabet Ctrl+ Shift+ Tabsont affectés à Window.[Previous/Next]..Document, mais vous pouvez, via

Tools -> Options -> Environment -> Keyboard,

supprimez ces affectations clés et réaffectez-les à Window.[Next/Previous]Tabpour ajouter le comportement souhaité.

Zoey
la source
5
Apparemment, quelqu'un a confondu le raisonnement derrière un downvote - Si une réponse n'est pas conforme à la question ou si elle est réellement négative, elle en mérite un ... Mais le mien répond correctement à la question, bien que moins que votre réponse. Est-ce juste que le mien s'attend à ce que les gens comprennent réellement un menu d'options plutôt que "Ici, exécutez ce script" ou, "Installez cet addon!" ... N'est-ce pas un site pour les programmeurs?
Zoey
1
Il se peut que les utilisateurs cherchent à basculer entre les onglets de document. La modification de l'onglet "Fenêtre. [Next / Previuos]" n'a pas affecté les onglets de document pour moi dans VS2010, contrairement à la solution de @thepaulpage. +1 pour une approche claire et sans addon!
GnomeDePlume
⁺¹, je me suis aussi demandé pourquoi quelqu'un pouvait voter contre votre réponse: Visual Studio 2010 avait une version bizarre qui n'avait pas l'option «Clavier». Donc, probablement, celui qui avait cette version, a examiné les options et a décidé que la mauvaise réponse, car avec leur point de vue subjectif, c'est effectivement le cas.
Hi-Angel
1
J'ai dû supprimer la liaison du Window.[Previous|Next]DocumentWindowparamètre pour que cela fonctionne (dans VS2015). Par défaut, il y avait un éditeur de texte distinct qui semblait prioritaire.
Kat
51

il peut être changé, au moins dans VS 2012 (je pense que cela devrait aussi fonctionner pour 2010).

1) TOOLS > Options > Environment > Keyboard

(Oui OUTILS, son VS2012!) Maintenant trois raccourcis à vérifier.

2) Window.NextDocumentWindow- vous pouvez y accéder rapidement en tapant sur le volet de recherche en haut. Maintenant, c'est votre ennemi . Retirez-le si vous ne l'aimez pas. Changez-le en autre chose (et n'oubliez pas le bouton Assigner ) si vous voulez avoir le vôtre, mais n'oubliez pas ce raccourci quel qu'il soit à la fin . Cela vous sera utile plus tard.

(Je veux dire que c'est le raccourci qui se souvient de votre dernier onglet)

entrez la description de l'image ici

3) Recherchez maintenant Window.NextDocumentWindowNav- c'est la même chose que ci-dessus mais montre un aperçu des onglets ouverts (vous pouvez naviguer vers d'autres fenêtres trop rapidement avec cette fenêtre contextuelle). Je n'ai jamais trouvé cela utile cependant. Faites tout ce qui est mentionné à l'étape 2 (n'oubliez pas de vous en souvenir ).

4) Window.NextTab- votre potion magique. Cela vous permettrait de parcourir les onglets dans l'ordre de transfert. Peut-être voulez-vous CTRL+ TAB? Encore une fois l'étape 2 et rappelez - vous .

5) Maintenant, placez le curseur dans les touches de raccourci: zone de texte (peu importe ce qui est actuellement sélectionné, vous n'allez pas affecter cette fois), et tapez le premier des trois (ou deux ou un) raccourcis.

entrez la description de l'image ici

Vous verrez le raccourci actuellement utilisé par: répertorié. Assurez-vous que vous n'avez aucune entrée en double pour le raccourci. Dans l'image, il n'y a pas d'entrées en double. Dans le cas où vous avez (une rareté), dites X, puis allez à X et supprimez le raccourci. Répétez également cette étape pour les autres raccourcis.

6) Maintenant, répétez également 1-5 pour les Previousraccourcis (en ajoutant de préférence Shift).

7) Bonus: Sélectionnez le schéma de mappage VS2005 (en haut de la même case), vous obtenez donc maintenant F2pour les membres Renommer et non CTRL+ R+ R, et F7pour Afficher le code et non CTRL+ ALT+ 0.

Je suis d'avis que VS a raison par défaut. Je trouve extrêmement utile que VS se souvienne de ce que j'ai utilisé en dernier et facilite la commutation, un peu comme ce que fait le système d'exploitation lui-même (sur ALT+ TAB). Mon navigateur fait la même chose par défaut (Opera), bien que je sache que Firefox se comporte différemment.

nawfal
la source
Je ne trouve pas ce comportement anti-non-contre-intuitif aussi. ;-)
dotNET
l'opinion en haut de cette réponse m'a toujours mis sur écoute comme non informative et (en raison de la grande taille) inutilement antagoniste.
thepaulpage
@thepaulpage J'ai mis à jour ma réponse. La raison pour laquelle j'ai dû donner un avis est que de nombreux utilisateurs (y compris OP) avaient donné leur avis que c'était contre-intuitif.
nawfal
16

Dans Visual Studio 2012 ou version ultérieure (2013, 2015, 2017 ...):

  1. Parcourez le menu Outils / Options / Environnement / Clavier.
  2. Recherchez la commande 'Window.NextTab', définissez le raccourci sur Ctrl+Tab
  3. Recherchez la commande 'Window.PreviousTab', définissez le raccourci sur Ctrl+ Shift+Tab

entrez la description de l'image ici

Colonel Panic
la source
4
Pour référence, par défaut, Ctrl + Tab et Ctrl + Maj + Tab sont mappés aux commandes "Window.NextDocumentWindowNav" et "Window.PreviousDocumentWindowNav".
Rory O'Kane
8

Accédez au billet de blog Macro anti-stupidificateur de l'onglet Visual Studio et utilisez la macro. Après avoir appliqué la macro à votre installation de Visual Studio, vous pouvez leur lier vos raccourcis clavier préférés. Notez également le correctif de registre dans les commentaires pour ne pas afficher le ballon de macro car ils pourraient devenir ennuyeux après un certain temps.

user178908
la source
Il se casse apparemment encore dans certaines conditions, mais c'est le plus clément pour fonctionner comme vous le souhaitez.
Jeff Cuscutis, le
Dans VS 2010, vous pouvez configurer Ctrl + Tab et Ctrl + Maj + Tab pour basculer entre les documents texte, mais cela ne fonctionne pas avec les onglets du concepteur ou BinaryEditor. La macro de l'article de blog ci-dessus est la seule méthode qui fonctionne avec la majorité des types de fenêtre de document. J'ai également déposé un bogue avec Microsoft qui contient plus de détails ( goo.gl/K9rz ), et ils ont dit qu'ils changeraient Window.NextTabet Window.PreviousTabfourniraient une commutation non MRU pour les documents dans la "prochaine version de Visual Studio".
Greg Bray
7

Après quelques heures de recherche, j'ai trouvé une solution pour basculer entre les documents ouverts en utilisant CTRL+ TABqui se déplacent de gauche à droite et SHIFT+ CTRL+ TABpour aller de droite à gauche.

En bref, vous devez copier et coller cette macro:

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

La macro provient de: www.mrspeaker.net/2006/10/12/tab-un-stupidifier/

Si vous n'ajoutez jamais de macro à Visual Studio, il existe un lien très utile pour le faire .

user410261
la source
2
Faut-il encore 10 secondes pour le faire la première fois et faire clignoter une icône de la barre d'état système chaque fois que vous l'utilisez? C'est ce que VS2005 a fait, et je ne pouvais pas le supporter ...
Roman Starkov
1
Romkyns: Oui, j'ai peur. Ce n'est toujours pas une solution viable.
David Foster
1
Romkyns: oui c'est vrai, chaque fois que j'exécute la macro, une bulle apparaît dans la barre d'état système pour indiquer que la macro est en cours d'exécution. pour vous débarrasser de ce ballon, vous pouvez modifier le Registre Windows et ajouter la valeur DWORD suivante: "DontShowMacrosBalloon" = 1, dans cette clé: HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 9.0 (utilisez 9.0 pour Visual Studio 2008; 8.0 pour 2005) . Le ballon disparaît mais l'icône de la barre d'état système apparaîtra toujours. Pour moi, cette solution est assez bonne, je n'ai pas trouvé mieux et je déteste le comportement orginalne ctrl + tab.
user410261
6

La philosophie de l'ordre des onglets de Visual Studio est très contre-intuitive, car l'ordre des onglets affichés diffère de la logique de changement d'onglet, ce qui rend l'ordre des onglets complètement inutile .

Donc, jusqu'à ce qu'une meilleure solution se présente, changez la disposition des fenêtres (dans Environnement-> Général) de documents à onglets en plusieurs documents; cela ne changera pas le comportement, mais cela réduit la confusion causée par les onglets.

De cette façon, vous trouverez également le DocumentWindowNav plus utile!

Peter Mortensen
la source
6

Ctl+ Alt+ PgUpou des PgDnraccourcis ont fonctionné pour basculer l'onglet suivant / précédent hors de la boîte pour moi ...

FlashJordan
la source
3
La chose illogique est la suivante: si votre barre d'onglets n'a que de l'espace horizontal pour n onglets, ces raccourcis ne feront pas cycler l'onglet pour les onglets qui ne sont pas visibles pour le moment!
sergiol
5

Je suis à 100% d'accord avec Jeff.

J'avais travaillé sur Borland C ++ Builder pendant plusieurs années et l'une des fonctionnalités qui me manque le plus est l'ordre de tabulation des documents «correct» avec Ctrl- Tab. Comme Jeff l'a dit, " Le comportement actuel des onglets me tire hors de la tâche et me fait prêter attention à l'outil " est exactement ce que je ressens à ce sujet, et je suis très surpris par le fait qu'il n'y en ait pas beaucoup de gens s'en plaignent.

Je pense Ctrl- F6- NextDocumentWindowNav - parcourt les documents en fonction de la dernière heure d'activation du document. Ce comportement ressemble beaucoup à la façon dont les applications MDI se comportaient autrefois.

Avec cela pris en compte, j'utilise généralement Ctrl+ F6pour basculer entre 2 documents (ce qui est assez pratique pour basculer entre les fichiers .cpp et .h lorsque vous travaillez sur un projet c ++) même lorsqu'il y a plus de 2 documents actuellement ouverts. Par exemple, si vous avez 10 documents ouverts (Tab1, Tab2, Tab3, ...., Tab10), je clique sur Tab1 puis sur Tab2. Quand je fais Ctrl+ F6et relâche les touches, je passe à Tab1. Appuyer à nouveau sur Ctrl+ F6me ramènera à Tab2.

Kei
la source
5

Je suppose que vous voulez ce que VSS appelle Next (Previous) DocumentWindow. Par défaut, il est sur Ctrl(-Shift)-F6mon VSS 8. Ctrl(-Shift)-TabIls ont Next(Previous)DocumentWindowNav. Vous pouvez modifier les affectations de touches via Outils / Options / Clavier.

buti-oxa
la source
3
Ctrl- (Shift-) F6 ne vous amène pas à l'onglet gauche ou droit. c'est le même ordre que Ctrl-Tab mais sans la fenêtre ennuyeuse.
shoosh
1
Correct ... Visual Studio 2010 a Window.NextTab et Window.PreviousTab, qui modifie les documents non basés sur MRU, mais il ne fonctionne pas avec tous les types de documents: connect.microsoft.com/VisualStudio/feedback/details/571750/…
Greg Bray
4

Dans la branche de registre: HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 9.0 ajoutez DWORD nommé "UseMRUDocOrdering" avec la valeur 1. Il ordonnera que les documents les plus récemment utilisés soient placés sur la gauche. Ce n'est pas parfait mais meilleur que la mauvaise conduite par défaut.

racaille
la source
0

Mis à jour vers VS 2017+, où, selon le commentaire de @ J-Bob sous la réponse de @ thepaulpage, (non souligné dans l'original):

On dirait que les commandes ont encore changé. C'est maintenant 2017 et les raccourcis clavier sont appelés Ouvrir l'éditeur suivant et Ouvrir l'éditeur précédent . Vous n'avez pas besoin d'extensions pour cela.

Vous pouvez trouver les options sous Paramètres, accessibles via le symbole d'engrenage en bas à gauche ou par la [Ctrl]+,commande.

JWCS
la source
-5

Je n'utilise pas Visual Studio ( oui, vraiment, je ne l'utilise pas ), mais AutoHotkey peut remapper n'importe quel raccourci clavier globalement ou dans une application particulière:

#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

Ce sont deux remappages de mon script AutoHotKey principal. Je pense que c'est un excellent outil pour ce type de tâches.

PabloG
la source
3
Désolé, mais le problème est qu'aucune clé ne fait ce qu'il faut, donc cela n'aidera pas.
Roman Starkov