निम्न आदेश का प्रयास करें:
function s:MKDir(...)
if !a:0
\|| stridx('`+', a:1[0])!=-1
\|| a:1=~#'\v\\@<![ *?[%#]'
\|| isdirectory(a:1)
\|| filereadable(a:1)
\|| isdirectory(fnamemodify(a:1, ':p:h'))
return
endif
return mkdir(fnamemodify(a:1, ':p:h'), 'p')
endfunction
command -bang -bar -nargs=? -complete=file E :call s:MKDir(<f-args>) | e<bang> <args>
यह आदेश के लिए एक स्थानापन्न के रूप में भेजा जाता है में निर्मित :e
।
स्थितियां जिसमें mkdir (क्रम में) नहीं चला जाता है:
- कमान तर्क
- कमान
`generate filename`
या `=generate_filename()`
बैकटिक फ़ाइल नाम जनरेटर के साथ या +command
/++opt
स्विच के साथ चलाया जाता है के बिना चला जाता है।
- कमांड में एक से अधिक तर्क होते हैं या अनचाहे विशेष वर्ण हैं।
- तर्क एक निर्देशिका है।
- तर्क एक मौजूदा फ़ाइल है।
- तर्क एक मौजूदा निर्देशिका में एक फ़ाइल है।
पिछले तीन मामलों में कुछ भी नहीं किया जाना चाहिए, दूसरा और तीसरा मामला संभालना असंभव नहीं है, बस अधिक जटिल है।
cnoreabbrev <expr> e ((getcmdtype() is# ':' && getcmdline() is# 'e')?'E':'e')
-complete=file
लूट बातें:
ऊपर एक cnoreabbrev
जोड़ने के लिए तैयार है यह न केवल पूरा होने जोड़ने के लिए, लेकिन यह भी तर्क (प्रसंस्करण इस प्रकार `
विस्तार के लिए जाँच और विशेष वर्ण उपस्थिति नहीं है समझ में आता है) और कई "फ़ाइल नाम" होने से मना कर देता है (इस प्रकार कोई ++ विकल्प नहीं)।
-bar
आपको `="String"`
का उपयोग करने में असमर्थ बनाता है क्योंकि "
अब एक टिप्पणी शुरू करता है। -bar
के बिना यह :e
इम्यूलेशन नहीं है क्योंकि आप E file | another command
नहीं कर सकते हैं।
एक और संस्करण:
function s:MKDir(...)
if !a:0
\|| isdirectory(a:1)
\|| filereadable(a:1)
\|| isdirectory(fnamemodify(a:1, ':p:h'))
return
endif
return mkdir(fnamemodify(a:1, ':p:h'), 'p')
endfunction
command -bang -bar -nargs=? -complete=file E :call s:MKDir(<f-args>) | e<bang> <args>
की बजाय' spec' टाइप करना होगा, इसके लिए एक उचित प्लगइन था। –