尝试以下命令:
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()`backticks文件名生成器或命令/ opt开关运行。
>命令包含多于一个参数或具有未转义的特殊字符。
参数是一个目录。
>参数是现有文件。
>参数是现有目录中的文件。
在最后三个案件中,不应该做任何事情,第二和第三个案件是不可能处理的,更复杂。
cnoreabbrev <expr> e ((getcmdtype() is# ':' && getcmdline() is# 'e')?'E':'e')
-complete = file spoils的东西:它不仅添加了完成,还包括参数处理(因此检查’扩展和特殊字符的存在没有意义),并禁止有多个“文件名”(因此没有选择)。
-bar使您无法使用`=“String”`因为“现在开始注释。没有-bar它不是一个:e仿真,因为你不能做E文件|另一个命令。
另一个版本:
function s:MKDir(...) if !a:0 \|| isdirectory(a:1) \|| filereadable(a:1) \|| isdirectory(fnamemodify(a:1,'p') endfunction command -bang -bar -nargs=? -complete=file E :call s:MKDir(<f-args>) | e<bang> <args>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。