如何在emacs中创build一个空文件?

我怎样才能从em​​acs创build一个空文件,理想情况下从一个直接的缓冲区?

例如,我刚刚在dired模式下打开了一个Python模块,创build了一个新目录,在dired中打开了这个目录,现在需要在目录中添加一个空的__init__.py文件。

如果我使用Cx Cf __init__.py RET Cx Cs那么emacs不会创build该文件,因为没有对其进行更改。 我将不得不input文件,保存它,删除我的input,然后再次保存它的工作。

谢谢

这是dired-create-directory的改编。 它的工作原理和普通的文件名一样,你也可以为文件(如foo/bar/filename )指定新的父目录(在当前目录下创build)。

 (eval-after-load 'dired '(progn (define-key dired-mode-map (kbd "Cc 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)))))) 

您可以使用触摸命令:

 M-! touch __init__.py RET 

以下工作:

  Cx b __init__.py RET Cx Cw RET 

如果你在一个直接的缓冲区,这个文件将被保存在show here目录下。

诀窍是首先通过切换到一个不存在的名称来创build一个空的缓冲区。 然后写出文件。

如果您希望Emacs将所有新文件视为已修改,您可以像这样自动化解决scheme:

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

Emacs将不允许您保存缓冲区,除非它认为内容已更改。 最快但可能不清洁的是使用Cx Cf打开文件,然后按(说)空格和退格键,然后你应该可以保存没有内容的文件。

还有其他的方法来改变“缓冲区已被修改”的标志,但我不认为有更容易。

以编程方式,不依赖于touch ,这是很容易的:

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

使用触摸命令。

 M-! touch __init__.py RET 

最短的路

M-! > __init__.py RET

(shell-command (concat "touch " (buffer-file-name)))会做你想做的,如果你已经打开了空文件。

除了页面上的其他答案外,您还可以使用f.el的函数f-touch

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

你可以通过运行set-buffer-modified-p来标记一个空的缓冲区。 然后,当你保存它,Emacs将写入文件。

 M-; ; Eval (set-buffer-modified-p t) ; Mark modified Cx Cs ; Save buffer 

我已经修改了MrBones的答案,并使用键绑定创build了自定义函数:

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

这是非常有用的,不花时间在创build新的Python项目文件夹中的任何地方的init.py经常性的行动。

最好的select是:

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