Alterando o comportamento das teclas Ctrl + Tab para mover entre documentos no Visual Studio


286

É possível alterar como Ctrl+ Tabe Shift+ Ctrl+ Tabfuncionam no Visual Studio? Eu desabilitei a janela do navegador pop-up, porque só quero alternar entre itens no controle da guia. Meu problema é a inconsistência do que a mudança para o documento seguinte e anterior faz.

Todos os outros programas que usam um controle de guia para o documento aberto que eu vi usam Ctrl+ Tabpara mover da esquerda para a direita e Shift+ Ctrl+ Tabpara ir da direita para a esquerda. O Visual Studio quebra isso com seu salto para a última guia selecionada. Você nunca pode saber em qual documento vai terminar e nunca é da mesma maneira duas vezes.

É muito contra-intuitivo. Essa é uma maneira sutil de incentivar todos a ter apenas dois documentos abertos ao mesmo tempo?


Digamos que tenho alguns arquivos abertos. Estou trabalhando em um e preciso ver o que está na próxima guia à direita. Em todas as outras aplicações na face da Terra, Ctrl+ Tabme levará até lá. Mas no Visual Studio, não tenho idéia para qual das outras guias ele me levará. Se eu tiver apenas dois documentos abertos, isso funciona muito bem. Assim que você passa para três ou mais, todas as apostas estão desativadas para qual guia o Visual Studio decidiu enviar para você.

O problema disso é que eu não deveria ter que pensar na ferramenta, ela deveria desaparecer em segundo plano e deveria estar pensando na tarefa. O comportamento atual da guia continua me tirando da tarefa e me faz prestar atenção à ferramenta.


4
"Desativei a janela do navegador pop-up" ... Como você desativou o pop-up irritante da janela de seleção? É tão chato apenas piscando toda vez que eu pressiono Ctrl + Tab.
Demoncodemonkey 01/07/2009

31
Ah, entendi, em Ferramentas-> Opções-> Teclado, remapeei Ctrl + Tab de Window.NextDocumentWindowNav para Window.NextDocumentWindow (removi o "Nav"). E o mesmo com Ctrl + Shift + Tab com Window.PreviousDocumentWindowNav.
Demoncodemonkey 02/07/2009

11
É errado que eu goste desse comportamento, pois é como alt-tab?
Theo Belaire

3
O Visual Studio parece navegar pelas guias usando o comportamento "usado mais recentemente" (MRU). O Notepad ++ oferece uma opção para ativar / desativar esse comportamento (assim parece que algumas pessoas gostam). Eu realmente gostaria de poder mudar para um comportamento regular / intuitivo.
André Caron

4
Honestamente, eu não gosto quando um programa percorre a ordem de guias visual. Eu concordo com o comportamento do Visual studio. Para cada ctrl + tab, ele volta ao último usado, depois ao último usado antes disso. O padrão existe há muito tempo (VB6 ou antes de eu pensar). Quer dizer, usar o padrão de sua preferência, mas se você sabe como ele funciona, é mais fácil de apreciar :)
Josh Robinson

Respostas:


227

No Visual Studio 2015 (assim como nas versões anteriores do VS, mas você deve instalar o Productivity Power Tools se estiver usando o VS2013 ou abaixo), existem dois novos comandos no Visual Studio:

Window.NextTab e Window.PreviousTab

Basta remapá-los de Ctrl+ Alt+ PageUp/ Ctrl+ Alt+ PageDownpara Ctrl+ Tab/ Ctrl+ Shift+ Tabem:

Menu Ferramentas -> Opções -> Ambiente -> Teclado

Nota: Nas versões anteriores, como o Visual Studio 2010, Window.NextTab e Window.PreviousTab foram nomeadas Window.NextDocumentWellTab e Window.PreviousDocumentWellTab .


1
Esta é a melhor resposta agora para o visual studio 2010. Isso foi muito útil. A solução macro aceita é inferior a esta.
Jmq 01/03

2
Nenhuma versão ainda para Visual Studio 2012
Coronel Pânico

4
Isso não ajudará se você usar o Visual Studio Express também
#

18
Com o Visual Studio 2012, os nomes dos comandos mudaram um pouco. Agora é Window.NextTab e Window.PreviousTab .
JP ten Berge

3
@JP ten Berge - Eu testei isso no VS 2012, e o atalho Window.PreviousTab (Ctrl + Alt + PgUp) não funcionará se você estiver em uma exibição do Razor (arquivo .cshtml). Muito irritante, embora Ctrl + Alt + PgDown ainda funcione, para que você não fique completamente preso. Há também Window.NextDocumentWindow (Ctrl + F6), embora isso pareça alternar as guias em uma ordem estranha.
DGreen

70

O Visual Studio 2010 tem, de maneira integrada, uma maneira de resolver isso.

Por padrão, Ctrl+ Tabe Ctrl+ Shift+ Tabsão atribuídos a Window.[Previous/Next]..Document, mas você pode, através

Tools -> Options -> Environment -> Keyboard,

remova essas atribuições de chave e atribua-as novamente Window.[Next/Previous]Tabpara adicionar o comportamento desejado.


5
Aparentemente, alguém confundiu o raciocínio por trás de um voto negativo - se uma resposta não estiver de acordo com a pergunta ou se for realmente negativa, ela merece uma ... Mas a minha responde a pergunta corretamente, embora menos do que a sua resposta. Será que o meu espera que as pessoas realmente entendam um menu de opções em vez de "Aqui, execute este script" ou "Instalar este complemento!" ... Não é um site para programadores?
Zoey

1
As pessoas podem estar procurando alternar entre as guias do documento. Editar 'Window. [Next / Previuos] Tab' não afetou as guias de documento para mim no VS2010, enquanto a solução da @thepaulpage afetou. +1 para uma abordagem clara e sem complementos!
GnomeDePlume

Also, também pensei em por que alguém poderia recusar sua resposta: O Visual Studio 2010 tinha uma versão estranha que não tinha a opção «Teclado». Então, provavelmente, aquele tinha essa versão, examinou as opções e decidiu que a resposta estava errada, pois, do ponto de vista subjetivo, é de fato.
Hi-Angel

1
Eu tive que remover a ligação da Window.[Previous|Next]DocumentWindowconfiguração para que isso funcionasse (no VS2015). Por padrão, havia uma ligação separada para o editor de texto que parecia ter prioridade.
Kat

51

pode ser alterado, pelo menos no VS 2012 (acho que também deve funcionar para 2010).

1) TOOLS > Options > Environment > Keyboard

(Sim FERRAMENTAS, seu VS2012!) Agora, três atalhos para verificar.

2) Window.NextDocumentWindow- você pode chegar lá rapidamente, digitando no painel de pesquisa na parte superior. Agora este é seu inimigo . Remova-o se você não gostar. Altere-o para outra coisa (e não se esqueça do botão Atribuir ) se quiser ter o seu, mas lembre-se desse atalho, seja lá o que for . Será útil mais tarde.

(Quero dizer, este é o atalho que lembra sua última guia)

insira a descrição da imagem aqui

3) Agora procure Window.NextDocumentWindowNav- é o mesmo que acima, mas mostra uma visualização das guias abertas (você pode navegar para outras janelas rapidamente demais com este pop-up). Eu nunca achei isso útil. Faça tudo o que foi mencionado na etapa 2 (não esqueça de lembrar ).

4) Window.NextTab- sua poção mágica. Isso permitiria percorrer as guias na ordem de avanço. Pode ser que você queira CTRL+ TAB? Novamente, passo 2 e lembre-se .

5) Agora coloque o cursor nas teclas de atalho Pressione: caixa de texto (não importa o que está selecionado no momento, você não vai atribuir desta vez) e digite o primeiro dos três (ou dois ou um) atalhos.

insira a descrição da imagem aqui

Você verá o atalho usado atualmente por: listado. Verifique se você não possui uma entrada duplicada para o atalho. Na foto, não há entradas duplicadas. Caso você tenha (uma raridade), diga X, vá para X e remova o atalho. Repita esta etapa para outros atalhos também.

6) Agora repita de 1 a 5 para os Previousatalhos também (de preferência adicionando Shift).

7) Bonus: esquema de mapeamento Select VS2005 (na parte superior do mesmo box), então agora você tem F2para Renomear membros e não CTRL+ R+ R, e F7em View Code e não CTRL+ ALT+ 0.

Sou da opinião que o VS acertou por padrão. Acho extremamente útil que o VS se lembre do que usei por último e facilite a alternância, assim como o próprio sistema operacional (no ALT+ TAB). Meu navegador também faz o mesmo por padrão (Opera), embora eu saiba que o Firefox se comporte de maneira diferente.


Também não acho esse comportamento anti-não-contra-intuitivo. ;-)
dotNET 22/06

a opinião no topo desta resposta sempre me incomodou como não informativa e (por causa do tamanho grande) desnecessariamente antagônica.
thepaulpage

@thepaulpage Atualizei minha resposta. A razão pela qual eu tive que opinar é porque muitos usuários (incluindo OP) opinaram que é contra-intuitivo.
Nawfal

16

No Visual Studio 2012 ou posterior (2013, 2015, 2017 ...):

  1. Navegue no menu Ferramentas / Opções / Ambiente / Teclado.
  2. Procure o comando 'Window.NextTab', defina o atalho para Ctrl+Tab
  3. Procure o comando 'Window.PreviousTab', defina o atalho para Ctrl+ Shift+Tab

insira a descrição da imagem aqui


4
Para referência, por padrão, Ctrl + Tab e Ctrl + Shift + Tab são mapeados para os comandos 'Window.NextDocumentWindowNav' e 'Window.PreviousDocumentWindowNav'.
Rory O'Kane

8

Navegue até a postagem do blog Macro Visual Studio Tab Un-stupidifier e faça uso da macro. Depois de aplicar a macro à instalação do Visual Studio, você pode vincular seus atalhos de teclado favoritos a eles. Observe também a correção do registro nos comentários por não exibir o balão de macro, pois eles podem ficar irritantes depois de um tempo.


Aparentemente, ele ainda quebra sob algumas condições, mas este é o mais próximo para realmente funcionar como desejado.
Jeff Cuscutis 25/09/09

No VS 2010, você pode configurar Ctrl + Tab e Ctrl + Shift + Tab para alternar entre documentos de texto, mas não funciona com as guias de designer ou o BinaryEditor. A macro da postagem do blog acima é o único método que funciona com a maioria dos tipos de janela de documento. Também registrei um bug na Microsoft que possui mais detalhes ( goo.gl/K9rz ), e eles disseram que mudarão Window.NextTabe Window.PreviousTabfornecerão alternância não MRU para documentos na "próxima versão do Visual Studio".
Greg Bray

7

Depois de algumas horas de pesquisa, encontrei uma solução para alternar entre documentos abertos usando CTRL+ TABque se movem da esquerda para a direita e SHIFT+ CTRL+ TABpara ir da direita para a esquerda.

Em resumo, você precisa copiar e colar esta 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

A macro vem de: www.mrspeaker.net/2006/10/12/tab-un-stupidifier/

Se você nunca adicionar uma macro ao Visual Studio, há um link muito útil para fazê-lo .


2
Ainda leva 10 segundos para fazer isso pela primeira vez e pisca um ícone da bandeja do sistema toda vez que você o usa? Isso é o que VS2005 fiz, e eu não podia levá-la ...
Roman Starkov

1
Romkyns: Sim, eu tenho medo. Ainda não é uma solução viável.
David Foster

1
Romkyns: sim, é verdade, toda vez que executo a macro, um balão aparece na bandeja do sistema para indicar que a macro está em execução. Para se livrar desse balão, você pode editar o Registro do Windows e adicionar o seguinte valor DWORD: "DontShowMacrosBalloon" = 1, nessa chave: HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 9.0 (use 9.0 para Visual Studio 2008; 8.0 para 2005) . O balão desaparece, mas o ícone da bandeja do sistema ainda será exibido. Para mim, essa solução é boa o suficiente. Não encontrei uma solução melhor e odeio o orginalne ctrl + tab.
user410261

6

A filosofia da ordem das guias do Visual Studio é muito contra-intuitiva, pois a ordem das guias exibidas difere da lógica de alternância de guias, tornando a ordem das guias completamente inútil .

Portanto, até que surja uma solução melhor, altere o layout da janela (em Ambiente-> Geral) de documentos com guias para vários documentos; isso não muda o comportamento, mas reduz a confusão causada pelas guias.

Dessa forma, você também encontrará o DocumentWindowNav mais útil!


6

Ctl+ Alt+ PgUpou PgDnatalhos funcionaram para alternar a próxima guia / guia anterior para mim ...


3
O que é ilógico é: se a barra de guias tiver apenas espaço horizontal para n guias, esses atalhos não farão o ciclo alternar para as guias que não estão visíveis no momento!
sergiol 23/06

5

Estou 100% de acordo com Jeff.

Eu trabalhei no Borland C ++ Builder por vários anos e um dos recursos que mais sinto falta é a ordem de tabulação de documentos 'correta' com Ctrl- Tab. Como Jeff disse: " O comportamento atual da guia continua me tirando da tarefa e me faz prestar atenção à ferramenta " é exatamente como me sinto sobre isso, e estou muito surpreso pelo fato de não haver muitas pessoas reclamando disso.

Eu acho que Ctrl- F6- NextDocumentWindowNav - navega documentos com base no horário da última ativação do documento. Esse comportamento é muito parecido com o modo como os aplicativos MDI costumavam se comportar nos velhos tempos.

Com isso em consideração, eu costumo usar Ctrl+ F6para alternar entre 2 documentos (o que é bastante útil para alternar entre arquivos .cpp e .h ao trabalhar no projeto c ++), mesmo quando existem mais de 2 documentos abertos no momento. Por exemplo, se você tiver 10 documentos abertos (Tab1, Tab2, Tab3, ...., Tab10), clico em Tab1 e ​​depois em Tab2. Quando eu faço Ctrl+ F6e solto as teclas, vou para a Tab1. Pressionar Ctrl+ F6novamente levará de volta ao Tab2.


5

Eu acho que você quer o que o VSS chama Next (Previous) DocumentWindow. Por padrão, está Ctrl(-Shift)-F6no meu VSS 8. Ctrl(-Shift)-TabEles têm Next(Previous)DocumentWindowNav. Você pode alterar as atribuições de teclas em Ferramentas / Opções / Teclado.


3
Ctrl- (Shift-) F6 não o leva para a guia esquerda ou direita. é a mesma ordem que Ctrl-Tab, mas sem a janela irritante.
shoosh 16/07/2009

1
Correto ... O Visual Studio 2010 possui Window.NextTab e Window.PreviousTab, que alteram documentos não baseados em MRU, mas não funcionam com todos os tipos de documento: connect.microsoft.com/VisualStudio/feedback/details/571750/…
Greg Bray

4

Na ramificação do registro: HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 9.0, adicione DWORD chamado "UseMRUDocOrdering" com o valor 1. Ele solicitará os documentos usados ​​mais recentemente, à esquerda. Não é perfeito, mas melhor que o mau comportamento padrão.


0

Atualizado para o VS 2017+, onde, de acordo com o comentário de @ J-Bob na resposta de @ thepaulpage, (ênfase adicionada):

Parece que os comandos mudaram novamente. Agora é 2017 e os atalhos de teclado são chamados Open Next Editor e Open Previous Editor . Você não precisa de extensões para isso.

Você pode encontrar as opções em Configurações, que podem ser acessadas através do símbolo de engrenagem no canto inferior esquerdo ou pelo [Ctrl]+,comando


-5

Não uso o Visual Studio ( sim, na verdade não o uso ), mas o AutoHotkey pode remapear qualquer tecla de atalho globalmente ou em um aplicativo específico:

#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

Estes são dois remapeamentos do meu script principal do AutoHotKey. Eu acho que é uma excelente ferramenta para esse tipo de tarefa.


3
Desculpe, mas o problema é que não existe uma chave que faça a coisa certa, portanto isso não ajudará.
Roman Starkov
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.