Cambiar el comportamiento de Ctrl + Tab para moverse entre documentos en Visual Studio

¿Es posible cambiar el funcionamiento de Ctrl + Tab y Shift + Ctrl + Tab en Visual Studio? He desactivado la ventana del navegador emergente, porque solo quiero cambiar entre los elementos en el control de tabs. Mi problema es la inconsistencia de lo que hacen los cambios al documento siguiente y al anterior.

Cada otro progtwig que utiliza un control de tabulación para el documento abierto que he visto usa Ctrl + Tab para moverse de izquierda a derecha y Shift + Ctrl + Tab para ir de derecha a izquierda. Visual Studio rompe esto con su salto a la última pestaña seleccionada. Nunca se puede saber en qué documento terminará, y nunca es lo mismo dos veces.

Es muy contrario a la intuición. ¿Es esta una manera sutil de alentar a todos a que solo tengan dos documentos abiertos a la vez?


Digamos que tengo algunos archivos abiertos. Estoy trabajando en uno, y necesito ver lo que está en la siguiente pestaña a la derecha. En cualquier otra aplicación única en la faz de la Tierra, Ctrl + Tab me llevará hasta allí. Pero en Visual Studio, no tengo idea de a cuál de las otras tabs me llevaré. Si solo tengo dos documentos abiertos, esto funciona muy bien. Tan pronto como llegue a tres o más, todas las apuestas estarán desactivadas en cuanto a la pestaña a la que Visual Studio ha decidido enviarte.

El problema con esto es que no debería tener que pensar en la herramienta, debería desvanecerse en un segundo plano, y debería pensar en la tarea. El comportamiento de las tabs actuales me saca de la tarea y me obliga a prestar atención a la herramienta.

En Visual Studio 2015 (así como en las versiones anteriores de VS, pero debe instalar Productivity Power Tools si está utilizando VS2013 o menos), hay dos nuevos comandos en Visual Studio:

Window.NextTab y Window.PreviousTab

Simplemente ve a remapearlos desde Ctrl + Alt + AvPág / Ctrl + Alt + AvPág para Ctrl + Tab / Ctrl + Mayús + Pestaña en:

Herramientas de menú -> Opciones -> Entorno -> Teclado

Nota: en versiones anteriores como Visual Studio 2010, Window.NextTab y Window.PreviousTab se llamaban Window.NextDocumentWellTab y Window.PreviousDocumentWellTab .

Visual Studio 2010 tiene, integrado, una forma de resolver esto.

Por defecto, Ctrl + Tab y Ctrl + Shift + Tab están asignados a Window.[Previous/Next]..Document , pero puede, a través de

 Tools -> Options -> Environment -> Keyboard, 

elimine esas asignaciones de teclas y vuelva a asignarlas a Window.[Next/Previous]Tab para agregar el comportamiento deseado.

se puede cambiar, al menos en VS 2012 (creo que debería funcionar también para 2010).

1) TOOLS > Options > Environment > Keyboard

(¡Sí TOOLS, es VS2012!) Ahora hay tres atajos para verificar.

2) Window.NextDocumentWindow : puede llegar allí rápidamente escribiendo en el panel de búsqueda en la parte superior. Ahora este es tu enemigo . Quítalo si no te gusta. Cámbielo a otra cosa (y no olvide el botón Asignar ) si quiere tener el suyo propio, pero recuerde ese atajo sea lo que sea al final . Será útil más tarde.

(Me refiero a que este es el atajo que recuerda tu última pestaña)

enter image description here

3) Ahora busque Window.NextDocumentWindowNav : este es el mismo que el anterior, pero muestra una vista previa de las tabs abiertas (puede navegar a otras ventanas demasiado rápido con esta ventana emergente). Sin embargo, nunca encontré esto útil. Haz todo lo mencionado en el paso 2 (no olvides recordar ).

4) Window.NextTab – tu poción mágica. Esto le permitirá desplazarse por las tabs en el orden de reenvío. ¿Puede ser que quieras CTRL + TAB ? De nuevo, paso 2 y recuerda .

5) Ahora coloque el cursor en las teclas de método abreviado de la prensa: cuadro de texto (no importa qué se seleccione actualmente, no va a Asignar esta vez), y escriba primero de los tres (o dos o uno) atajos.

enter image description here

Verás el acceso directo actualmente utilizado por: en la lista. Asegúrese de no tener una entrada duplicada para el acceso directo. En la imagen, no hay entradas duplicadas. En caso de que tenga (una rareza), diga X, luego vaya a X y elimine el atajo. Repita este paso para otros atajos también.

6) Ahora repita 1-5 para atajos Previous también (preferiblemente agregando Shift ).

7) Bonificación: Seleccione el esquema de mapeo VS2005 (en la parte superior de la misma casilla), de modo que ahora obtiene F2 para Renombrar miembros y no CTRL + R + R , y F7 para Código de vista y no CTRL + ALT + 0 .

Soy de la opinión de que VS lo hizo bien por defecto. Me resulta extremadamente útil que VS recuerde lo que utilicé por última vez, y facilita el cambio, muy parecido a lo que hace el sistema operativo (en ALT + TAB ). Mi navegador también hace lo mismo por defecto (Opera), aunque sé que Firefox se comporta de manera diferente.

En Visual Studio 2012 o posterior (2013, 2015, 2017 …):

  1. Examine el menú Herramientas / Opciones / Entorno / Teclado.
  2. Busque el comando ‘Window.NextTab’, configure el acceso directo para Ctrl + Tab
  3. Busque el comando ‘Window.PreviousTab’, establezca el acceso directo a Ctrl + Shift + Tab

enter image description here

Navegue hasta la publicación de blog Macro de Unstupidifier de Visual Studio Tab y haga uso de la macro. Después de aplicar la macro a su instalación de Visual Studio, puede vincular sus métodos abreviados de teclado favoritos. También observe la corrección de registro en los comentarios para no mostrar el macro globo, ya que pueden volverse molestos después de un tiempo.

Después de un par de horas de búsqueda encontré una solución para cambiar entre documentos abiertos usando CTRL + TAB que se mueven de izquierda a derecha y MAYÚS + CTRL + TAB para ir de derecha a izquierda.

En resumen, necesitas copiar y pegar esta macro:

 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 

El macro proviene de: http://www.mrspeaker.net/2006/10/12/tab-un-stupidifier/

Si nunca agrega una macro a Visual Studio, hay un enlace muy útil sobre cómo hacerlo .

La filosofía del orden de las tabs de Visual Studio es muy contraintuitiva ya que el orden de las tabs mostradas difiere de la lógica de cambio de tabs, haciendo que el orden de las tabs sea completamente inútil .

Por lo tanto, hasta que surja una solución mejor, cambie el diseño de la ventana (en Entorno-> General) desde documentos con tabs a documentos múltiples; no cambiará el comportamiento, pero reduce la confusión causada por las tabs.

¡De esta forma también encontrará el DocumentWindowNav más útil!

Estoy 100% de acuerdo con Jeff.

Trabajé en Borland C ++ Builder durante varios años y una de las características que más extraño es el orden de tabulación de documentos “correctos” con CtrlTab . Como dijo Jeff, ” el comportamiento de las tabs actuales me saca de la tarea y me obliga a prestar atención a la herramienta ” es exactamente lo que siento al respecto, y estoy muy sorprendido por el hecho de que no haya muchas personas se quejan de esto.

Creo que CtrlF6 – NextDocumentWindowNav – navega documentos basados ​​en la última hora activada del documento. Este comportamiento es muy parecido a cómo solían comportarse las aplicaciones MDI en los viejos tiempos.

Teniendo esto en cuenta, generalmente utilizo Ctrl + F6 para alternar entre 2 documentos (lo cual es muy útil para cambiar entre archivos .cpp y .h cuando se trabaja en proyectos de C ++) incluso cuando hay más de 2 documentos abiertos actualmente. Por ejemplo, si tiene 10 documentos abiertos (Tab1, Tab2, Tab3, …., Tab10), hago clic en Tab1 y luego en Tab2. Cuando hago Ctrl + F6 y suelto las teclas, saltaré a Tab1. Presionar Ctrl + F6 nuevamente me llevará de vuelta a Tab2.

Supongo que quieres lo que VSS llama Next (Previous) DocumentWindow. Por defecto, está en Ctrl (-Shift) -F6 en mi VSS 8. En Ctrl (-Shift) -Tab tienen Next(Previous)DocumentWindowNav . Puede cambiar las asignaciones de teclas a través de Herramientas / Opciones / Teclado.

En la twig de registro: HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 9.0 agregue DWORD llamado “UseMRUDocOrdering” con valor de 1. Ordenará los documentos que se hayan utilizado recientemente y se colocarán a la izquierda. No es perfecto, pero es mejor que la mala conducta predeterminada.

Los accesos directos Ctl + Alt + PgUp o PgDn funcionaron para alternar la pestaña next / prev de la caja por mí …

No uso Visual Studio ( sí, realmente, no lo uso ), pero AutoHotkey puede reasignar cualquier tecla de acceso rápido globalmente o en una aplicación particular:

 #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 

Estas son dos remapeos de mi script principal de AutoHotKey. Creo que es una excelente herramienta para este tipo de tareas.