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

时间:2020-03-05 18:41:46  来源:igfitidea点击:

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

我见过的所有其他使用制表符控件打开文件的程序都使用Ctrl + Tab从左向右移动,而Shift + Ctrl + Tab从右向左移动。 Visual Studio通过跳转到最后一个选择的选项卡打破了这一点。我们永远不会知道最终将要处理的文档,而且两次也不会以相同的方式进行。

这是非常违反直觉的。这是一种鼓励所有人一次只能打开两个文档的巧妙方法吗?

假设我打开了一些文件。我正在一起工作,我需要查看右侧下一个选项卡中的内容。在地球表面上的所有其他单个应用程序中,Ctrl + Tab可以将我带到那里。但是在Visual Studio中,我不知道它将带我去哪个其他选项卡。如果我只打开过两个文档,那么效果很好。一旦我们转到三个或者三个以上,就无法确定Visual Studio已决定将我们发送到哪个选项卡。

这样做的问题是,我不必考虑该工具,它应该淡出背景,并且我应该考虑该任务。当前选项卡的行为不断使我退出任务,并使我不得不注意该工具。

解决方案

回答

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

回答

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

回答

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

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

这样,我们还将发现DocumentWindowNav更有用!

回答

我100%同意杰夫。

我已经在Borland C ++ Builder上工作了几年,而我最想念的功能之一是使用Ctrl-Tab的"正确"文档制表顺序。正如Jeff所说:"当前的标签行为将我从任务中拉出来,使我不得不注意该工具",这正是我对此的看法,对于没有许多人对此表示抱怨。

我认为Ctrl-F6 NextDocumentWindowNav根据文档的上次激活时间来浏览文档。这种行为很像以前的MDI应用程序的行为。

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

回答

导航到博客文章" Visual Studio选项卡非stupidifier宏"并使用该宏。将宏应用于Visual Studio的安装后,可以将自己喜欢的键盘快捷方式绑定到它们。还请注意注释中的注册表修复程序,因为它们可能会在一段时间后变得烦人,因此不显示宏气球。

回答

经过几个小时的搜索,我找到了一个解决方案,该方法是如何使用从左向右移动的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添加宏,则有一个非常有用的链接。

回答

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