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

时间:2008-08-21 20:08:00

标签: visual-studio

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

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

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


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

这个问题是我不应该考虑这个工具,它应该淡入背景,我应该考虑这个任务。当前的标签行为一直让我脱离任务,让我不得不关注这个工具。

14 个答案:

答案 0 :(得分:211)

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

Window.NextTab Window.PreviousTab

只需将其重新映射到 Ctrl + Alt + PageUp / Ctrl + Alt + PageDown Ctrl + Tab / Ctrl + Shift + 标签 in:

菜单工具 - &gt; 选项 - &gt; 环境 - &gt; 键盘

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

答案 1 :(得分:69)

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

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

Tools -> Options -> Environment -> Keyboard,

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

答案 2 :(得分:51)

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

1)TOOLS > Options > Environment > Keyboard

(Yes TOOLS,它的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 < / kbd> + R + R > F7 查看代码而非 CTRL + ALT + 0

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

答案 3 :(得分:16)

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

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

答案 4 :(得分:8)

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

答案 5 :(得分:7)

经过几个小时的搜索,我找到了一个解决方案,如何使用 CTRL + TAB 在左侧之间移动 SHIFT < / kbd> + 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

答案 6 :(得分:6)

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

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

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

答案 7 :(得分:6)

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

答案 8 :(得分:5)

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

答案 9 :(得分:5)

我100%与杰夫达成协议。

我在Borland C ++ Builder上工作了好几年,其中一个我最想念的功能是使用 Ctrl - Tab 的'正确'文档制表顺序。正如杰夫所说,“当前的标签行为让我不能完成任务并让我不得不关注工具”正是我对此的看法,我对此感到非常惊讶事实上,没有多少人抱怨这一点。

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

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

答案 10 :(得分:4)

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

答案 11 :(得分:0)

已更新至VS 2017+,根据@thepaulpage回答下的@J-Bob's comment,(强调):

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

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

答案 12 :(得分:0)

我觉得目前的最佳答案已过时。在 Visual Studio 2021 (v1.56) 中,您无需安装任何扩展或处理任何配置文件。您只需执行以下步骤:

  1. 点击左下角的齿轮图标。
  2. 选择“键盘快捷键”。
  3. 搜索“workbench.action.previousEditor”和“workbench.action.nextEditor”,然后点击行左侧的铅笔图标来编辑它们的键绑定。

如果您确实更改为“Ctrl+tab”或其他命令已在使用的任何其他快捷方式,它会通知您并为您提供更改这些选项的选项。我个人将它们更改为“Ctrl+PgUp”和“Ctrl+PgDn”,因此这只是直接交换。

答案 13 :(得分:-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脚本的两个重映射。我认为这是完成此类任务的绝佳工具。