file emacs elisp dired

file - ¿Cómo creo un archivo vacío en emacs?



elisp dired (14)

Además de otras respuestas en la página, puede usar la función f-touch f.el :

M-: (f-touch "__init__.py") RET

¿Cómo puedo crear un archivo vacío de emacs, idealmente desde un búfer directo?

Por ejemplo, acabo de abrir un módulo de Python en modo directo, he creado un nuevo directorio, lo he abierto en dired y ahora necesito agregar un archivo __init__.py vacío en el directorio.

Si utilizo Cx Cf __init__.py RET Cx Cs , emacs no crea el archivo porque no se han realizado cambios en él. Tendría que escribir el archivo, guardarlo, borrar mi tipeo y luego guardarlo nuevamente para que funcione.

Gracias


Aquí hay una adaptación de dired-create-directory . Funciona de la misma manera, por lo que, además de un nombre de archivo simple, también puede especificar nuevos directorios principales (que se crearán en el directorio actual) para el archivo (por ejemplo, foo/bar/filename ).

(eval-after-load ''dired ''(progn (define-key dired-mode-map (kbd "C-c n") ''my-dired-create-file) (defun my-dired-create-file (file) "Create a file called FILE. If FILE already exists, signal an error." (interactive (list (read-file-name "Create file: " (dired-current-directory)))) (let* ((expanded (expand-file-name file)) (try expanded) (dir (directory-file-name (file-name-directory expanded))) new) (if (file-exists-p expanded) (error "Cannot create file %s: file exists" expanded)) ;; Find the topmost nonexistent parent dir (variable `new'') (while (and try (not (file-exists-p try)) (not (equal new try))) (setq new try try (directory-file-name (file-name-directory try)))) (when (not (file-exists-p dir)) (make-directory dir t)) (write-region "" nil expanded t) (when new (dired-add-file new) (dired-move-to-filename))))))


Desde el punto de vista programático y sin ninguna dependencia del touch , es bastante fácil:

(with-temp-buffer (write-file "path/to/empty/file/"))


El camino más corto

METRO-! > __init__.py RET


Emacs no le permitirá guardar un búfer a menos que piense que el contenido ha cambiado. El más rápido, aunque posiblemente no es el más limpio, es abrir el archivo con Cx Cf , luego presionar (decir) espacio y retroceder, luego debería poder guardar un archivo sin contenido.

Hay otras maneras de cambiar el indicador "buffer has been modified", pero no creo que sea más fácil.


He modificado la respuesta de MrBones y he creado una función personalizada con la vinculación de claves:

; create empty __init__.py at the place (defun create-empty-init-py() (interactive) (shell-command "touch __init__.py") ) (global-set-key (kbd "C-c p i") ''create-empty-init-py)

Esto es muy útil para no perder tiempo en la acción recurrente de crear init .py en todas partes en la nueva carpeta de proyectos de Python.


La mejor opción sería:

(with-temp-file "filename" (insert ""))


Los siguientes trabajos:

C-x b __init__.py RET C-x C-w RET

Si está en un búfer directo, el archivo se guardará en el directorio que se muestra aquí.

El truco es crear primero un búfer vacío al cambiar a un nombre que no existe. Luego escribe el archivo.


Puede marcar un buffer vacío como modificado ejecutando set-buffer-modified-p . Luego, cuando lo guarde, Emacs escribirá el archivo.

M-; ; Eval (set-buffer-modified-p t) ; Mark modified C-x C-s ; Save buffer


Puedes usar el comando táctil:

M-! touch __init__.py RET


Si desea que Emacs trate todos los archivos nuevos como modificados, puede automatizar la solución de esta manera:

(add-hook ''find-file-hooks ''assume-new-is-modified) (defun assume-new-is-modified () (when (not (file-exists-p (buffer-file-name))) (set-buffer-modified-p t)))


Use el comando táctil.

M-! touch __init__.py RET


Uso el siguiente atado a t en dired.

(defun my-dired-touch (filename) (interactive (list (read-string "Filename: " ".gitkeep"))) (with-temp-buffer (write-file filename))) ;; optionally bind it in dired (with-eval-after-load ''dired (define-key dired-mode-map "t" ''my-dired-touch))


(shell-command (concat "touch " (buffer-file-name))) hará lo que quieras, si ya has abierto el archivo vacío.