更改Ctrl + Tab行为以在Visual Studio中的文档之间移动


286

是否可以更改Visual Studio中的Ctrl+ TabShift+ Ctrl+ Tab工作方式?我已经禁用了弹出式导航器窗口,因为我只想在选项卡控件中的项目之间切换。我的问题是切换到下一个和上一个文档的操作不一致。

我看到的所有其他使用选项卡控件打开文档的程序都使用Ctrl+ Tab从左向右移动和Shift+ Ctrl+ Tab从右向左移动。Visual Studio通过跳转到最后选择的选项卡打破了这一点。您永远不会知道最终将要处理的文档,而且两次也不会以相同的方式进行。

这是非常违反直觉的。这是一种鼓励所有人一次只能打开两个文档的巧妙方法吗?


假设我打开了一些文件。我正在一起工作,我需要查看右侧下一个选项卡中的内容。在地球表面上的所有其他单个应用程序中,Ctrl+ Tab会让我到达那里。但是在Visual Studio中,我不知道它将带我去哪个其他选项卡。如果我只打开两个文档,那么效果很好。一旦您转到三个或三个以上,就无法确定Visual Studio已决定将您发送到哪个选项卡。

这样做的问题是,我不必考虑该工具,它应该淡出背景,并且我应该考虑该任务。当前选项卡的行为不断使我退出任务,并使我不得不注意该工具。


4
“我已禁用弹出窗口导航器窗口” ...您如何关闭烦人的选择窗口弹出窗口?每次按Ctrl + Tab都会闪烁,这真令人讨厌。
demoncodemonkey

31
知道了,在“工具”->“选项”->“键盘”中,我将Ctrl + Tab从Window.NextDocumentWindowNav重映射到Window.NextDocumentWindow(删除了“ Nav”)。与Ctrl + Shift + Tab和Window.PreviousDocumentWindowNav相同。
demoncodemonkey

11
我像alt-tab一样喜欢这种行为是错误的吗?
西奥·贝莱尔

3
Visual Studio似乎使用“最近使用”(MRU)行为在选项卡之间导航。Notepad ++提供了启用/禁用此行为的选项(因此似乎有些人喜欢它)。我真的很希望能够切换到常规/直观的行为。
安德烈·卡隆

4
老实说,我不喜欢程序以可视选项卡顺序循环显示。我同意Visual Studio的行为。对于每个ctrl + tab,它返回到最后使用的那个,然后返回到之前的最后一个使用的那个。该模式已经存在很长时间了(VB6或之前我认为)。我的意思是,使用您喜欢的模式,但是如果您知道它是如何工作的,则更容易理解:)
Josh Robinson

Answers:


227

在Visual Studio 2015(以及VS的早期版本中,但如果使用VS2013或更低版本,则必须安装Productivity Power Tools),Visual Studio中有两个新命令:

Window.NextTabWindow.PreviousTab

只需将它们从Ctrl+ Alt+ PageUp/ Ctrl+ Alt+ 映射PageDownCtrl+ Tab/ Ctrl+ Shift+ Tabin:

菜单工具 -> 选项 -> 环境 -> 键盘

注意:在Visual Studio 2010等早期版本中,Window.NextTab和Window.PreviousTab分别命名为Window.NextDocumentWellTabWindow.PreviousDocumentWellTab


1
这是Visual Studio 2010的最佳答案。这非常有帮助。公认的宏解决方案不如这一解决方案。
2011年

2
没有适用于Visual Studio 2012的版本
Panic Panic

4
如果您也使用Visual Studio Express,这将无济于事
BornToCode 2012年

18
使用Visual Studio 2012,命令名称已稍有更改。现在是Window.NextTabWindow.PreviousTab
JP 10 Berge,

3
@JP十个Berge-我已经在VS 2012中对此进行了测试,如果您使用的是Razor视图(.cshtml文件),则Window.PreviousTab快捷方式(Ctrl + Alt + PgUp)不起作用。非常烦人,尽管Ctrl + Alt + PgDown仍然有效,所以您不会完全陷入困境。还有Window.NextDocumentWindow(Ctrl + F6),尽管这似乎使标签以一种奇怪的顺序循环。
DGreen

70

Visual Studio 2010内置了解决此问题的方法。

默认情况下,Ctrl+ TabCtrl+ Shift+ Tab被分配给Window.[Previous/Next]..Document,但是您可以通过

Tools -> Options -> Environment -> Keyboard,

删除这些键分配,然后重新分配它们Window.[Next/Previous]Tab以添加所需的行为。


5
显然有人混淆了投票否决的理由-如果答案不符合该问题或答案是否定的,则应得到一个答案。但是我的答案正确,尽管比您的答案要少。仅仅是我的期望人们真正理解选项菜单,而不是“这里,运行此脚本”或“安装此插件!” ...这不是程序员的网站吗?
Zoey

1
人们可能一直希望在文档选项卡之间切换。在VS2010中,编辑“ Window。[Next / Previuos] Tab”对我的文档选项卡没有影响,而@thepaulpage的解决方案却影响了我。+1为清晰,无附加组件的方法!
GnomeDePlume

⁺¹,我也只是想到了为什么有人会否决您的答案:Visual Studio 2010有一些奇怪的版本,没有“键盘”选项。因此,大概是那个版本的用户,研究了选项,并认为答案是错误的,因为从他们的主观角度来看确实如此。
Hi-Angel

1
我必须从Window.[Previous|Next]DocumentWindow设置中删除绑定才能使其正常工作(在VS2015中)。默认情况下,有一个单独的文本编辑器绑定似乎优先。
凯特2015年

51

它可以更改,至少在VS 2012中可以更改(我认为它也应该在2010年适用)。

1) TOOLS > Options > Environment > Keyboard

(是TOOLS,它是VS2012!)现在可以检查三个快捷方式。

2)Window.NextDocumentWindow-您可以通过在顶部的搜索窗格中键入快速到达那里。现在这是你的敌人。如果您不喜欢它,请将其删除。如果想要拥有自己的名称,请将其更改为其他名称(并且不要忘记Assign按钮),但是无论最后使用哪种快捷方式都请记住。稍后会派上用场。

(我的意思是这是记住您最后一个选项卡的快捷方式)

在此处输入图片说明

3)现在寻找Window.NextDocumentWindowNav-与上面相同,但是显示打开的选项卡的预览(您可以在此弹出窗口中快速导航到其他窗口)。我从来没有发现这有帮助。执行步骤2中提到的所有操作(不要忘记记住)。

4)Window.NextTab-您的魔力药水。这样一来,您就可以按顺序循环浏览各个标签。可能你想要CTRL+ TAB吗?再次执行步骤2并记住

5)现在将光标放在“ 按”快捷键上:文本框(与当前选择的内容无关,这次将不分配),然后键入三个(或两个或一个)快捷键中的第一个。

在此处输入图片说明

您会看到列出当前使用的快捷方式:。确保没有重复的快捷方式条目。在图片中,没有重复的条目。如果您有(稀有),请说X,然后转到X,然后删除快捷方式。对其他快捷方式也重复此步骤。

6)现在也对Previous快捷方式重复1-5 (最好添加Shift)。

7)奖励:选择VS2005映射方案(在同一个盒子的顶部),所以现在你得到F2重新命名的成员,而不是CTRL+ R+ R,以及F7用于查看代码,而不是CTRL+ ALT+ 0

我认为VS默认是正确的。我发现VS记住我上次使用的内容非常有用,并且使切换变得更容易,就像OS本身所做的一样(on ALT+ TAB)。默认情况下,我的浏览器也执行相同的操作(Opera),尽管我知道Firefox的行为有所不同。


我也没有发现这种行为是非反直觉的。;-)
dotNET

该答案顶部的意见始终使我感到困惑,因为我提供的信息不多,而且(由于篇幅太大)不必要地具有对抗性。
thepaulpage

@thepaulpage我已经更新了答案。我之所以提出意见,是因为许多用户(包括OP)都认为这是违反直觉的。
nawfal

16

在Visual Studio 2012或更高版本(2013、2015、2017 ...)中:

  1. 浏览菜单工具/选项/环境/键盘。
  2. 搜索命令“ Window.NextTab”,将快捷方式设置为Ctrl+Tab
  3. 搜索命令“ Window.PreviousTab”,将快捷方式设置为Ctrl+ Shift+Tab

在此处输入图片说明


4
作为参考,默认情况下,Ctrl + Tab和Ctrl + Shift + Tab映射到命令“ Window.NextDocumentWindowNav”和“ Window.PreviousDocumentWindowNav”。
罗里·奥肯

8

导航到博客文章“ Visual Studio选项卡取消隐藏程序宏”,并使用该宏。将宏应用于Visual Studio的安装后,可以将自己喜欢的键盘快捷方式绑定到它们。还要注意注释中的注册表修复程序,因为它们可能在一段时间后变得很烦人,因此不显示宏气球。


在某些情况下,它显然仍会中断,但这是实际上按需运行的最封闭的方法。
杰夫·库斯库迪斯

在VS 2010中,您可以配置Ctrl + Tab和Ctrl + Shift + Tab在文本文档之间进行更改,但不适用于设计器选项卡或BinaryEditor。以上博客文章中的宏是唯一适用于大多数文档窗口类型的方法。我还向Microsoft提交了一个包含更多详细信息的bug(goo.gl/K9rz),他们说它们将更改Window.NextTabWindow.PreviousTab为“下一个Visual Studio版本”中的文档提供非MRU切换。
格雷格·布雷

7

经过几个小时的搜索,我找到了一个解决方案,即如何使用CTRL+ TAB在从左向右移动和SHIFT+ CTRL+ TAB从右向左移动的 打开文档之间切换。

简而言之,您需要复制并粘贴此宏:

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

该宏来自:www.mrspeaker.net/2006/10/12/tab-un-stupidifier/

如果你从来没有一个宏添加到Visual Studio中有一种非常有用的链接如何做到这一点


2
第一次仍然需要10秒,并且在以后每次使用时都闪烁一个系统任务栏图标吗?这就是VS2005所做的,我无法接受……
Roman Starkov

1
罗姆金斯:是的,我很害怕。仍然不是可行的解决方案。
David Foster 2010年

1
Romkyns:是的,每执行一次宏,系统托盘中就会弹出一个气球,指示宏正在运行。要摆脱该气球,您可以编辑Windows注册表并添加以下DWORD值:“ DontShowMacrosBalloon” = 1,在该键中:HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 9.0(对于Visual Studio 2008使用9.0;对于2005使用8.0) 。气球消失,但系统托盘图标仍会出现。对我而言,此解决方案足够好,我没有发现更好的解决方案,并且我讨厌orginalne ctrl + tab行为。
user410261 2010年

6

Visual Studio选项卡顺序的原理非常违反直觉,因为显示的选项卡的顺序与选项卡切换逻辑不同,从而使选项卡的顺序完全无用

因此,在出现更好的解决方案之前,将窗口布局(在Environment-> General中)从选项卡式文档更改为多文档;它不会改变行为,但可以减少标签引起的混乱。

这样,您还将发现DocumentWindowNav更有用!


6

Ctl+ Alt+ PgUpPgDn快捷方式对我来说可以切换下一个/上一个选项卡...


3
不合逻辑的事情是:如果您的标签栏只有水平空间可容纳n个标签,则这些快捷方式将不会使当前不可见的标签在标签上循环!
sergiol

5

我100%同意Jeff。

我曾在Borland的C ++ Builder的工作了好几年的一个功能,我最怀念的是“正确的”文档Tab键顺序与Ctrl- Tab。正如Jeff所说:“ 当前的标签行为将我从任务中拉出来,使我不得不关注该工具 ”,这正是我对此的感觉,而令我惊讶的是,事实并非如此许多人对此表示抱怨。

我认为Ctrl- F6- NextDocumentWindowNav -基于文档的最后活的时间可前往[文档。这种行为很像MDI应用程序过去的行为。

考虑到这一点,我通常使用Ctrl+ F6在2个文档之间切换(在c ++项目上工作时,在.cpp和.h文件之间切换非常方便),即使当前打开的文档超过2个。例如,如果您有10个文档(Tab1,Tab2,Tab3,....,Tab10)打开,则单击Tab1,然后单击Tab2。当我执行Ctrl+ F6并释放键时,我将跳到Tab1。再次按Ctrl+ F6将使我回到Tab2。


5

我猜您想要VSS调用Next(Previous)DocumentWindow。默认情况下,这是对Ctrl(-Shift)-F6我的VSS 8. Ctrl(-Shift)-Tab他们Next(Previous)DocumentWindowNav。您可以通过“工具/选项/键盘”更改键分配。


3
Ctrl-(Shift-)F6不会将您带到左侧或右侧选项卡。其顺序与Ctrl-Tab相同,但没有烦人的窗口。
shoosh

1
正确... Visual Studio 2010具有Window.NextTab和Window.PreviousTab,它可以进行基于非MRU的文档更改,但不适用于所有文档类型:connect.microsoft.com/VisualStudio/feedback/details/571750/…
格雷格·布雷

4

在注册表分支:HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 9.0中,添加名为“ UseMRUDocOrdering”的DWORD,其值为1。它将对最近使用过的文档进行排序,将其放在左侧。它并不完美,但比默认的不当行为要好。


0

更新至VS 2017+,根据@thepaulpage的回答下的@ J-Bob的评论,(强调):

看起来命令再次更改。现在是2017年,键盘快捷键称为“ 打开下一个编辑器”和“ 打开上一个编辑器”。您不需要任何扩展。

您可以在“设置”下找到选项,可以通过左下方的齿轮符号或通过[Ctrl]+,命令访问这些选项。


-5

我不使用Visual Studio(是的,确实,我不使用它),但是AutoHotkey可以在全局或特定应用程序中重新映射任何热键:

#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

这是我的主要AutoHotKey脚本的两个重新映射。我认为这是执行此类任务的出色工具。


3
抱歉,问题在于没有密钥可以正确执行操作,因此这无济于事。
罗曼·斯塔科夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.