استخدام علامات تبويب Vim مثل المخازن المؤقتة

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

  •  01-07-2019
  •  | 
  •  

سؤال

لقد نظرت إلى القدرة على استخدام علامات التبويب في Vim (مع :tabe, :tabnew, ، وما إلى ذلك) كبديل لممارستي الحالية المتمثلة في فتح العديد من الملفات في نفس النافذة في مخازن مؤقتة مخفية.

أرغب في أن يكون كل ملف مميز قمت بفتحه دائمًا في علامة التبويب الخاصة به.ومع ذلك، هناك بعض الأشياء التي تعترض طريق هذا.كيف يمكنني إصلاح هذه:

  1. عندما أوامر مثل gf و ^] انتقل إلى موقع في ملف آخر، فسيتم فتح الملف في مخزن مؤقت جديد في علامة التبويب الحالية.هل هناك طريقة لجعل كل هذه الأنواع من الأوامر تفتح الملف في علامة تبويب جديدة، أو التبديل إلى علامة التبويب الموجودة مع الملف إذا كان مفتوحًا بالفعل؟

  2. عند تبديل المخازن المؤقتة يمكنني استخدامها:b <part of filename><tab>وسوف يكمل أسماء الملفات الموجودة في المخازن المؤقتة الموجودة. <part of filename> يمكن أن يكون حتى منتصف اسم الملف بدلاً من البداية.هل هناك ما يعادل تبديل علامات التبويب؟

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

المحلول

توقف، توقف، توقف.

هذه ليست الطريقة التي تم تصميم علامات تبويب Vim لاستخدامها.في الواقع، لقد تم تسميتهم بشكل خاطئ.الاسم الأفضل هو "منفذ العرض" أو "التخطيط"، لأن هذا هو ما تعنيه علامة التبويب - إنها تخطيط مختلف لنوافذ الجميع من المخازن المؤقتة الموجودة لديك.

إن محاولة التغلب على Vim في علامة تبويب واحدة == مخزن مؤقت واحد هو تمرين لا جدوى منه.لا يعرف Vim ذلك أو يهتم به ولن يحترمه في جميع الأوامر - على وجه الخصوص، أي شيء يستخدم المخزن المؤقت للإصلاح السريع (:make, :grep, ، و :helpgrep هي التي تتبادر إلى ذهنك) سوف تتجاهل علامات التبويب بسعادة وليس هناك ما يمكنك فعله لوقف ذلك.

بدلاً من:

  • :set hidden
    إذا لم تكن لديك هذه المجموعة بالفعل، فافعل ذلك.إنه يجعل vim يعمل مثل أي محرر آخر للملفات المتعددة على هذا الكوكب.يمكن أن يكون لديك مخازن مؤقتة معدلة غير مرئية في النافذة في مكان ما.
  • يستخدم :bn, :bp, :b #, :b name, ، و ctrl-6 للتبديل بين المخازن المؤقتة.انا يعجبني ctrl-6 نفسي (وحده يتحول إلى المخزن المؤقت المستخدم مسبقًا، أو #ctrl-6 يتحول إلى رقم المخزن المؤقت #).
  • يستخدم :ls لسرد المخازن المؤقتة، أو البرنامج المساعد مثل MiniBufExpl أو BufExplorer.

نصائح أخرى

لقد تأخرت قليلاً عن الحفلة هنا ولكنني فوجئت بأنني لم أر ما يلي في هذه القائمة:

:tab sball - يؤدي هذا إلى فتح علامة تبويب جديدة لكل مخزن مؤقت مفتوح.

:help switchbuf - هذا يتحكم في سلوك تبديل المخزن المؤقت، حاول :set switchbuf=usetab,newtab.يجب أن يعني هذا التبديل إلى علامة التبويب الموجودة إذا كان المخزن المؤقت مفتوحًا، أو إنشاء علامة تبويب جديدة إذا لم يكن كذلك.

همة :help window يشرح الارتباك "علامات التبويب مقابل المخازن المؤقتة" بشكل جيد.

المخزن المؤقت هو النص الموجود في الذاكرة للملف.
النافذة عبارة عن منفذ عرض على المخزن المؤقت.
صفحة علامة التبويب عبارة عن مجموعة من النوافذ.

يتم فتح ملفات متعددة في vim باستخدام مخازن.في المحررين الآخرين (على سبيل المثال.المفكرة ++) يتم ذلك باستخدام علامات التبويب، لذا قد تكون علامة تبويب الاسم في vim مضللة.

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

أخيرًا في هذا التشبيه صفحات علامة التبويب سوف تتوافق مع أجهزة كمبيوتر مكتبية متعددة، وهذا يعني إعادة ترتيب مختلفة للنوافذ.

كما همة help: tab-page يشرح أنه يمكن استخدام صفحة علامة التبويب، عندما يريد الشخص تحرير ملف مؤقتًا، لكنه لا يريد تغيير أي شيء في التخطيط الحالي للنوافذ والمخازن المؤقتة.في مثل هذه الحالة، يمكن استخدام صفحة علامة تبويب أخرى فقط لغرض تحرير هذا الملف المعين.

بالطبع عليك أن تتذكر أن عرض نفس الملف في العديد من صفحات علامات التبويب أو النوافذ سيؤدي إلى عرض نفس نسخة العمل (المخزن المؤقت).

على عكس بعض الإجابات الأخرى هنا، أقول أنه يمكنك استخدام علامات التبويب كيفما تشاء.تم تصميم vim ليكون متعدد الاستخدامات وقابلاً للتخصيص، بدلاً من إجبارك على العمل وفقًا لمعايير محددة مسبقًا.نعلم جميعًا كيف نحب نحن المبرمجين أن نفرض "أخلاقنا" على الجميع، لذا فإن هذا الإنجاز هو بالتأكيد سمة أساسية.

<C-w>gf هي علامة التبويب المكافئة للمخازن المؤقتة gf يأمر. <C-PageUp> و <C-PageDown> سيتم التبديل بين علامات التبويب.(في Byobu، هذين الأمرين لا يعملان معي أبدًا، لكنهما يعملان خارج Byobu/tmux.البدائل هي gt و gT.) <C-w>T سينقل النافذة الحالية إلى صفحة علامة تبويب جديدة.

إذا كنت تفضل أن يستخدم vim علامة تبويب موجودة إن أمكن، بدلاً من إنشاء علامة تبويب مكررة، أضف :set switchbuf=usetab إلى ملف .vimrc الخاص بك.يمكنك إضافة newtab إلى القائمة (:set switchbuf=usetab,newtab) لإجبار أوامر QuickFix التي تعرض أخطاء الترجمة على الفتح في علامات تبويب منفصلة.أنا أفضل split بدلاً من ذلك، الذي يفتح أخطاء الترجمة في نافذة مقسمة.

إذا كان لديك دعم الماوس ممكّنًا مع :set mouse=a, ، يمكنك التفاعل مع علامات التبويب من خلال النقر عليها.هناك أيضا + الزر افتراضيًا والذي سيؤدي إلى إنشاء علامة تبويب جديدة.

للحصول على وثائق علامات التبويب، اكتب :help tab-page في الوضع العادي.(بعد القيام بذلك، يمكنك التدرب على نقل النافذة إلى علامة التبويب باستخدام <C-w>T.) هناك قائمة طويلة من الأوامر.تتعلق بعض أوامر النوافذ بعلامات التبويب، لذا قد ترغب في الاطلاع على تلك الوثائق أيضًا عبر :help windows.

إضافة:2013-12-19

لفتح ملفات متعددة في vim مع وضع كل ملف في علامة تبويب منفصلة، ​​استخدم vim -p file1 file2 ....إذا كنت مثلي وتنسى دائما أن تضيف -p, ، يمكنك إضافته في النهاية، حيث يتبع vim قواعد تحليل خيار سطر الأوامر العادية.وبدلاً من ذلك، يمكنك إضافة تعيين للاسم المستعار لـ bash vim ل vim -p.

وقعت في نفس المشكلة.كنت أرغب في أن تعمل علامات التبويب مثل المخازن المؤقتة ولم أتمكن مطلقًا من الوصول إليها.الحل الذي استقرت عليه أخيرًا هو جعل المخازن المؤقتة تتصرف مثل علامات التبويب!

تحقق من البرنامج المساعد يسمى ميني عازلة اكسبلورر, ، بمجرد التثبيت والتكوين، ستتمكن من العمل مع المخازن المؤقتة بنفس طريقة عمل علامات التبويب دون فقدان أي وظيفة.

هذه إجابة لأولئك الذين ليسوا على دراية بـ Vim والذين يأتون من برامج تحرير نصوص أخرى (في حالتي Sublime Text).

قرأت كل هذه الإجابات وما زالت غير واضحة.إذا قرأتها، فإن ما يكفي من الأشياء يصبح منطقيًا، لكن الأمر استغرق مني ساعات من التنقل ذهابًا وإيابًا بين الأسئلة.

الأمر الأول كما أوضحه الآخرون:

صفحات التبويب, ، يبدو كثيرًا نوافذ التبويب, ، فهي تعمل مثل علامات التبويب وتشبه علامات التبويب إلى حد كبير في معظم برامج تحرير واجهة المستخدم الرسومية الأخرى، ولكنها ليست كذلك.أعتقد أنه نموذج عقلي سيء تم بناؤه في Vim، والذي لسوء الحظ يحجب القوة الإضافية التي لديك داخل صفحة علامة التبويب.

أول وصف فهمته كان من إجابة @crenate هو أنها تعادل أجهزة كمبيوتر سطح المكتب المتعددة.عندما ترى في هذا الصدد، لن يكون لديك سوى جهازين مكتبيين مفتوحين ولكن لديك الكثير من نوافذ واجهة المستخدم الرسومية مفتوحة داخل كل منهما.

أود أن أقول إنها مشابهة لما هو موجود في المحررين/المتصفحات الأخرى:

  1. مجموعات علامات التبويب
  2. مساحات عمل نص سامية (أيقائمة بالملفات المفتوحة الموجودة لديك في المشروع)

عندما تراها بهذه الطريقة فإنك تدرك قوتها حيث يمكنك بسهولة تجميع مجموعات من الملفات (المخازن المؤقتة) معًا على سبيل المثال.ملفات CSS وملفات HTML وملفات JS في صفحات علامات تبويب مختلفة.وهو في الواقع رائع جدًا.

الأوصاف الأخرى التي أجدها مربكة

إطار العرض

هذا لا معنى له بالنسبة لي.إطار العرض الذي على الرغم من أنه يحتوي على مصطلح القاموس المحدد, لقد سمعت فقط الإشارة إلى نوافذ Vim في :help window وثيقة.Viewport ليس مصطلحًا سمعته من قبل فيما يتعلق بمحررين مثل Sublime Text وVisual Studio وAtom وNotepad++.في الواقع، لم أسمع عن Vim مطلقًا حتى بدأت في محاولة استخدام صفحات علامات التبويب.

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

مساحات العمل

ربما يكون هذا أكثر منطقية، ال تعريف القاموس يكون:

مرفق تخزين الذاكرة للاستخدام المؤقت.

لذا فهو يشبه المكان الذي تقوم فيه بتخزين مجموعة من المخازن المؤقتة.

لم أبدو في البداية مثل مفهوم النص سامية لمساحة العمل وهي عبارة عن قائمة بجميع الملفات التي قمت بفتحها في مشروعك:

ملف مساحة العمل السامية، الذي يحتوي على بيانات خاصة بالمستخدم، مثل الملفات المفتوحة والتعديلات على كل منها.

لكن بالتفكير في الأمر أكثر، فإن هذا يتفق بالفعل.إذا كنت تعتبر صفحة علامة التبويب Vim مثل مشروع Sublime Text، فقد يبدو من الغريب أن يكون لديك ملف واحد فقط مفتوح في كل مشروع والاستمرار في التبديل بين المشاريع.ولهذا السبب فإن استخدام صفحة علامة التبويب لفتح ملف واحد فقط هو أمر غريب.

مجموعة من النوافذ

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

كما أشرت أعلاه، فإن نافذة vim هي نفس إطار العرض وتم شرحها بشكل ممتاز في هذا مقالة linux.com:

إحدى الميزات المفيدة حقًا في Vim هي القدرة على تقسيم المنطقة القابلة للعرض بين ملف واحد أو أكثر، أو مجرد تقسيم النافذة لعرض قطعتين من نفس الملف بسهولة أكبر.تشير وثائق Vim إلى هذا كمنفذ عرض أو نافذة، بالتبادل.

ربما تكون على دراية بهذه الميزة بالفعل إذا كنت قد استخدمت ميزة مساعدة Vim من قبل باستخدام :موضوع المساعدة أو الضغط على المفتاح F1.عند إدخال المساعدة، يقوم Vim بتقسيم إطار العرض وفتح وثائق المساعدة في إطار العرض العلوي، مما يترك المستند مفتوحًا في إطار العرض السفلي.

أجد أنه من الغريب أن تتم الإشارة إلى صفحة علامة التبويب على أنها مجموعة من النوافذ بدلاً من مجموعة من المخازن المؤقتة.ولكن أعتقد أنه يمكنك فتح صفحتين منفصلتين لعلامات التبويب مع نوافذ متعددة تشير جميعها إلى نفس المخزن المؤقت، على الأقل هذا ما أفهمه حتى الآن.

بالنظر إلى: علامات التعريفات ، لا يبدو أن Vim يريد العمل بالطريقة التي تفعل بها ...

تتم مشاركة المخازن المؤقتة عبر علامات التبويب، لذلك لا يبدو من الممكن قفل مخزن مؤقت محدد ليظهر فقط في علامة تبويب معينة.

إنها فكرة جيدة، رغم ذلك.

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

  • يمكنك تعيين الأوامر التي تتعامل عادةً مع المخازن المؤقتة للتعامل مع علامات التبويب، كما فعلت مع gf في ملف .vimrc الخاص بي:

    map gf :tabe <cfile><CR>
    

    أنا متأكد من أنه يمكنك فعل الشيء نفسه مع [^

  • لا أعتقد أن vim يدعم هذا لعلامات التبويب (حتى الآن).أستخدم gt وgT للانتقال إلى علامات التبويب التالية والسابقة، على التوالي.يمكنك أيضًا استخدام Ngt، حيث N هو رقم علامة التبويب.أحد الأمور التي تزعجني هو أنه بشكل افتراضي، لا يتم عرض رقم علامة التبويب في سطر علامة التبويب.لإصلاح هذا، أضع وظيفتين في نهاية ملف .vimrc الخاص بي (لم ألصقه هنا لأنه طويل ولم يتم تنسيقه بشكل صحيح).

أستخدم المخازن المؤقتة مثل علامات التبويب باستخدام ملف BufExplorer البرنامج المساعد وعدد قليل من وحدات الماكرو:

" CTRL+b opens the buffer list
map <C-b> <esc>:BufExplorer<cr>

" gz in command mode closes the current buffer
map gz :bdelete<cr>

" g[bB] in command mode switch to the next/prev. buffer
map gb :bnext<cr>
map gB :bprev<cr>

مع BufExplorer، لا يوجد لديك شريط علامات تبويب في الأعلى، ولكنه من ناحية أخرى يوفر مساحة على شاشتك، بالإضافة إلى أنه يمكنك فتح عدد لا نهائي من الملفات/المخازن المؤقتة وتكون قائمة المخزن المؤقت قابلة للبحث...

إذا كنت تريد أن تعمل المخازن المؤقتة مثل علامات التبويب، فاطلع على البرنامج المساعد لجدول الجدول.

يستخدم ذلك نافذة واحدة، ويضيف خطًا في الأعلى لمحاكاة علامات التبويب (يظهر فقط قائمة المخازن المؤقتة).لقد ظهر هذا منذ وقت طويل عندما كانت علامات التبويب مدعومة فقط في GVim ولكن ليس في vim سطر الأوامر.نظرًا لأنه يعمل فقط مع المخازن المؤقتة، فإن كل شيء يتكامل بشكل جيد مع بقية العناصر.

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