首页 文章

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

提问于
浏览
252

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

使用Tab键控件打开文档的其他每个程序都使用Ctrl Tab从左向右移动,Shift Ctrl Tab从右向左移动 . Visual Studio通过跳转到选定的最后一个选项卡来中断此操作 . 你永远不会知道你最终会得到什么文件,它永远不会是两次相同的方式 .

这非常违反直觉 . 这是一种微妙的方式来鼓励每个人一次只打开两个文件吗?


假设我打开了一些文件 . 我在一个工作,我需要看到右边下一个选项卡中的内容 . 在地球表面上的每一个单独的应用程序中,Ctrl Tab都会让我在那里 . 但是在Visual Studio中,我不知道它将带我到哪个其他选项卡 . 如果我只打开两个文档,这很有效 . 一旦你去了三个或更多,所有的赌注都是关于Visual Studio决定发送给你的标签 .

这个问题是我不应该考虑这个工具,它应该淡入背景,我应该考虑这个任务 . 当前的选项卡行为使我不能完成任务,并且必须注意该工具 .

12 回答

  • 5

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

    Window.NextTab和Window.PreviousTab

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

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

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

  • 5

    Visual Studio 2010内置了一种解决方案 .

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

    Tools -> Options -> Environment -> Keyboard,
    

    删除这些键分配并将它们重新分配给 Window.[Next/Previous]Tab 以添加所需的行为 .

  • 13

    它可以改变,至少在VS 2012中(我认为它也适用于2010年) .

    1) TOOLS > Options > Environment > Keyboard

    (Yes Tools,VS2012!)现在要检查三个快捷方式 .

    2) Window.NextDocumentWindow - 您可以通过在顶部的搜索窗格上键入来快速到达那里 . 现在这是你的敌人 . 如果你不喜欢它,删除它 . 如果想拥有自己的 but do remember that shortcut whatever it is in the end ,请将其更改为其他内容(并且不要忘记 Assign 按钮) . 它会在以后派上用场 .

    (我的意思是这是记住你上一个标签的快捷方式)

    enter image description here

    3)现在查找 Window.NextDocumentWindowNav - 这与上面相同,但显示已打开选项卡的预览(您可以使用此弹出窗口快速导航到其他窗口) . 我从来没有发现这有用 . 完成步骤2中提到的所有内容(不要忘记 remember ) .

    4) Window.NextTab - 你的魔药 . 这将允许您按正向顺序循环切换选项卡 . 你想要CTRL TAB吗?再次执行第2步和 remember .

    5)现在将光标放在按下快捷键:文本框(不会分配此时间),然后键入三个(或两个或一个)快捷键中的第一个 .

    enter image description here

    您将看到目前使用的快捷方式:已列出 . 确保快捷方式没有重复条目 . 在图片中,没有重复的条目 . 如果你有(很少见),说X,然后转到X,然后删除快捷方式 . 对其他快捷方式也重复此步骤 .

    6)现在为 Previous 快捷键重复1-5(最好添加Shift) .

    7)奖励:选择VS2005映射方案(在同一个框的顶部),所以现在你获得重命名成员的F2而不是CTRL R R,而F7代表查看代码而不是CTRL ALT 0 .

    我认为VS默认情况下是正确的 . 我发现VS记得我最后使用的东西非常有用,并使切换更容易,就像操作系统本身所做的那样(在ALT TAB上) . 默认情况下我的浏览器也会这样做(Opera),但我知道Firefox的行为方式不同 .

  • 4

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

    • 浏览菜单工具/选项/环境/键盘 .

    • 搜索命令'Window.NextTab',将快捷方式设置为Ctrl Tab

    • 搜索命令'Window.PreviousTab',将快捷方式设置为Ctrl Shift Tab

    enter image description here

  • 66

    导航到博客文章Visual Studio Tab Un-stupidifier Macro并使用宏 . 将宏应用于Visual Studio安装后,您可以将喜爱的键盘快捷键绑定到它们 . 另请注意注释中的注册表修复程序没有显示宏气球,因为它们可能会在一段时间后变得烦人 .

  • 49

    经过几个小时的搜索,我找到了一个解决方案,如何使用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添加宏,那么有一个非常有用的链接如何do it .

  • 7

    Visual Studio选项卡顺序的原理非常违反直觉,因为显示的选项卡的顺序与选项卡切换逻辑不同,呈现选项卡 completely useless 的顺序 .

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

    这样你也会发现DocumentWindowNav更有用!

  • 8

    我100%与杰夫达成协议 .

    我曾经在Borland C Builder工作了好几年,我最想念的功能之一是使用Ctrl-Tab的'correct'文档标签顺序 . 正如杰夫所说,“当前的标签行为让我不能完成任务,让我不得不关注这个工具”,这正是我对此的看法,而且很多人抱怨这一点 .

    我认为Ctrl-F6 - NextDocumentWindowNav - 根据文档的上次激活时间导航文档 . 这种行为很像MDI应用程序过去的行为 .

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

  • 6

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

  • -5

    在注册表分支中:HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 9.0添加名为“UseMRUDocOrdering”的DWORD值为1.它将订购文档,因此最近使用的文档位于左侧 . 它并不完美,但比默认的不当行为更好 .

  • 194

    Ctl Alt PgUp或PgDn快捷方式可以为我切换下一个/ prev选项卡开箱即用...

  • 4

    我不使用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脚本的两次重映射 . 我认为这是这类任务的绝佳工具 .

相关问题