قم بتشغيل أمر commandtflush عند كتابة ملف جديد
سؤال
أحاول جعل Vim يقوم بتشغيل أمر "commandtflush" كلما تم كتابة ملف جديد. بالنسبة لأولئك الذين لا يستخدمون البرنامج المساعد ، يتم استخدام أمر "commandtflush" لإعادة بناء فهرس الملفات في الدليل الحالي.
ما أريد القيام به هو تشغيل الأمر بعد كتابة الملف على القرص ، بحيث ستجد أوامر العمل الملف وإضافته إلى فهرسه.
لقد حاولت كتابة وظيفة بنفسي ، ولكن إما أنها لا تطلق النار أو تطلق النار في وقت مبكر جدًا (قبل كتابة الملف ، والنقطة الأساسية هي إضافة الملف إلى الفهرس):
au! BufWritePre * ks| call NewFilesUpdatesCommandT()
function! NewFilesUpdatesCommandT()
let filename=@%
if !filereadable(filename)
CommandTFlush
endif
endfunction
أظن أنه يمكن حلها عن طريق تعيين بعض var boolean (isTheFilenew) في bufwritepre ثم تنفيذ أمر commandtflush في bufwritepost إذا تم إنشاء الملف للتو ، لكن لا يمكنني معرفة بناء الجملة. يمكن أن يكون هناك حل آخر هو ضبط/إبطال رد اتصال BufWritePost من داخل رد اتصال Bufwritepre ، إذا كان ذلك ممكنًا ...
هل يمكن لأي شخص مساعدتي هنا؟ ؛)
المحلول
augroup NFUCT
autocmd!
autocmd BufWritePre * call NFUCTset()
augroup END
function NFUCTset()
if !filereadable(expand('%'))
augroup NFUCT
autocmd BufWritePost * call NFUCT()
augroup END
endif
endfunction
function NFUCT()
augroup NFUCT
autocmd!
autocmd BufWritePre * call NFUCTset()
augroup END
CommandTFlush
endfunction
هذا هو إدراك اقتراحك الثاني.
نصائح أخرى
هذا هو الحل. يؤدي إلى قيام commandtflush كلما تم كتابة ملف وأيضًا كلما تكتسب نافذة VIM التركيز. يكون هذا مفيدًا عند إنشاء ملفات خارج VIM - على سبيل المثال عن طريق التبديل بين الفروع في نظام التحكم في الإصدار. ستكون الملفات الجديدة متوفرة في الأوامر مباشرة بعد إعادة إدخال VIM.
augroup CommandTExtension
autocmd!
autocmd FocusGained * CommandTFlush
autocmd BufWritePost * CommandTFlush
augroup END