107.08.17 vim 自動生成中間路徑

有時候想要新增一個資料夾並編輯裡面的檔案時
總想偷懶
例如:
原本沒有 002_data_copy 資料夾,但要編輯裡面的 main.c
$ vim 002_data_copy/main.c


這時候可以編輯檔案
但要存檔時就會發現錯誤:
E212: 無法以寫入模式開啟 (E212: Can't open file for writing)

主因是中間的路徑不存在
而 vim 也沒有像 mkdir 有 -p 的參數直接生成中間路徑

所以正規解法就是先產生資料夾
$ mkdir 002_data_copy
$ vim 002_data_copy/main.c

不過偷懶是原動力 OuO
就被我找到有人用 vimscript 解決了

首先打開 ~/.vimrc
找地方貼上
" Ref: https://stackoverflow.com/a/4294176/6734174 "
function s:MkNonExDir(file, buf)
    if empty(getbufvar(a:buf, '&buftype')) && a:file!~#'\v^\w+\:\/'
        let dir=fnamemodify(a:file, ':h')
        if !isdirectory(dir)
            call mkdir(expand('%:h'), 'p')
        endif
    endif
endfunction
augroup BWCCreateDir
    autocmd!
    autocmd BufWritePre * :call s:MkNonExDir(expand(''), +expand(''))
augroup END

儲存後離開就完成啦

重新用單行版本就可以儲存了
$ vim 002_data_copy/main.c

多層也可以 OuO
$ vim t/t/t/t/t/t.c


參考資料:
Vim: Creating parent directories on save

沒有留言:

張貼留言

^ Top