تغيير سلوك Ctrl + Tab للتنقل بين المستندات في Visual Studio

StackOverflow https://stackoverflow.com/questions/21027

  •  09-06-2019
  •  | 
  •  

سؤال

هل من الممكن تغيير كيف كنترول + فاتورة غير مدفوعة و يحول + كنترول + فاتورة غير مدفوعة العمل في Visual Studio؟لقد قمت بتعطيل نافذة المتصفح المنبثقة، لأنني أريد فقط التبديل بين العناصر الموجودة في عنصر تحكم علامة التبويب.مشكلتي هي عدم الاتساق بين ما يفعله التبديل إلى المستند التالي والسابق.

لقد رأيت استخدامات لكل برنامج آخر يستخدم عنصر تحكم علامة التبويب للمستند المفتوح كنترول + فاتورة غير مدفوعة للانتقال من اليسار إلى اليمين و يحول + كنترول + فاتورة غير مدفوعة للذهاب من اليمين إلى اليسار.يكسر Visual Studio هذا من خلال الانتقال إلى علامة التبويب الأخيرة المحددة.لا يمكنك أبدًا معرفة الوثيقة التي سينتهي بك الأمر إليها، ولن يحدث الأمر بنفس الطريقة مرتين أبدًا.

إنه أمر غير بديهي للغاية.هل هذه طريقة خفية لتشجيع الجميع على فتح وثيقتين فقط في وقت واحد؟


لنفترض أن لدي بعض الملفات المفتوحة.أنا أعمل في واحدة، وأريد أن أرى ما هو موجود في علامة التبويب التالية على اليمين.في كل تطبيق آخر على وجه الأرض، كنترول + فاتورة غير مدفوعة سوف يحصل لي هناك.لكن في Visual Studio، ليس لدي أي فكرة عن علامات التبويب الأخرى التي ستأخذني إليها.إذا كان لدي وثيقتان مفتوحتان فقط، فهذا يعمل بشكل رائع.بمجرد أن تذهب إلى ثلاثة أو أكثر، يتم إلغاء كل الرهانات على علامة التبويب التي قرر Visual Studio إرسالك إليها.

المشكلة في هذا هي أنه لا ينبغي لي أن أفكر في الأداة، بل يجب أن تتلاشى في الخلفية، ويجب أن أفكر في المهمة.يستمر سلوك علامة التبويب الحالي في إخراجي من المهمة ويجعلني أضطر إلى الاهتمام بالأداة.

هل كانت مفيدة؟

المحلول

في Visual Studio 2015 (وكذلك الإصدارات السابقة من VS، ولكن يجب عليك تثبيت أدوات الطاقة الإنتاجية إذا كنت تستخدم VS2013 أو أقل)، فهناك أمران جديدان في Visual Studio:

Window.NextTab ونافذة. علامة التبويب السابقة

اذهبوا لإعادة رسم خريطة لهم من كنترول+بديل+صفحة لأعلى/كنترول+بديل+اسفل الصفحة ل كنترول+فاتورة غير مدفوعة/كنترول+يحول+فاتورة غير مدفوعة في:

قائمة طعام أدوات -> خيارات -> بيئة -> لوحة المفاتيح

ملحوظة:في الإصدارات السابقة مثل Visual Studio 2010، تمت تسمية Window.NextTab وWindow.PreviousTab Window.NextDocumentWellTab وWindow.PreviousDocumentWellTab.

نصائح أخرى

يحتوي Visual Studio 2010 على طريقة مدمجة لحل هذه المشكلة.

بشكل افتراضي، كنترول+فاتورة غير مدفوعة و كنترول+يحول+فاتورة غير مدفوعة تم تعيينهم ل Window.[Previous/Next]..Document, ، ولكن يمكنك ذلك من خلال

Tools -> Options -> Environment -> Keyboard,

قم بإزالة هذه التعيينات الرئيسية وأعد تعيينها إليها Window.[Next/Previous]Tab لإضافة السلوك المطلوب.

يمكن تغييره، على الأقل في VS 2012 (أعتقد أنه يجب أن يعمل لعام 2010 أيضًا).

1) TOOLS > Options > Environment > Keyboard

(نعم الأدوات، إنه VS2012!) الآن ثلاثة اختصارات للتحقق.

2) Window.NextDocumentWindow - يمكنك الوصول إلى هناك بسرعة عن طريق الكتابة في جزء البحث في الأعلى.الآن هذا هو الخاص بك العدو.قم بإزالته إذا كنت لا تحب ذلك.قم بتغييره إلى شيء آخر (ولا تنس تعيين زر) إذا كنت ترغب في الحصول على الخاص بك، لكن تذكر هذا الاختصار مهما كان في النهاية.وسوف يكون مفيدا في وقت لاحق.

(أعني أن هذا هو الاختصار الذي يتذكر علامة التبويب الأخيرة)

enter image description here

3) الآن ابحث عن Window.NextDocumentWindowNav - هذا هو نفس ما ورد أعلاه ولكنه يعرض معاينة لعلامات التبويب المفتوحة (يمكنك الانتقال إلى النوافذ الأخرى بسرعة كبيرة جدًا باستخدام هذه النافذة المنبثقة).لم أجد هذا مفيدًا أبدًا بالرغم من ذلك.افعل كل ما هو مذكور في الخطوة 2 (لا تنس ذلك يتذكر).

4) Window.NextTab - جرعتك السحرية.سيتيح لك ذلك التنقل بين علامات التبويب بالترتيب الأمامي.ربما تريد كنترول+فاتورة غير مدفوعة؟مرة أخرى الخطوة 2 و يتذكر.

5) الآن ضع المؤشر في اضغط على مفاتيح الاختصار: مربع النص (لا يهم ما هو محدد حاليًا، فلن تفعل ذلك تعيين هذه المرة)، واكتب أولًا من الاختصارات الثلاثة (أو اثنين أو واحدًا).

enter image description here

سوف ترى الاختصار المستخدم حاليًا بواسطة: المدرجة.تأكد من عدم وجود إدخال مكرر للاختصار.في الصورة، لا توجد إدخالات مكررة.في حال كان لديك (نادرة)، قل X، ثم انتقل إلى X، وقم بإزالة الاختصار.كرر هذه الخطوة للاختصارات الأخرى أيضًا.

6) الآن كرر 1-5 ل Previous الاختصارات أيضًا (يفضل إضافة يحول).

7) المكافأة:حدد مخطط تعيين VS2005 (في الجزء العلوي من نفس المربع)، وبذلك تحصل الآن على F2 ل إعادة تسمية أعضاء وليس كنترول+ر+ر, ، و F7 ل عرض الرمز و لا كنترول+بديل+0.

أنا من رأي VS قد فهم الأمر بشكل صحيح بشكل افتراضي.أجد أنه من المفيد للغاية أن يتذكر VS ما استخدمته مؤخرًا، ويجعل التبديل أسهل، تمامًا مثلما يفعل نظام التشغيل نفسه (على بديل+فاتورة غير مدفوعة).متصفحي يفعل نفس الشيء أيضًا بشكل افتراضي (Opera)، على الرغم من أنني أعرف أن Firefox يتصرف بشكل مختلف.

في Visual Studio 2012 أو الإصدارات الأحدث (2013، 2015، 2017...):

  1. تصفح القائمة الأدوات / الخيارات / البيئة / لوحة المفاتيح.
  2. ابحث عن الأمر "Window.NextTab"، واضبط الاختصار عليه كنترول+فاتورة غير مدفوعة
  3. ابحث عن الأمر "Window.PreviousTab"، واضبط الاختصار على كنترول+يحول+فاتورة غير مدفوعة

enter image description here

انتقل إلى مشاركة المدونة علامة تبويب Visual Studio لإلغاء ماكرو الغباء والاستفادة من الماكرو.بعد تطبيق الماكرو على تثبيت Visual Studio، يمكنك ربط اختصارات لوحة المفاتيح المفضلة لديك بها.لاحظ أيضًا إصلاح التسجيل في التعليقات لعدم ظهور بالون الماكرو لأنه قد يصبح مزعجًا بعد فترة.

بعد بضع ساعات من البحث وجدت حلاً لكيفية التبديل بين المستندات المفتوحة باستخدام كنترول+فاتورة غير مدفوعة التي تتحرك من اليسار إلى اليمين و يحول+ كنترول+ فاتورة غير مدفوعة للذهاب من اليمين إلى اليسار.

باختصار تحتاج إلى نسخ ولصق هذا الماكرو:

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 غير بديهية للغاية نظرًا لأن ترتيب علامات التبويب المعروضة يختلف عن منطق تبديل علامات التبويب، مما يؤدي إلى ترتيب علامات التبويب عديمة الفائدة تماما.

لذا، حتى يظهر حل أفضل، قم بتغيير تخطيط النافذة (في البيئة->عام) من المستندات المبوبة إلى المستندات المتعددة؛لن يغير السلوك، ولكنه يقلل من الارتباك الذي تسببه علامات التبويب.

بهذه الطريقة ستجد أيضًا DocumentWindowNav أكثر فائدة!

السيطرة + بديل + صفحة أعلى أو PgDn عملت الاختصارات على تبديل علامة التبويب التالية/السابقة خارج الصندوق بالنسبة لي ...

أنا أتفق مع جيف بنسبة 100%.

لقد عملت على Borland C++ Builder لعدة سنوات وإحدى الميزات التي أفتقدها أكثر هي ترتيب جدولة المستندات "الصحيح" كنترول-فاتورة غير مدفوعة.وكما قال جيف "يستمر سلوك علامة التبويب الحالي في إخراجي من المهمة ويجعلني أضطر إلى الاهتمام بالأداة "هذا هو بالضبط ما أشعر به حيال هذا الأمر، وأنا مندهش للغاية من حقيقة أنه لا يوجد الكثير من الناس يشتكون من هذا.

أظن كنترول-F6 - NextDocumentWindowNav - يتنقل بين المستندات بناءً على وقت آخر تنشيط للمستند.يشبه هذا السلوك إلى حد كبير الطريقة التي كانت تتصرف بها تطبيقات MDI في الأيام الخوالي.

مع أخذ هذا في الاعتبار، عادة ما أستخدم كنترول+F6 للتبديل بين مستندين (وهو أمر مفيد جدًا في التبديل بين ملفات .cpp و.h عند العمل على مشروع c++) حتى في حالة وجود أكثر من مستندين مفتوحين حاليًا.على سبيل المثال، إذا كان لديك 10 مستندات مفتوحة (Tab1، Tab2، Tab3، ....، Tab10)، فإنني أقوم بالنقر فوق Tab1 ثم Tab2.عندما أفعل كنترول+F6 وتحرير المفاتيح، سأنتقل إلى علامة التبويب 1.الضغط كنترول+F6 مرة أخرى سوف يعيدني إلى علامة التبويب 2.

أعتقد أنك تريد ما يسميه VSS Next(Previous)DocumentWindow.بشكل افتراضي، يتم تشغيله السيطرة (-التحول)-F6 على جهاز VSS 8.على Ctrl(-Shift)-علامة التبويب يملكون Next(Previous)DocumentWindowNav.يمكنك تغيير تعيينات المفاتيح عبر الأدوات/الخيارات/لوحة المفاتيح.

في فرع التسجيل:HKEY_CURRENT_USER software Microsoft VisualStudio 9.0 أضف dword المسمى "UsemRudocording" بقيمة 1.سيتم ترتيب المستندات المستخدمة مؤخرًا بحيث يتم وضعها على اليسار.إنها ليست مثالية ولكنها أفضل من سوء السلوك الافتراضي.

لا أستخدم Visual Studio (نعم، حقاً، أنا لا أستخدمه)، لكن مفتاح التشغيل التلقائي يمكن إعادة تعيين أي مفتاح تشغيل سريع عالميًا أو في تطبيق معين:

#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 النصي الرئيسي الخاص بي.أعتقد أنها أداة ممتازة لهذا النوع من المهام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top