سؤال

أحاول جعل 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top