虽然在vim中我想创建一个名为blog_spec.rbinside 的新文件[working directory]/spec/models/,但该目录尚不存在?
创建目录并开始编辑文件的最快方法是什么?任何oneliners?
Kel*_*lly 31
:!mkdir -p spec/models
:w spec/models/blog_spec.rb
Run Code Online (Sandbox Code Playgroud)
小智 18
如果您经常遇到此问题,可能需要为其添加命令.
command -nargs=1 E execute('silent! !mkdir -p "$(dirname "<args>")"') <Bar> e <args>
Run Code Online (Sandbox Code Playgroud)
如果在.vimrc文件中添加该行,则可以像这样使用它:
:E spec/models/blog_spec.rb
Run Code Online (Sandbox Code Playgroud)
编辑这只适用于Linux/Mac,而不适用于Windows.
请尝试以下命令:
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>
Run Code Online (Sandbox Code Playgroud)
此命令旨在替代内置:e.
未运行mkdir的条件(按顺序):
`generate filename` 或`=generate_filename()`反引用文件名生成器或使用+command/ ++opt开关运行命令.在最后三种情况下,不应该做任何事情,第二种和第三种情况不是不可能处理的,只是更复杂.
以上是准备添加cnoreabbrev:
cnoreabbrev <expr> e ((getcmdtype() is# ':' && getcmdline() is# 'e')?'E':'e')
Run Code Online (Sandbox Code Playgroud)
-complete=file破坏事物:它不仅添加完成,而且还添加参数处理(因此检查`扩展和特殊字符存在没有意义)并且禁止具有多个"文件名"(因此没有++ opt).
-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>
Run Code Online (Sandbox Code Playgroud)