ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

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

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

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

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

J
Josh1billion

在 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。


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

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 中)。默认情况下,它有一个单独的文本编辑器绑定,似乎具有优先权。
M
Mwiza

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

1) TOOLS > Options > Environment > Keyboard

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

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

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

https://i.stack.imgur.com/GYO0E.png

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

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

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

https://i.stack.imgur.com/PRiW9.png

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

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

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

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


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

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

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

https://i.stack.imgur.com/8WKmE.png


作为参考,默认情况下,Ctrl+Tab 和 Ctrl+Shift+Tab 映射到命令“Window.NextDocumentWindowNav”和“Window.PreviousDocumentWindowNav”。
P
Peter Mortensen

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


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

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


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

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


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

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

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

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


H
Hulk1991

我 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。


c
chicks

我猜你想要 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/…
r
riffraff

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


J
JWCS

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

看起来命令又变了。现在是 2017 年,键盘快捷键称为“打开下一个编辑器”和“打开上一个编辑器”。您不需要任何扩展。

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


j
joepcash

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

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

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


此答案适用于 VScode,尽管问题适用于 Visual Studio
P
Peter Mortensen

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


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