雖然在vim中我想創建一個名爲blog_spec.rb
的新文件在[working directory]/spec/models/
之內,但該目錄還不存在嗎?在一個步驟中在vim的新目錄中創建文件?
什麼是創建目錄並開始編輯文件的最快方法?任何線索?
雖然在vim中我想創建一個名爲blog_spec.rb
的新文件在[working directory]/spec/models/
之內,但該目錄還不存在嗎?在一個步驟中在vim的新目錄中創建文件?
什麼是創建目錄並開始編輯文件的最快方法?任何線索?
試試下面的命令:
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
贓物事情:它添加不僅完成,而且參數處理(因此檢查`
膨脹和特殊字符的存在不是有道理的),並禁止有多個「文件名」(因此沒有++選擇)。
-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>
如果您經常遇到這種情況,可能需要爲其添加命令。
command -nargs=1 E execute('silent! !mkdir -p "$(dirname "<args>")"') <Bar> e <args>
如果添加了行.vimrc文件,你可以簡單地使用它像這樣:
:E spec/models/blog_spec.rb
編輯這將僅在Linux/Mac上,而不是Windows工作。
這一點,在我看來,比接受的答案更好。這對我來說真的很好。非常感謝! – nickcoxdotme
有一件事是,這個答案沒有路徑選項卡完成。在上面的例子中,如果'spec'模型存在但'models'沒有,你必須輸入'spec'而不是'sp
我通常發現的父目錄已經不只是後存在試圖保存文件。
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
這正是我所期待的!通常情況下,我不想在編輯文件之前考慮路徑是否存在。當我準備保存文件時,我只擔心它。 – verboze
希望有一個適當的插件。 –