كيفية الحصول على قائمة بالملفات التي يتم نشرها حاليًا في VIM
-
21-09-2019 - |
سؤال
أنا أكتب مكونًا إضافيًا في VIM أحتاج إلى تحديد كل تلك الملفات التي يتم نشرها حاليًا. هذا هو الذي من أجله diff
تم تعيينه. لقد مررت بالدليل ولكني لم أجد الكثير.
هل من الممكن القيام بذلك.
هذا السؤال مرتبط بالفعل بالسؤال كيفية اكتشاف الموضع في الرياح. في هذا السؤال ، كنت أحاول الحصول على موقف النافذة ، وذلك لاكتشاف أي من الاختلافات هو الشخص الصحيح والتي تركت واحدة. ال المحلول حصلت على استخدام winnr ()
لا يمكن أن يعمل هذا الحل إلا إذا كان هناك نوافذان فقط (تلك التي يتم نشرها). أريد أن أجعلها عامة ، حتى لو كانت نوافذ متعددة مفتوحة في VIM ، يمكنني تحديد أي واحد على اليسار وأي واحد هو الصحيح. هذا ما كنت أفكر في حل المشكلة
- احصل على قائمة بجميع المخازن المؤقتة المدرجة
- لكل من هذه المخازن المؤقتة تحدد ما إذا
diff
هو1
من أجل هذا - إذا
diff
هو1
استعمالbufwinnr()
للحصول على رقم نافذة. - من أرقام النافذة ، تحدد أي واحد متبقي وأي واحد هو الصحيح. اليسار سيكون رقم نافذة أصغر
- ثم حدد ما إذا كان المخزن المؤقت الحالي (في أي
alt-left
يتم ضغط `alt-right`) على اليسار أو اليمين باستخدام Winnr من المخزن المؤقت الحالي.
الآن القطع المفقودة هي 1 و 2. يمكن استخدام 1 LS ولكن أحتاج إلى تحليل ناتجها. هل هناك طريقة مستقيمة للحصول على قائمة بجميع المخازن المؤقتة المدرجة. ثم هل هناك طريقة للتحقق مما إذا كان هذا المخزن المؤقت diff
هو 1 أم لا.
أي اقتراحات لحل أبسط موضع تقدير أيضًا.
المحلول
- دورة من خلال جميع أرقام المخزن المؤقت الممكنة من
0
إلىbufnr('$')
والتحقق ، ما إذا كان هذا المخزن المؤقت موجودًا باستخدامbufexists(nr)
. - احفظ رقم المخزن المؤقت الحالي باستخدام
let curbuf=bufnr('%')
. - لكل مخزن مؤقت موجود
execute "buffer ".bufnumber
وتحقق&diff
عامل. تذكر رقمين ، لكن لا تحققbufwinnr()
. - يفعل
execute "buffer ".curbuf
. - اتصل أخيرًا
bufwinnr(nr)
لعدد من الأرقام الموجودة في الخطوة 3.
تحديث: حل آخر
let g:wlist={"0": [], "1":[]}
windo call add(g:wlist[&diff], bufnr('%'))
let g:diffbuffers=g:wlist.1
" here you have list of buffers with &diff option set in g:diffbuffers