आप हुक में न आया हुआ अपवाद फेंक सकते हैं और यह लिखने को रद्द कर देगा:
function s:RunPHP()
execute '!php -l' shellescape(@%, 1)
if v:shell_error | throw 'PHP failed' | endif
endfunction
function s:DefineBWPphpevent()
augroup Run_php
autocmd! BufWritePre <buffer> :call s:RunPHP()
augroup END
endfunction
augroup Run_php
autocmd!
autocmd FileType * :autocmd! Run_php BufWritePre <buffer>
autocmd FileType php :call s:DefineBWPphpevent()
augroup END
कोशिश यह भी ध्यान रखें
- shellescape: तुम यहाँ के रूप में
:!shell_command %
उपयोग नहीं करना चाहिए vim उचित एस्केपिंग नहीं करता है और यदि फ़ाइल नाम में स्पेस, उद्धरण, डॉलर, न्यूलाइन, जैसे विशेष नाम हैं, तो
<buffer>
*
के स्थान पर दूसरे पैटर्न में फ़ाइल नाम शामिल हैं। आपका मूल आदेश php फ़ाइलों के लिए autocommand को परिभाषित नहीं करता है, इसके बजाय फ़ाइल फ़ाइल में से एक php है, तो यह सभी फ़ाइल प्रकारों के लिए autocommand को परिभाषित करता है।
- ऑटोकॉम समूह और
:autocmd!
एस टक्कर लगी है: वे डुप्लिकेटिंग ऑटोोकॉन्डैंड को रोकते हैं।
वैसे, क्या आप फ़ाइल के पुराने संस्करण पर php चलाकर हासिल करना चाहते हैं (यह BufWrite पूर्व घटना, है पहले फ़ाइल लिखा है तो यह होता है)? हो सकता है कि आपको कोड को प्रतिस्थापित करना चाहिए जो :w !php -l
, :w !php -l -
या :w !php -l /dev/stdin
के साथ PHP को चलाता है, जो कि php स्वीकार करता है (मेरे पास यह मेरे सिस्टम पर नहीं है और वह नहीं चाहते हैं) के आधार पर चलाता है।
आप शायद कुछ शैल schript चला सकते हैं जो 'php -l% || chmod u-w% ' – Benoit
देखें http://stackoverflow.com/questions/5542969/prevent-file-saving-during-bufwritepre –