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

是否有可能改变在Visual Studio中Ctrl + TabShift + Ctrl + Tab的工作方式? 我禁用了popup导航窗口,因为我只想在标签控件中的项目之间切换。 我的问题是切换到下一个和以前的文档是不一致的。

每一个使用标签控件打开文档的程序我见过使用Ctrl + Tab从左到右, Shift + Ctrl + Tab从右到左。 Visual Studio会跳转到所选的最后一个选项卡。 你永远无法知道你将以什么样的文件结束,而且两次都不会这样。

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


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

这个问题就是我不应该去思考这个工具,它应该变成背景,我应该考虑这个任务。 目前的标签行为不断把我拉出任务,使我不得不注意的工具。

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

Window.NextTabWindow.PreviousTab

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

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

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

Visual Studio 2010内置了一个解决这个问题的方法。

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

 Tools -> Options -> Environment -> Keyboard, 

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

至less在VS 2012中是可以改变的(我认为它也可以在2010年运行)。

1) TOOLS > Options > Environment > Keyboard

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

2) Window.NextDocumentWindow – 您可以通过在顶部的search窗格上键入快速到达那里。 现在这是你的敌人 。 删除它,如果你不喜欢它。 把它改成别的东西(别忘了Assignbutton),如果你想拥有你自己的东西, 不过要记住,不pipe它到底是什么快捷方式 。 稍后会派上用场。

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

在这里输入图像描述

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

4) Window.NextTab – 你的魔药。 这可以让你按照顺序循环选项卡。 可能是你想CTRL + TAB ? 再次步骤2并记住

5)现在将光标置于按下快捷键:文本框(不pipe是当前选中的内容,这次您不打算指定 ),然后键入三个(或两个或一个)快捷方式中的第一个。

在这里输入图像描述

您将看到当前使用的快捷方式:列出。 确保您没有重复的快捷方式条目。 在图片中,没有重复的条目。 如果你有(稀有),说X,然后去X,并删除快捷方式。 为其他快捷方式重复此步骤。

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

7)奖金:selectVS2005映射scheme(在同一个框的顶部),所以现在你得到F2重命名成员,而不是CTRL + R + RF7查看代码,而不是CTRL + ALT + 0

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

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

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

在这里输入图像描述

导航到博客文章Visual Studio选项卡Un-stupidifiermacros并使用macros。 将macros应用于Visual Studio的安装后,可以将最喜欢的键盘快捷键绑定到它们。 另外请注意registry修复程序不显示macros观气球,因为他们可能会在一段时间后变得恼人。

经过几个小时的search,我find了一个解决scheme,如何使用从左到右移动的CTRL + TABSHIFT + CTRL + TAB从右到左来打开文档。

总之你需要复制和粘贴这个macros:

 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 

macros来自:www.mrspeaker.net/2006/10/12/tab-un-stupidifier/

如果您从不向Visual Studio添加macros,那么有一个非常有用的链接。

Visual Studio标签顺序的原则是非常违反直觉的,因为显示标签的顺序与标签切换逻辑的顺序不同,使得标签的顺序完全无用

因此,除非出现更好的解决scheme,否则将窗口布局(在环境 – >常规中)从标签文档更改为多个文档; 它不会改变行为,但它减less了标签造成的混乱。

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

在registry分支:HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 9.0中添加名为“UseMRUDocOrdering”的DWORD值为1.它将订购最近使用的文档放在左侧。 这不是完美的,但比默认的不当行为更好。

我100%同意杰夫。

我曾经在Borland C ++ Builder工作了好几年,而我最想念的function之一就是使用CtrlTab的“正确的”文档标签顺序。 正如杰夫所说,“ 目前的标签行为不断让我离开任务,使我不得不注意的工具 ”正是我对此的感觉,我很惊讶的事实是,没有很多人抱怨这个。

我认为CtrlF6 – NextDocumentWindowNav – 根据文档上次激活的时间导航文档。 这种行为很像MDI应用程序在过去的行为习惯。

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

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

Ctl + Alt + PgUpPgDn快捷键可以切换下一个/ prev选项卡。

我不使用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脚本的两个重映射。 我认为这是这类任务的一个很好的工具。