Зміна поведінки 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. Для кожної вкладки 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
Це найкраща відповідь зараз для візуальної студії 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
Люди, можливо, прагнули переходити між вкладками документів. Редагування "Вікна. [Далі / Previuos]" Вкладка "не вплинуло на вкладки документів для мене у VS2010, тоді як рішення @thepaulpage зробило. +1 за чіткий та бездодатковий підхід!
GnomeDePlume

⁺¹, а також я просто задумався, чому хтось може спростувати вашу відповідь: у Visual Studio 2010 була якась дивна версія, яка не мала опції «Клавіатура». Тож, мабуть, хтось мав цю версію, переглянув варіанти та вирішив, що відповідь неправильний, оскільки з їх суб'єктивної точки зору це дійсно так.
Привіт-Ангел

1
Мені довелося видалити прив’язку з Window.[Previous|Next]DocumentWindowналаштування, щоб це працювало (у VS2015). За замовчуванням було окреме текстове редагування для нього, яке, здавалося, має пріоритет.
Кет

51

його можна змінити, принаймні у VS 2012 (я думаю, він повинен працювати і в 2010 році).

1) TOOLS > Options > Environment > Keyboard

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

2) Window.NextDocumentWindow- ви можете швидко доїхати туди, набравши на панелі пошуку вгорі. Тепер це ваш ворог . Видаліть його, якщо вам це не подобається. Змініть його на щось інше (і не забудьте кнопку Призначити ), якщо хочете мати свою власну, але пам’ятайте цю ярлику, що б вона не була в кінці кінців . Це стане в нагоді пізніше.

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

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

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

4) Window.NextTab- ваше чарівне зілля. Це дозволить вам переглядати вкладки в прямому порядку. Можливо, ви хочете CTRL+ TAB? Знову крок 2 і пам’ятайте .

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

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

Ви побачите ярлик, яким зараз користуються: перелічені. Переконайтесь, що у вас немає дубліката запису для ярлика. На малюнку немає повторюваних записів. Якщо у вас є (рідкість), скажіть X, перейдіть до X і видаліть ярлик. Повторіть цей крок і для інших ярликів.

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

7) Бонус: Виберіть схему відображення VS2005 (у верхній частині цього ж поля), тож тепер ви отримаєте F2для Перейменування членів і не CTRL+ R+ R, а F7для View Code, а не CTRL+ ALT+ 0.

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


Я також не вважаю цю поведінку антиінтуїтивно зрозумілою. ;-)
dotNET

думка у верхній частині цієї відповіді завжди сприймала мене як неінформативну і (через великий розмір) непотрібно антагоністичну.
thepaulpage

@thepaulpage Я оновив свою відповідь. Я мусив дати думку, тому що багато користувачів (включаючи ОП) висловили свою думку, що це протиінтуїтивно.
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нададуть можливість перемикання без МРУ для документів у "наступній версії 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) . Повітряна куля зникає, але все ще з’явиться значок системного лотка. Для мене це рішення досить добре, що я не знайшов кращого, і я ненавиджу поведінку ctrl + orginalne ctrl +.
user410261

6

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

Тому поки не з’явиться краще рішення, змініть макет вікна (у середовищі-> загальне) з «вкладених» документів на багатодокументальні; це не змінить поведінку, але зменшить плутанину, викликану вкладками.

Таким чином ви також знайдете DocumentWindowNav кориснішим!


6

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


3
Нелогічна річ: якщо на панелі вкладок є лише горизонтальний простір для n вкладок, ці ярлики не зроблять вкладку циклічною для вкладок, які не видно на даний момент!
серхіол

5

Я на 100% згоден з Джеффом.

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

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

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


5

Я думаю, ви хочете, що VSS викликає Наступне (Попереднє) 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.