Por lo que sé, no hay una configuración o algo así para hacer esto. Pero no todo está perdido, por supuesto, podemos usar el
BufWritePre
autocomando.
Esto se ejecuta antes de que el búfer se escriba en el disco. Entonces podemos crear el directorio allí si aún no existe.
Por ejemplo:
augroup Mkdir
autocmd!
autocmd BufWritePre *
\ if !isdirectory(expand("<afile>:p:h")) |
\ call mkdir(expand("<afile>:p:h"), "p") |
\ endif
augroup END
- Primero verificamos si el directorio existe
isdirectory
, de lo contrario mkdir
da un error.
<afile>
se refiere al archivo que estamos tratando de guardar; :p
es un modificador para expandirlo al nombre de ruta completo (en lugar de relativo), y :h
elimina el último componente de ruta (el archivo).
- Luego llamamos
mkdir()
si es necesario. Necesitamos la p
bandera para mkdir()
hacer todos los directorios de los padres (es decir, en el caso de nonexistent/more_nonexisting/file
.
Por supuesto, también puede ejecutar el mkdir()
comando desde la línea de comandos de Vim, o vincularlo a una combinación de teclas, es decir:
nnoremap <Leader>m :call mkdir(expand("%:p:h"), "p")<CR>
Aquí utilicé en %
lugar de <afile>
, ya que eso solo es válido desde un autocomando (se %
refiere al búfer actualmente activo, que no funcionaría, :wa
por ejemplo; se <afile>
refiere al nombre de archivo del búfer que activa el autocmd).
También puede solicitar una confirmación antes de escribir un directorio si lo desea. Consulte esta pregunta para obtener más detalles: ¿Cómo puedo evitar que Vim escriba un archivo en el comando automático BufWritePre?
El fragmento anterior creará el directorio en la primera escritura ( :w
). Si lo desea, también puede crear el directorio cuando lo abra por primera vez (es decir, justo después de escribir vim ...
) utilizando el BufNewFile
autocmd en lugar de BufWritePre
.
También hay un complemento llamado auto_mkdir que es efectivamente el mismo que el anterior.
En esta página
hay un fragmento ligeramente expandido que también le pregunta si desea crear el directorio primero, lo que algunos pueden considerar útil. También ha convertido el nombre de archivo de la codificación antes de escribirlo:
call mkdir(iconv(expand("%:p:h"), &encoding, &termencoding), 'p')
Sin embargo, no estoy seguro de si esto es realmente necesario, pero si mezclas muchas codificaciones y obtienes nombres de archivo extraños, puedes intentarlo.
Puse todo lo anterior en un auto_mkdir2.vim
complemento para facilitar la instalación.