En emacs, creo un archivo al visitarlo con Cx Cf. Digamos que me gustaría crear /home/myself/new_directory/file.txt
.
Si new_directory aún no existe, ¿hay alguna forma de que se cree durante la creación file.txt
sin ningún paso adicional? (Estoy pensando en algo como usar la -p
bandera mkdir
en Linux).
Siento que hay una combinación de teclas diferente en lugar de Cx Cf que puede hacer esto, pero no puedo recordar qué es.
:!mkdir -p ~/new_dir/to/some/crazy/path
M-!
por ejemplo.Respuestas:
También puede aconsejar a la función
find-file
que cree de forma transparente los directorios necesarios.Simplemente ponga esto en su
.emacs
lugar y úselo C-x C-fcomo siempre.fuente
defadvice
antes).Cuando proporciono un nombre de ruta con un componente inexistente
find-file
(es decir, Cx Cf ), me da un mensaje adicional que diceDado que el archivo no se crea hasta que guarde el búfer por primera vez, puede ejecutarlo
make-directory
inmediatamente después de que aparezca su nuevo búfer o puede hacerlo en cualquier otro momento antes de que necesite guardar el archivo. Luego, desde el búfer que necesita un directorio, escriba Mx make-directory RET RET (solicitará que se cree el directorio (el valor predeterminado se deriva del nombre de ruta del búfer); el segundo RET es aceptar el valor predeterminado).fuente
El modo Ido proporciona
ido-find-file
que es un reemplazofind-file
y le ofrece muchas más funciones. Por ejemplo, le permite crear un nuevo directorio mientras abre el archivo.Escriba C-x C-fcomo de costumbre (que se reasigna a
ido-find-file
),proporcionar el camino inexistente,
presione M-mque le pedirá que cree el nuevo directorio,
y luego especifique el nombre del archivo para visitar en el directorio recién creado.
fuente
M-m
en algún momento, yC-x C-f
en absoluto si eso no crea todo automáticamente? Si se le solicita que cree el directorio,M-! mkdir
o dired también hará un trabajo justo ...ido-find-file
crear automáticamente el directorio? O mejor aún, pregúntame si quiero crearlo. Traté de usar el consejo en la respuesta de Török Gábor, pero no pude averiguar a qué función aplicarlo (ya que ido no llamafind-file
directamente.)Mi solución viene con una ventaja: si elimina el búfer sin guardarlo, Emacs le ofrecerá eliminar esos directorios vacíos que se crearon (pero solo si no existían antes de que lo invoque
find-file
):Versión canónica aquí .
fuente
Además de la sugerencia de @Chris de Mx make-directory, puede escribir una función corta de elisp que hará find-file y luego make-directory ... Puede intentar esto:
No es bonito, y muestra "it MX make-directory ...." antes de decir "Creando directorio ...", pero si nada más, debería comenzar.
fuente
find-file
función original en lugar de definir una nueva para que otras funciones que llamenfind-file
directamente puedan incluso beneficiarse del comportamiento modificado.Si sus directorios ya existen, solo generará una advertencia.
Del
C-h f make-directory RET
manual ( ):fuente