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

Posted

技术标签:

【中文标题】更改 Ctrl + Tab 行为以在 Visual Studio 中的文档之间移动【英文标题】:Changing Ctrl + Tab behavior for moving between documents in Visual Studio 【发布时间】:2010-09-06 11:14:06 【问题描述】:

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

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

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


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

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

【问题讨论】:

"我已禁用弹出导航窗口"... 你是如何关闭烦人的选择窗口弹出窗口的?每次按 Ctrl+Tab 都会闪烁,太烦人了。 啊,在工具->选项->键盘中,我将 Ctrl+Tab 从 Window.NextDocumentWindowNav 重新映射到 Window.NextDocumentWindow(删除了“导航”)。与 Window.PreviousDocumentWindowNav 的 Ctrl+Shift+Tab 相同。 我喜欢这种行为有错吗,就像 alt-tab 一样? Visual Studio 似乎使用“最近使用的”(MRU) 行为浏览选项卡。 Notepad++ 提供了启用/禁用此行为的选项(因此似乎有些人喜欢它)。不过,我真的很希望能够切换到常规/直观的行为。 老实说,我不喜欢程序以可视标签顺序循环。我同意 Visual Studio 的行为。对于每个 ctrl+tab,它会回到最后使用的那个,然后是之前最后使用的那个。这种模式已经存在了很长时间(VB6 或我认为之前)。我的意思是,使用你喜欢的模式,但如果你知道它是如何工作的,那就更容易欣赏了:) 【参考方案1】:

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

Window.NextTabWindow.PreviousTab

只需从 Ctrl+Alt+PageUp/Ctrl+Alt 重新映射它们kbd>+PageDownCtrl+Tab/Ctrl+Shift+标签在:

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

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

【讨论】:

这是目前 Visual Studio 2010 的最佳答案。这非常有帮助。公认的宏解决方案不如这个。 尚无 Visual Studio 2012 版本 如果你使用 Visual Studio Express 也无济于事 在 Visual Studio 2012 中,命令名称略有变化。现在是 Window.NextTabWindow.PreviousTab @JP ten Berge - 我在 VS 2012 中对此进行了测试,如果您使用的是 Razor 视图 (.cshtml),则 Window.PreviousTab 快捷方式 (Ctrl+Alt+PgUp) 不起作用文件)。很烦人,虽然 Ctrl+Alt+PgDown 仍然有效,所以你并没有完全卡住。还有 Window.NextDocumentWindow (Ctrl+F6) 虽然这似乎以奇怪的顺序循环选项卡。【参考方案2】:

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

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

Tools -> Options -> Environment -> Keyboard,

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

【讨论】:

显然有人混淆了否决票背后的原因-如果答案不符合问题,或者如果它实际上是否定的,那么它应该得到一个......但我的回答正确,尽管少于你的答案。只是我希望人们真正理解选项菜单而不是“在这里,运行这个脚本”或“安装这个插件!”......这不是程序员的网站吗? 人们可能一直希望在文档选项卡之间切换。在 VS2010 中编辑 'Window.[Next/Prevuos]Tab' 不会影响我的文档选项卡,而 @thepaulpage 的解决方案会影响。 +1 清晰且无插件的方法! ⁺¹,我也刚刚想到为什么有人会否决你的答案:Visual Studio 2010 有一些奇怪的版本,没有“键盘”选项。所以可能这个人有这个版本,查看了选项,并认为答案是错误的,因为从他们的主观观点来看确实如此。 我必须从 Window.[Previous|Next]DocumentWindow 设置中删除绑定才能使其正常工作(在 VS2015 中)。默认情况下,它有一个单独的文本编辑器绑定似乎具有优先权。【参考方案3】:

它可以改变,至少在 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: 文本框中(不管当前选择了什么,这次你不会Assign),并键入三个(或两个或一个)快捷方式中的第一个。

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

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

7) 奖励:选择 VS2005 映射方案(在同一个框的顶部),所以现在你得到 Rename 成员的 F2 而不是 CTRL+R+RF7 用于 查看代码 而不是 CTRL+ALT+0.

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

【讨论】:

我也不觉得这种行为反非反直觉。 ;-) 这个答案顶部的观点一直困扰着我,因为它没有提供信息并且(因为尺寸大)不必要的对抗。 @thepaulpage 我已经更新了我的答案。我不得不发表意见的原因是因为许多用户(包括 OP)都认为这是违反直觉的。 我从未使用过 alt+tab,因为它对我来说非常不直观。我在浏览器和 np++ 中经常使用 ctrl+tab,所以 VS 的类似 alt+tab 的默认行为对我来说完全没用。我已经知道我需要进入哪个标签,我不希望需要额外的想法来记住我最近是否去过其他标签。【参考方案4】:

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

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

【讨论】:

供参考,默认情况下,Ctrl+Tab 和 Ctrl+Shift+Tab 映射到命令 'Window.NextDocumentWindowNav' 和 'Window.PreviousDocumentWindowNav'。【参考方案5】:

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

【讨论】:

它显然在某些情况下仍然会中断,但这是最接近实际工作所需的一个。 在 VS 2010 中,您可以配置 Ctrl+Tab 和 Ctrl+Shift+Tab 以在文本文档之间进行切换,但它不适用于设计器选项卡或 BinaryEditor。上述博客文章中的宏是唯一适用于大多数文档窗口类型的方法。我还向 Microsoft 提交了一个包含更多详细信息的错误 (goo.gl/K9rz),他们说他们将更改 Window.NextTabWindow.PreviousTab 以在“下一个 Visual Studio 版本”中为文档提供非 MRU 切换。跨度> 【参考方案6】:

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

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

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

【讨论】:

【参考方案7】:

Ctl + Alt + PgUpPgDn 快捷方式用于切换开箱即用的下一个/上一个选项卡对我来说……

【讨论】:

不合逻辑的事情是:如果您的选项卡栏只有 n 个选项卡的水平空间,那么这些快捷方式不会使选项卡循环为目前不可见的选项卡!【参考方案8】:

经过几个小时的搜索,我找到了一个解决方案,如何使用从左到右移动的 CTRL+TABSHIFT+ 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。

【讨论】:

第一次执行此操作是否仍需要 10 秒,并且每次使用时都会闪烁系统托盘图标? VS2005就是这么干的,我受不了了…… Romkyns:是的,我很害怕。仍然不是一个可行的解决方案。 Romkyns:是的,确实如此,每次执行宏时,系统托盘中都会弹出一个气球,表示宏正在运行。要摆脱那个气球,您可以编辑 Windows 注册表并添加以下 DWORD 值:“DontShowMacrosBalloon”= 1,在该键中:HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0(Visual Studio 2008 使用 9.0;2005 使用 8.0) .气球消失但系统托盘图标仍然会出现。对我来说,这个解决方案已经足够好了,我还没有找到更好的解决方案,我讨厌原来的 ctrl+tab 行为。【参考方案9】:

我 100% 同意杰夫。

我在 Borland C++ Builder 上工作了几年,我最怀念的功能之一是使用 Ctrl-Tab 的“正确”文档跳格顺序。正如 Jeff 所说,“当前的选项卡行为让我无法完成任务,让我不得不关注工具”这正是我对此的感受,我对此感到非常惊讶事实上,抱怨这个的人并不多。

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

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

【讨论】:

【参考方案10】:

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

【讨论】:

Ctrl-(Shift-)F6 不会将您带到左侧或右侧选项卡。它与 Ctrl-Tab 的顺序相同,但没有烦人的窗口。 正确... Visual Studio 2010 有 Window.NextTab 和 Window.PreviousTab,它们可以更改基于非 MRU 的文档,但它不适用于所有文档类型:connect.microsoft.com/VisualStudio/feedback/details/571750/…【参考方案11】:

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

【讨论】:

【参考方案12】:

更新到 VS 2017+,其中,根据@thepaulpage 的回答下的@J-Bob's comment,(强调添加):

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

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

【讨论】:

【参考方案13】:

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

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

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

【讨论】:

这个答案是针对VScode的,虽然问题是针对Visual Studio的【参考方案14】:

我不使用 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 脚本的两个重新映射。我认为它是完成此类任务的绝佳工具。

【讨论】:

对不起,但问题是没有 no 键可以做正确的事情,所以这无济于事。

以上是关于更改 Ctrl + Tab 行为以在 Visual Studio 中的文档之间移动的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2013 中的 Ctrl-Tab 快捷方式问题

TIP: Visual Studio 中的窗口导航功能Ctrl+tab

Visual Studio - 导航到解决方案资源管理器的快捷方式

visual studio 的快键键(持续更新)

Visual Studio 常用快捷键

如何更改默认浏览器以在 Visual Studio 2008 中进行调试?