VIM AUTOCMD بناءً على محتويات الملف
سؤال
أحاول إعداد VIM لاكتشاف عندما يحتوي ملف .tex على الأمر " uSpackage {sagemath} '، وقم بتشغيل أمر وفقًا لذلك. لقد حصلت على
:au BufReadPost,BufWritePost *.tex TTarget sagepdf
لكن هذا سيطلق النار على جميع ملفات .TEX ، وهذا ليس ما أريد.
المحلول
هناك مثال في filetype.vim حول كيفية destinguise html. يمكنك تعديلها بسهولة لتناسب منطقك. لاحظ getline (n) = ~ الخطوط
" HTML (.shtml and .stm for server side)
au BufNewFile,BufRead *.html,*.htm,*.shtml,*.stm call s:FThtml()
" Distinguish between HTML, XHTML and Django
fun! s:FThtml()
let n = 1
while n < 10 && n < line("$")
if getline(n) =~ '\<DTD\s\+XHTML\s'
setf xhtml
return
endif
if getline(n) =~ '{%\s*\(extends\|block\)\>'
setf html.django_template
" setf htmldjango
return
endif
let n = n + 1
endwhile
setf html
endfun
نصائح أخرى
أولاً ، يجب أن تفكر في استخدام ملف موديل.
إذا لم تتمكن من الحصول على ما تريده باستخدام Modeline ، فيمكنك استخدام وظيفتك الخاصة autocmd
, ، مثله:
function! MyFunction()
...
endfunction
autocmd BufReadPost,BufWritePost *.tex call MyFunction()
وربما يمكنك كتابة وظيفة تتحقق مما إذا كان نمط معين يتطابق ، ثم يدير كل ما تريد.
لا تنتمي إلى StackOverflow