Theo như tôi biết thì không có thiết lập hay một số thứ như vậy để làm điều này. Nhưng không phải tất cả đã mất, tất nhiên chúng ta có thể sử dụng chế độ
BufWritePre
tự động.
Điều này được thực hiện trước khi bộ đệm được ghi vào đĩa. Vì vậy, chúng ta có thể tạo thư mục ở đó nếu nó chưa tồn tại.
Ví dụ:
augroup Mkdir
autocmd!
autocmd BufWritePre *
\ if !isdirectory(expand("<afile>:p:h")) |
\ call mkdir(expand("<afile>:p:h"), "p") |
\ endif
augroup END
- Trước tiên chúng tôi kiểm tra xem thư mục có tồn tại
isdirectory
không, nếu không mkdir
sẽ báo lỗi.
<afile>
đề cập đến tập tin chúng tôi đang cố gắng lưu; :p
là một sửa đổi để mở rộng nó thành tên đường dẫn đầy đủ (chứ không phải tương đối) và :h
loại bỏ thành phần đường dẫn cuối cùng (tệp).
- Sau đó chúng tôi gọi
mkdir()
nếu được yêu cầu. Chúng ta cần p
cờ mkdir()
để tạo tất cả các thư mục cha mẹ (ví dụ: trong trường hợp nonexistent/more_nonexisting/file
.
Tất nhiên, bạn cũng có thể chạy mkdir()
lệnh từ dòng lệnh Vim hoặc liên kết nó với một keybind, tức là:
nnoremap <Leader>m :call mkdir(expand("%:p:h"), "p")<CR>
Ở đây tôi đã sử dụng %
thay vì <afile>
, vì nó chỉ hợp lệ từ bên trong một autocommand ( %
đề cập đến bộ đệm hiện đang hoạt động, :wa
chẳng hạn như không hoạt động ; <afile>
đề cập đến tên tệp của bộ đệm kích hoạt autocmd).
Bạn cũng có thể yêu cầu xác nhận trước khi viết một thư mục nếu bạn muốn. Xem câu hỏi này để biết thêm chi tiết: Làm cách nào tôi có thể ngăn Vim viết một tệp trong chế độ tự động BufWritePre?
Đoạn mã trên sẽ tạo thư mục trong lần ghi đầu tiên ( :w
). Bạn có thể, nếu bạn muốn, cũng tạo thư mục khi bạn mở nó lần đầu tiên (tức là ngay sau khi gõ vim ...
) bằng cách sử dụng BufNewFile
autocmd thay vì BufWritePre
.
Ngoài ra còn có một plugin gọi là auto_mkdir , có hiệu quả tương tự như trên.
Trên trang này
có một đoạn được mở rộng một chút, nó cũng hỏi bạn có muốn tạo thư mục trước không, một số có thể coi là hữu ích. Nó cũng đã chuyển đổi tên tệp của mã hóa trước khi viết nó:
call mkdir(iconv(expand("%:p:h"), &encoding, &termencoding), 'p')
Tôi không chắc chắn nếu điều này thực sự cần thiết, nhưng nếu bạn trộn mã hóa nhiều và nhận được tên tệp kỳ lạ, bạn có thể thử nó.
Tôi đặt tất cả những điều trên trong một auto_mkdir2.vim
plugin để cài đặt dễ dàng hơn.