همة:استخدام تعبير مثل اسم الملف
سؤال
أنا أفعل بعض التصحيح الذي ينطوي على فحص 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
بلدي، ولكن خدعة مفيدة، مع ذلك.