虽然在vim中我想在blog_spec.rb
内创建一个名为[working directory]/spec/models/
的新文件,但该目录尚不存在?
创建目录并开始编辑文件的最快方法是什么?任何oneliners?
答案 0 :(得分:31)
:!mkdir -p spec/models
:w spec/models/blog_spec.rb
答案 1 :(得分:18)
如果您经常遇到这种情况,可能需要为其添加命令。
command -nargs=1 E execute('silent! !mkdir -p "$(dirname "<args>")"') <Bar> e <args>
如果你在.vimrc文件中添加该行,你可以像这样使用它:
:E spec/models/blog_spec.rb
编辑这只适用于Linux / Mac,而不适用于Windows。
答案 2 :(得分:6)
尝试以下命令:
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
:
cnoreabbrev <expr> e ((getcmdtype() is# ':' && getcmdline() is# 'e')?'E':'e')
-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>
答案 3 :(得分:2)
我通常发现只有在尝试保存文件后,父目录才会存在。
This code会提示您使用:w
创建目录,或者只使用:w!
创建目录:
augroup vimrc-auto-mkdir
autocmd!
autocmd BufWritePre * call s:auto_mkdir(expand('<afile>:p:h'), v:cmdbang)
function! s:auto_mkdir(dir, force)
if !isdirectory(a:dir)
\ && (a:force
\ || input("'" . a:dir . "' does not exist. Create? [y/N]") =~? '^y\%[es]$')
call mkdir(iconv(a:dir, &encoding, &termencoding), 'p')
endif
endfunction
augroup END