314

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

我见过的所有其他使用选项卡控件打开文档的程序都使用Ctrl+Tab从左到右移动和Shift+ Ctrl+Tab从右到左移动。Visual Studio 通过跳转到选择的最后一个选项卡打破了这一点。你永远不知道你最终会得到什么文件,而且两次都是一样的。

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


假设我打开了几个文件。我正在工作,我需要查看右侧下一个选项卡中的内容。在地球表面的所有其他应用程序中,Ctrl+Tab会让我到达那里。但是在 Visual Studio 中,我不知道它会带我到其他哪个选项卡。如果我只打开两个文档,这很好用。一旦你达到三个或更多,关于 Visual Studio 决定将你发送到哪个选项卡的所有赌注都将结束。

这样做的问题是我不应该考虑工具,它应该淡入背景,我应该考虑任务。当前的选项卡行为不断将我从任务中拉出来,让我不得不关注该工具。

4

14 回答 14

250

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

Window.NextTabWindow.PreviousTab

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

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

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

于 2010-11-04T16:46:06.357 回答
71

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

默认情况下,Ctrl+TabCtrl++ShiftTab分配给Window.[Previous/Next]..Document,但你可以通过

Tools -> Options -> Environment -> Keyboard,

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

于 2012-04-26T19:01:34.777 回答
55

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

1)TOOLS > Options > Environment > Keyboard

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

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

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

在此处输入图像描述

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

4) Window.NextTab- 你的魔法药水。这将让您以正向顺序循环浏览选项卡。可能是你想要的CTRL+ TAB?再次步骤 2 并记住

5) 现在将光标放在Press shortcut keys:文本框中(不管当前选择了什么,这次你不会分配),然后键入三个(或两个或一个)快捷方式中的第一个。

在此处输入图像描述

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

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

7)奖励:选择 VS2005 映射方案(在同一框的顶部),所以现在你得到F2Rename members而不是CTRL+ R+ R,以及F7View Code而不是CTRL+ ALT+ 0

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

于 2013-04-01T23:12:28.340 回答
19

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

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

在此处输入图像描述

于 2013-04-02T08:50:46.747 回答
8

导航到博文 Visual Studio Tab Un-stupidifier Macro并使用该宏。将宏应用到 Visual Studio 安装后,您可以将最喜欢的键盘快捷键绑定到它们。还要注意评论中的注册表修复,因为它们不显示宏气球,因为它们可能会在一段时间后变得烦人。

于 2009-09-25T07:14:36.663 回答
7

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

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

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

于 2009-05-12T10:04:41.680 回答
7

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

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

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 添加宏,则有一个非常有用的链接如何操作

于 2010-08-04T00:58:51.147 回答
7

Ctl++或快捷方式可以为我打开开箱即用的下一个/上一个选项卡Alt...PgUpPgDn

于 2015-07-22T04:25:02.923 回答
6

我 100% 同意杰夫的观点。

我在 Borland C++ Builder 上工作了几年,我最怀念的功能之一是带有Ctrl-的“正确”文档标签顺序Tab。正如 Jeff 所说,“当前的选项卡行为不断将我从任务中拉出来,让我不得不关注该工具”这正是我对此的感受,我对没有的事实感到非常惊讶很多人抱怨这个。

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

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

于 2009-06-21T02:27:28.337 回答
5

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

于 2008-08-31T02:10:06.490 回答
4

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

于 2011-08-03T07:57:33.020 回答
0

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

看起来命令又变了。现在是 2017 年,键盘快捷键称为Open Next EditorOpen Previous Editor。您不需要任何扩展。

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

于 2020-06-08T02:52:35.537 回答
-1

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

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

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

于 2021-05-19T05:16:36.037 回答
-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 脚本的两个重新映射。我认为这是完成此类任务的绝佳工具。

于 2008-08-21T20:30:35.973 回答