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

Changing Ctrl + Tab behavior for moving between documents in Visual Studio

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

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

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

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

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


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

Window.NextTab和
Window.PreviousTab

只需将它们从Ctrl + Alt + PageUp / Ctrl + Alt + PageDown重新映射到Ctrl + Tab / Ctrl + Shiftab:

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

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


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

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

1
Tools -> Options -> Environment -> Keyboard,

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


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

1)TOOLS > Options > Environment > Keyboard

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

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

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

enter image description here

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

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

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

enter image description here

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

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

7)奖金:选择VS2005映射方案(在同一框的顶部),因此您现在获得F2作为重命名成员,而不是CTRL + R + R,而F7作为View Code,而不是CTRL + ALT。

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


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

  • 浏览菜单工具/选项/环境/键盘。
  • 搜索命令" Window.NextTab",将快捷方式设置为Ctrl + Tab
  • 搜索命令" Window.PreviousTab",将快捷方式设置为Ctrl + Shift + Tab
  • enter image description here


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


    经过几个小时的搜索,我找到了一种解决方案,该方法如何使用从左向右移动的CTRL + TABSHIFT + CTRL + TAB从右向左切换打开的文档。

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    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添加宏,则有一个非常有用的链接。


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


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

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

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


    我100%同意杰夫。

    我在Borland C ++ Builder上工作了几年,而我最想念的功能之一是使用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。


    我想您想要VSS调用Next(Previous)DocumentWindow。默认情况下,它位于我的VSS 8的Ctrl(-Shift)-F6上。在Ctrl(-Shift)-Tab上,它们具有Next(Previous)DocumentWindowNav。您可以通过"工具/选项/键盘"更改键分配。


    在注册表分支中:
    HKEY_CURRENT_USER Software Microsoft VisualStudio 9.0
    添加值为1的名为" UseMRUDocOrdering"的DWORD。
    它将订购最近使用过的文档放在左侧。它不是完美的,但比默认的不当行为要好。


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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #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脚本的两个重新映射。我认为这是执行此类任务的出色工具。


    推荐阅读