Изменение поведения Ctrl + Tab для перемещения между документами в Visual Studio

Возможно ли изменить работу Ctrl + Tab и Shift + Ctrl + Tab в Visual Studio? Я отключил окно всплывающего навигатора, потому что я хочу только переключаться между элементами в элементе управления вкладкой. Моя проблема заключается в несогласованности того, что делает переход к следующему и предыдущему документу.

Каждая другая программа, использующая элемент управления вкладкой для открытого документа, который я видел, использует Ctrl + Tab для перемещения слева направо и Shift + Ctrl + Tab, чтобы перейти вправо. Visual Studio разбивает это с помощью перехода на последнюю выбранную вкладку. Вы никогда не узнаете, на каком документе вы закончите, и он никогда не будет таким же, как дважды.

Это очень противоречиво. Является ли это тонким способом побудить всех к открытию сразу двух документов?


Скажем, у меня открыто несколько файлов. Я работаю в одном, и мне нужно увидеть, что находится на следующей вкладке справа. В любом другом одиночном приложении на лице Земли Ctrl + Tab доставит меня туда. Но в Visual Studio я понятия не имею, какой из других вкладок мне потребуется. Если у меня будет только два открытых документа, это отлично работает. Как только вы перейдете к трем или более, все ставки отключены относительно того, на какую вкладку Visual Studio решила отправить вас.

Проблема в том, что мне не нужно думать об этом инструменте, оно должно исчезать в фоновом режиме, и я должен думать о задаче. Текущее поведение вкладки продолжает вытаскивать меня из задачи и заставляет меня обратить внимание на инструмент.

Ответ 1

В Visual Studio 2015 (а также в предыдущих версиях VS, но вы должны установить Powerivity Tools, если используете VS2013 или ниже), есть два новые команды в Visual Studio:

Window.NextTab и Window.PreviousTab

Просто перетащите их из Ctrl + Alt + PageUp/Ctrl + Alt + PageDown в Ctrl + Tab/Ctrl + Shift + Tab in:

Инструменты меню → Параметры → Среда → Клавиатура

Примечание. В более ранних версиях, таких как Visual Studio 2010, Window.NextTab и Window.PreviousTab, были названы Window.NextDocumentWellTab и Window.PreviousDocumentWellTab.

Ответ 2

Visual Studio 2010 имеет встроенный способ решения этой проблемы.

По умолчанию Ctrl + Tab и Ctrl + Shift + Tab присваиваются Window.[Previous/Next]..Document, но вы можете через

Tools -> Options -> Environment -> Keyboard,

удалите эти назначения клавиш и переназначьте их до Window.[Next/Previous]Tab, чтобы добавить желаемое поведение.

Ответ 3

он может быть изменен, по крайней мере, в VS 2012 (я думаю, он должен работать и в 2010 году).

1) TOOLS > Options > Environment > Keyboard

(Да TOOLS, его VS2012!) Теперь три ярлыка для проверки.

2) Window.NextDocumentWindow - вы можете быстро добраться до него, набрав на панели поиска сверху. Теперь это ваш враг. Удалите его, если вам это не нравится. Измените его на что-то еще (и не забудьте кнопку Назначить), если хотите иметь свой собственный, , но помните этот ярлык, что бы он ни был в конце. Это пригодится позже.

(Я имею в виду, что это ярлык, который запоминает вашу последнюю вкладку)

enter image description here

3) Теперь ищите Window.NextDocumentWindowNav - это то же самое, что и выше, но показывает предварительный просмотр открытых вкладок (вы можете быстро перейти к другим окнам с помощью этого всплывающего окна). Я никогда не находил это полезным, хотя. Сделайте все, что упоминалось в шаге 2 (не забудьте запомнить).

4) Window.NextTab - ваше волшебное зелье. Это позволит вам перемещаться по вкладкам в прямом порядке. Может быть, вы хотите CTRL + TAB? Снова шаг 2 и помните.

5) Теперь поместите курсор в клавиши быстрого доступа Press: текстовое поле (не имеет значения, что выбрано в настоящее время, вы не собираетесь назначать это время) и введите первый из трех (или двух или один) ярлыков.

enter image description here

Вы увидите ярлык, в настоящее время используемый: в списке. Убедитесь, что у вас нет дубликатов для ярлыка. В pic нет дубликатов записей. Если у вас есть (редкость), скажите X, перейдите к X и удалите ярлык. Повторите этот шаг и для других ярлыков.

6) Теперь повторите 1-5 для Previous ярлыков (желательно добавить Shift).

7) Бонус: выберите схему сопоставления VS2005 (вверху того же поля), так что теперь вы получаете F2 для членов Rename, а не CTRL + R + R и F7 для Просмотреть код, а не CTRL + ALT + 0.

Я считаю, что VS по умолчанию имеет это право. Мне очень полезно, что VS запоминает то, что я использовал последним, и упрощает переключение, подобно тому, что делает сама ОС (на ALT + TAB). Мой браузер делает то же самое по умолчанию (Opera), хотя я знаю, что Firefox ведет себя по-другому.

Ответ 4

В Visual Studio 2012 или позже (2013, 2015, 2017...):

  • Просмотрите меню Сервис/Параметры/Среда/Клавиатура.
  • Найдите команду "Window.NextTab", установите ярлык на Ctrl + Tab
  • Найдите команду "Window.PreviousTab", установите ярлык на Ctrl + Shift + Tab

enter image description here

Ответ 5

Перейдите к сообщению в блоге вкладка Visual Studio Tab Un-stupidifier Macro и используйте макрос. После применения макроса к установке Visual Studio вы можете привязать к ним свои любимые сочетания клавиш. Также обратите внимание на исправление реестра в комментариях, чтобы не отображать макрос, поскольку они могут раздражать через некоторое время.

Ответ 6

После нескольких часов поиска я нашел решение, как переключаться между открытыми документами с помощью 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, есть очень полезная ссылка, как сделать это.

Ответ 7

Философия порядка вкладок Visual Studio очень противоречива, так как порядок отображаемых вкладок отличается от логики переключения табуляции, делая упорядочение вкладок полностью бесполезным.

Итак, пока не появится лучшее решение, измените макет окна (в разделе "Среда- > Общие" ) из вкладок-документов в несколько документов; он не изменит поведение, но уменьшит путаницу, вызванную вкладками.

Таким образом вы также найдете DocumentWindowNav более полезным!

Ответ 8

Я думаю, вы хотите, чтобы VSS называет Next (Предыдущий) DocumentWindow. По умолчанию он находится в Ctrl (-Shift) -F6 на моем VSS 8. В Ctrl (-Shift) -Tab у них есть Next(Previous)DocumentWindowNav. Вы можете изменить назначение клавиш с помощью инструментов/параметров/клавиатуры.

Ответ 9

Я на 100% согласен с Джеффом.

Я работал над Borland С++ Builder в течение нескольких лет, и одна из функций, которые я пропускаю больше всего, - это "правильный" порядок табуляции документа с Ctrl - Tab. Как сказал Джефф, "текущее поведение вкладки продолжает вытаскивать меня из задачи и заставляет меня обратить внимание на инструмент", именно так я об этом думаю, и меня очень удивляет тот факт, что нет многие люди жалуются на это.

Я думаю, что Ctrl - F6 - NextDocumentWindowNav - перемещает документы на основе последнего активированного документа документа. Такое поведение очень похоже на то, как приложения MDI использовали себя в прежние времена.

С учетом этого я обычно использую Ctrl + F6 для переключения между двумя документами (что очень удобно при переключении между .cpp и .h файлами при работе над проектом С++), даже если есть больше чем 2 открытых документа. Например, если у вас открыто 10 документов (Tab1, Tab2, Tab3,...., Tab10), я нажимаю Tab1, а затем Tab2. Когда я делаю Ctrl + F6 и отпускаю ключи, я перейду к Tab1. Повторное нажатие Ctrl + F6 приведет меня обратно в Tab2.

Ответ 10

В разделе реестра: HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0 добавьте DWORD с именем "UseMRUDocOrdering" со значением 1. Он будет заказывать документы, которые в последнее время используются слева. Это не идеально, но лучше, чем неправильное поведение по умолчанию.

Ответ 11

Ctl + Alt + PgUp или PgDn ярлыки, обработанные для переключения следующей/предыдущей вкладки из коробки для меня...

Ответ 12

Я не использую 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

Это два переназначения моего основного автозапуска script. Я считаю, что это отличный инструмент для этого типа задач.