Comment créer un fichier vide dans emacs?

Comment puis-je créer un fichier vide à partir d'emacs, idéalement dans un dired tampon?

Par exemple, je viens d'ouvrir un module Python en mode dired, a créé un nouveau répertoire, ouvert que dans dired, et maintenant besoin d'ajouter un vide __init__.py fichier dans le répertoire.

si j'utilise C-x C-f __init__.py RET C-x C-s alors emacs ne crée pas le fichier car aucun changement n'y a été apporté. J'aurais le type du fichier, enregistrer, supprimer mon tapant puis de l'enregistrer de nouveau pour que cela fonctionne.

Merci

60
demandé sur Singletoned 2010-04-07 15:49:56

15 réponses

voici une adaptation de dired-create-directory . Il fonctionne de la même manière, de sorte qu'en plus d'un nom de fichier simple, vous pouvez également spécifier de nouveaux répertoires parent (à créer sous le répertoire courant) pour le fichier (par exemple 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))))))
10
répondu phils 2013-09-19 02:49:44

vous pouvez utiliser la commande touch:

M-! touch __init__.py RET
53
répondu Dani 2013-09-18 16:55:39

les œuvres suivantes:

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

si vous êtes dans un buffer dirigé, le fichier sera sauvegardé dans le répertoire afficher ici.

le truc est d'abord de créer un tampon vide en passant à un nom qui n'existe pas. Ensuite, écrivez le fichier.

27
répondu slu 2010-04-08 18:57:50

si vous voulez Qu'Emacs traite tous les nouveaux fichiers modifiés, vous pouvez automatiser la solution comme ceci:

(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)))
20
répondu Kilian Foth 2015-05-13 00:17:41

Emacs ne vous permettra pas de sauvegarder un tampon à moins qu'il ne pense que le contenu a changé. Le plus rapide, mais peut-être pas le plus propre est d'ouvrir le fichier en utilisant C-x c-f , puis appuyez sur (say) space et backspace, alors vous devriez être en mesure d'enregistrer un fichier sans contenu.

il y a d'autres façons de changer le drapeau" buffer has been modified", mais je ne pense pas que ce soit plus facile.

12
répondu Vatine 2010-04-07 12:03:50

par programmation et sans aucune dépendance sur touch , c'est assez facile:

(with-temp-buffer (write-file "path/to/empty/file/"))
10
répondu Joao Tavora 2015-05-06 20:19:13

utilisez la commande touch.

M-! touch __init__.py RET
5
répondu Uchenna Nwanyanwu 2012-08-16 15:36:51

le chemin le plus court

M -! > __init__.py RET

4
répondu thanhpk 2016-12-02 02:45:42

(shell-command (concat "touch " (buffer-file-name))) fera ce que vous voulez, si vous avez déjà ouvert le fichier vide.

3
répondu Squidly 2012-08-16 15:33:29

en plus des autres réponses sur la page, vous pouvez utiliser f.el 'S fonction f-touch :

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

2
répondu Mirzhan Irkegulov 2014-03-18 10:34:25

après ce thread, Emacs a ajouté deux nouvelles commandes:

  1. font-vide-fichier
  2. dired-créer-vide-fichier

ces commandes seront disponibles dans la version 27.1 d'emacs.

2
répondu Tino 2018-08-02 04:43:14

vous pouvez marquer un tampon vide tel que modifié en lançant set-buffer-modified-p . Ensuite, quand vous le sauvegarderez, Emacs écrira le fichier.

M-;                         ; Eval
(set-buffer-modified-p t)   ; Mark modified
C-x C-s                     ; Save buffer
1
répondu Ian Mackinnon 2013-12-05 12:18:31

j'utilise le lien suivant à t dans 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))
1
répondu jenesaisquoi 2018-03-08 17:25:16

j'ai modifié la réponse de MrBones et j'ai créé une fonction sur mesure avec la reliure:

; 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)

C'est très utile pour ne pas passer du temps sur l'action récurrente de créer init .py everywhere in new Python project folder.

0
répondu alex_koval 2013-08-06 07:52:33

la meilleure option serait:

(with-temp-file "filename"
  (insert ""))
0
répondu Marcin Antczak 2016-03-25 13:07:12