web-dev-qa-db-ja.com

emacsで空のファイルを作成するにはどうすればよいですか?

Emacsから、理想的にはdiredバッファー内から空のファイルを作成するにはどうすればよいですか?

たとえば、Pythonモジュールをdiredモードで開き、新しいディレクトリを作成し、diredで開いた後、ディレクトリに空の___init__.py_ファイルを追加する必要があります。

_C-x C-f __init__.py RET C-x C-s_を使用すると、変更が加えられていないため、emacsはファイルを作成しません。ファイルを入力し、保存し、入力を削除してから、再度保存する必要があります。

ありがとう

62
Singletoned

これはdired-create-directoryの適応です。同じように機能するため、プレーンなファイル名だけでなく、ファイルの新しい親ディレクトリ(現在のディレクトリの下に作成される)を指定することもできます(例: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))))))
11
phils

Touchコマンドを使用できます。

M-! touch __init__.py RET
55
Dani

次の作品:

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

保存されたバッファにいる場合、ファイルはここに表示されているディレクトリに保存されます。

トリックは、最初に存在しない名前に切り替えることで空のバッファーを作成することです。次に、ファイルを書き出します。

28
slu

Emacsがすべての新しいファイルを変更されたものとして扱うようにしたい場合は、次のようにソリューションを自動化できます。

(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
Kilian Foth

Emacsでは、内容が変更されたと思わない限り、バッファを保存できません。おそらく最もクリーンではないかもしれませんが、最も速いのは、次を使用してファイルを開くことです C-x C-f、次に(たとえば)スペースとバックスペースを押すと、内容のないファイルを保存できるはずです。

「バッファが変更されました」フラグを変更する方法は他にもありますが、もっと簡単な方法はないと思います。

12
Vatine

プログラムでtouchに依存せずに、非常に簡単です:

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

このスレッドの後、Emacsは2つの新しいコマンドを追加しました:

  1. 空のファイルを作成する
  2. dired-create-empty-file

これらのコマンドは、emacs 27.1リリースで使用可能になります。

6
Tino

タッチコマンドを使用します。

M-! touch __init__.py RET
6

最短の方法

M-! > __init__.py RET

4
thanhpk

(Shell-command (concat "touch " (buffer-file-name)))は、空のファイルを既に開いている場合、必要な処理を行います。

3
Squidly

ページ上の他の回答に加えて、 f.el の関数 f-touch

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

2

Diredのtに次のバインドを使用します。

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

set-buffer-modified-p を実行することにより、空のバッファーを変更済みとしてマークできます。それを保存すると、Emacsはファイルを書き込みます。

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

最適なオプションは次のとおりです。

(with-temp-file "filename"
  (insert ""))
0
Marcin Antczak

MrBonesからの回答を変更し、キーバインドを使用してカスタム関数を作成しました。

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

これは、新しいPythonプロジェクトフォルダーのどこでもinit。pyを作成するという繰り返しのアクションに時間を費やさないために非常に便利です。

0
alex_koval