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


286

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

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

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


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

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


4
«Я отключил всплывающее окно навигатора» ... Как вы отключили раздражающее всплывающее окно выбора? Это так раздражает просто мерцать каждый раз, когда я нажимаю Ctrl + Tab.
demoncodemonkey

31
Ну вот, в Сервис-> Параметры-> Клавиатура я переназначил Ctrl + Tab из Window.NextDocumentWindowNav в Window.NextDocumentWindow (удалил "Nav"). И то же самое с Ctrl + Shift + Tab с Window.PreviousDocumentWindowNav.
demoncodemonkey

11
Это неправильно, что мне нравится такое поведение, так как оно похоже на alt-tab?
Тео Белер

3
Visual Studio, по-видимому, перемещается по вкладкам с использованием поведения «последний использованный» (MRU). Notepad ++ предлагает возможность включить / отключить это поведение (так что некоторым это нравится). Я действительно хотел бы иметь возможность переключиться на обычное / интуитивное поведение.
Андре Карон,

4
Честно говоря, мне не нравится, когда программа циклически проходит в визуальном порядке табуляции. Я согласен с поведением Visual Studio. Для каждой вкладки ctrl + она возвращается к последней использованной, а затем к последней использованной перед этим. Шаблон был там очень давно (VB6 или прежде чем я думаю). Я имею в виду, используйте шаблон, который вы предпочитаете, но если вы знаете, как он работает, это легче оценить :)
Джош Робинсон

Ответы:


227

В Visual Studio 2015 (как и в предыдущих версиях VS, но вы должны установить инструменты Power Tools, если вы используете VS2013 или ниже), в 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 .


1
Это лучший ответ для Visual Studio 2010. Это было очень полезно. Принятое макрорешение уступает этому.
JMQ

2
Пока нет версии для Visual Studio 2012
Полковник Паник,

4
Это также не поможет, если вы используете Visual Studio Express
BornToCode

18
В Visual Studio 2012 имена команд изменились незначительно. Теперь это Window.NextTab и Window.PreviousTab .
JP Ten Berge

3
@JP ten Berge - я протестировал это в VS 2012, и ярлык Window.PreviousTab (Ctrl + Alt + PgUp) не работает, если вы находитесь в режиме Razor (файл .cshtml). Очень раздражает, хотя Ctrl + Alt + PgDown все еще работает, так что вы не совсем застряли. Есть также Window.NextDocumentWindow (Ctrl + F6), хотя это, кажется, переключает вкладки в странном порядке.
DGreen

70

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

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

Tools -> Options -> Environment -> Keyboard,

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


5
Видимо, кто-то запутал рассуждения, стоящие за отрицательным голосом - если ответ не соответствует вопросу или если он на самом деле отрицательный, он заслуживает одного ... Но мой ответ отвечает на вопрос правильно, хотя и не так, как ваш ответ. Это просто мое ожидание, что люди действительно поймут меню опций, а не «Вот, запустите этот скрипт» или «Установите это дополнение!» ... Разве это не сайт для программистов?
Зои

1
Возможно, люди пытались переключаться между вкладками документов. Редактирование 'Window. [Next / Previuos] Tab' не повлияло на вкладки документа для меня в VS2010, в то время как решение @thepaulpage помогло. +1 за ясный и свободный от аддонов подход!
GnomeDePlume

Also также у меня возникла мысль, почему кто-то может понизить ваш ответ: в Visual Studio 2010 была какая-то странная версия, в которой не было опции «Клавиатура». Так что, вероятно, тот имел эту версию, посмотрел на варианты и решил, что ответ неправильный, поскольку с их субъективной точки зрения это действительно так.
Привет, Ангел,

1
Я должен был удалить привязку из Window.[Previous|Next]DocumentWindowнастройки для этого, чтобы работать (в VS2015). По умолчанию для него был отдельный текстовый редактор, который, казалось, имел приоритет.
Кэт

51

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

1) TOOLS > Options > Environment > Keyboard

(Да, ИНСТРУМЕНТ, его VS2012!) Теперь три ярлыка для проверки.

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

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

введите описание изображения здесь

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

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

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

введите описание изображения здесь

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

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

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

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


Я не считаю это поведение анти-не-интуитивным. ;-)
dotNET

мнение в начале этого ответа всегда выдвигало меня как неинформативное и (из-за большого размера) излишне антагонистическое.
thepaulpage

@ thepaulpage Я обновил свой ответ. Причина, по которой мне пришлось высказать свое мнение, заключается в том, что многие пользователи (включая OP) высказали свое мнение о том, что оно нелогично.
nawfal

16

В Visual Studio 2012 или более поздней версии (2013, 2015, 2017 ...):

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

введите описание изображения здесь


4
Для справки, по умолчанию Ctrl + Tab и Ctrl + Shift + Tab отображаются на команды Window.NextDocumentWindowNav и Window.PreviousDocumentWindowNav.
Рори О'Кейн

8

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


По-видимому, он все еще ломается при некоторых условиях, но это самый близкий к действительной работе, как хотелось бы.
Джефф Кускутис

В VS 2010 вы можете настроить Ctrl + Tab и Ctrl + Shift + Tab для переключения между текстовыми документами, но он не работает с вкладками дизайнера или BinaryEditor. Макрос из вышеупомянутого сообщения в блоге - единственный метод, который работает с большинством типов окон документа. Я также подал в Microsoft сообщение об ошибке, которая содержит более подробную информацию ( goo.gl/K9rz ), и они сказали, что они изменятся Window.NextTabи Window.PreviousTabобеспечат переключение не-MRU для документов в «следующей версии Visual Studio».
Грег Брей

7

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


2
Требуется ли еще 10 секунд, чтобы сделать это в первый раз, и мигать значок в системном трее каждый раз, когда вы используете его? Это то, что сделал VS2005, и я не мог это принять ...
Роман Старков

1
Ромкинс: Да, я боюсь. Все еще не жизнеспособное решение.
Дэвид Фостер

1
Ромкинс: да, это правда, каждый раз, когда я выполняю макрос, в системном трее появляется всплывающая подсказка, указывающая, что макрос работает. чтобы избавиться от этого баллона, вы можете отредактировать реестр Windows и добавить следующее значение DWORD: «DontShowMacrosBalloon» = 1 в этом ключе: HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 9.0 (используйте 9.0 для Visual Studio 2008; 8.0 для 2005) , Воздушный шар исчезнет, ​​но значок на панели задач все равно появится. Для меня это решение достаточно хорошее, я не нашел лучшего, и я ненавижу поведение orginalne ctrl + tab.
user410261

6

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

Поэтому, пока не будет найдено лучшее решение, измените расположение окон (в Environment-> General) с документов с вкладками на несколько документов; это не изменит поведение, но уменьшит путаницу, вызванную вкладками.

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


6

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


3
Нелогичная вещь: если ваша панель вкладок имеет только горизонтальное пространство для n вкладок, эти ярлыки не заставят вкладки зацикливаться для вкладок, которые в данный момент не видны!
sergiol

5

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

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

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

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


5

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


3
Ctrl- (Shift-) F6 не приводит вас к левой или правой вкладке. В том же порядке, что и Ctrl-Tab, но без раздражающего окна.
Shoosh

1
Правильно ... В Visual Studio 2010 есть Window.NextTab и Window.PreviousTab, которые выполняют изменение документов не на основе MRU, но не работают со всеми типами документов: connect.microsoft.com/VisualStudio/feedback/details/571750/…
Грег Брей

4

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


0

Обновлено до VS 2017+, где, согласно комментарию @ J-Bob под ответом @ thepaulpage, (выделение добавлено):

Похоже, команды снова изменились. Сейчас 2017, и сочетания клавиш называются « Открыть следующий редактор» и « Открыть предыдущий редактор» . Вам не нужно никаких расширений для этого.

Вы можете найти опции в разделе «Настройки», к которым можно получить доступ через символ шестеренки в левом нижнем углу или по [Ctrl]+,команде.


-5

Я не использую 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. Я думаю, что это отличный инструмент для этого типа задач.


3
Извините, но проблема в том, что нет ключа, который делает правильные вещи, так что это не поможет.
Роман Старков
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.