visual-studio - vscode开发react - vscode格式化vue代码




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

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

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

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

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

问题在于我不应该考虑这个工具,它应该消失在背景中,我应该考虑这个任务。 目前的标签行为不断让我离开任务,使我不得不注意这个工具。


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

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

Tools -> Options -> Environment -> Keyboard,

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


Ctl + Alt + PgUpPgDn快捷键用于切换下一个/ prev选项卡的开箱即用...


在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


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


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


我与杰夫达成了100%的协议。

我曾在Borland C ++ Builder工作了好几年,其中最令我错过的功能之一就是使用Ctrl - Tab的“正确”文档标签顺序。 正如杰夫所说,“ 目前的标签行为使我无法脱离任务,并且让我不得不关注这个工具 ”,这正是我对此的感受,而且我对这样的事实感到非常惊讶:许多人抱怨这一点。

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

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


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

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

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


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