سؤال

أنا أفعل بعض التصحيح الذي ينطوي على فحص logfiles اسم "بلاه N. سجل" حيث N هو عدد صحيح.دوري, ملف سجل جديد يحصل وأضاف ، أود أن انتقل إلى ملف السجل التالي بدلا من صراحة لا :e blah\ N.log.لا أستطيع أن أفعل % vim *.log ثم :n, b/c ليس كل ملفات السجل موجودة حتى الآن.

أنا عندي تعبير ينتج المقبل السجل اسم:

:echo substitute(expand('%'), ' \zs\d\+', \=submatch(0) + 1', '')

ولكن أنا لا يمكن معرفة كيفية تمرير نتيجة هذا التعبير إلى :e الأوامر.أي نصائح ؟

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

المحلول

هنا a طريقة للقيام بذلك - على الرغم من أنني آمل أن يكون هناك طريقة أكثر أناقة.

:execute ':e ' . substitute(substitute(expand('%'), ' \zs\d\+', \=submatch(0) + 1', ''), ' ', '\\ ', '')

لا بد لي من إضافة ثانية substitute() الأمر إلى الهروب من الفضاء في اسم الملف.

نصائح أخرى

وأو يمكنك التفاف عليه في وظيفة. وأود أن تفعل ما يلي:

function! GetNextLogfile()
    "" store expression in a
    "" let a=...
    return a
endfunction

ثم

و: تنفيذ "تحرير" GetNextLogfile ()

وربما تريد تعيين أو الاختصار.

ولكن بطريقة أخرى: :e <CTRL-R>= إحضار موجه التعبير. أدخل التعبير المناسب (بما في ذلك استخدام ما يصل إلى التاريخ التعبير)، ثم ضرب <Enter> لاستبدال القيمة في موجه الأصلي.

وهذا يجعل من ضربات المفاتيح:

:e <CTRL-R>=<Up><Enter><Enter>

وهي ليست قليلة ما :<Up><Enter> فقط لإعادة القيادة :exec بلدي، ولكن خدعة مفيدة، مع ذلك.

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