Saya ingin membuat file baru dalam mode dired. Apakah ada perintah "buat file baru" dalam mode dired? Misalnya, saat saya mengetik "c" dalam mode dired, itu menghasilkan "untitled.txt". Ini sangat sederhana, tetapi saya tidak dapat menemukannya.
Bagaimana cara membuat file baru dari mode dired?
Jawaban (6)
Cukup tekan C-x C-f. Ini akan meminta nama file, menggunakan direktori saat ini dari buffer saat ini sebagai direktori untuk memasukkannya. Untuk buffer yang dired, direktori saat ini hanyalah direktori yang Anda lihat.
File does not exist, create buffer?
Saya memilih y
. Saya mendapatkan BUFFER baru dengan nama file yang saya masukkan. Namun, jika saya membiarkan buffer kosong, maka ketika saya melakukan C-x C-w, saya diminta LAGI untuk memasukkan nama file dan saya kembali ke tempat saya memulai. Dengan kata lain, metode ini memaksa saya memasukkan nama file dua kali. Dengan asumsi saya hanya ingin membuat file tetapi tidak memasukkan teks apa pun, apakah ada jalan keluarnya?
- person incandescentman; 20.08.2015
touch filename
. Ini hanya berfungsi pada sistem non-Windows dan hanya jika Anda belum membuka shell di dalam Emacs.
- person Robin Green; 20.08.2015
Jika Anda ingin c
dalam mode Dired melakukan apa yang C-x C-f
lakukan, jawabannya adalah sepele:
(define-key dired-mode-map "c" 'find-file)
Atau jika Anda ingin diberi nama untitled.txt
maka:
(define-key dired-mode-map "c"
(lambda () (interactive) (find-file "untitled.txt")))
(with-eval-after-load 'dired ...)
- person Jay; 29.09.2016
Terima kasih semuanya, Saya akhirnya menyelesaikannya sendiri. Ini jawaban saya. Mengetik "c" dalam mode dired akan meminta Anda membuat file baru tanpa judul. Kemudian tekan enter akan membuat file baru tanpa judul. Ya, itu kode yang sangat bertele-tele. Seseorang mungkin memperbaikinya.
(eval-after-load 'dired
'(progn
(define-key dired-mode-map (kbd "c") 'my-dired-create-file)
(defun create-new-file (file-list)
(defun exsitp-untitled-x (file-list cnt)
(while (and (car file-list) (not (string= (car file-list) (concat "untitled" (number-to-string cnt) ".txt"))))
(setq file-list (cdr file-list)))
(car file-list))
(defun exsitp-untitled (file-list)
(while (and (car file-list) (not (string= (car file-list) "untitled.txt")))
(setq file-list (cdr file-list)))
(car file-list))
(if (not (exsitp-untitled file-list))
"untitled.txt"
(let ((cnt 2))
(while (exsitp-untitled-x file-list cnt)
(setq cnt (1+ cnt)))
(concat "untitled" (number-to-string cnt) ".txt")
)
)
)
(defun my-dired-create-file (file)
(interactive
(list (read-file-name "Create file: " (concat (dired-current-directory) (create-new-file (directory-files (dired-current-directory))))))
)
(write-region "" nil (expand-file-name file) t)
(dired-add-file file)
(revert-buffer)
(dired-goto-file (expand-file-name file))
)
)
)
- tekan C-x C-f
- masukkan nama file
- tekan Cj
setelah langkah di atas, emacs akan membuat buffer kosong dengan nama yang Anda masukkan. Namun emacs tidak mendukung pembuatan file kosong secara default. Anda dapat merujuk ke Bagaimana cara membuat file kosong di emacs untuk ide lainnya
Berikut ini berisi dua (2) opsi, salah satunya mengharuskan touch
berada di $PATH
-- alternatifnya, jalur absolut dapat digunakan. touch
biasanya tersedia pada sistem varian unix, misalnya OSX, dll. Fungsi ini secara otomatis akan memberi nomor pada file/buffer secara berurutan -- misalnya, untitled.txt; tanpa judul1.txt; tanpa judul2.txt, dll.
(define-key dired-mode-map (kbd "c") 'dired-new-file)
(defun dired-new-file ()
(interactive)
(let* (
(n 0)
lawlist-filename
(dired-buffer-name (buffer-name)))
(catch 'done
(while t
(setq lawlist-filename (concat "untitled"
(if (= n 0) "" (int-to-string n))
".txt"))
(setq n (1+ n))
(if (not (file-exists-p lawlist-filename))
(throw 'done nil)) ))
(message "[b]uffer + file (maybe) | [f]ile + buffer (maybe)")
(let ((file-or-buffer (read-char-exclusive)))
(cond
((eq file-or-buffer ?b)
(switch-to-buffer (get-buffer-create lawlist-filename))
(text-mode)
(or (y-or-n-p (format "Save Buffer `%s'? "lawlist-filename))
(error "Done."))
(write-file lawlist-filename)
(with-current-buffer dired-buffer-name
(revert-buffer)))
((eq file-or-buffer ?f)
(start-process "touch-file" nil "touch" lawlist-filename)
(revert-buffer)
(or (y-or-n-p (format "Open `%s'? "lawlist-filename))
(error "Done."))
(find-file lawlist-filename)
(text-mode))
(t (message "You have exited the function.")) )) ))
Jika Anda ingin memasukkan nama file, menurut saya ini adalah duplikat dari:
Bagaimana cara membuat file kosong di emacs?
Jika Anda tidak ingin memasukkan nama file, Anda masih dapat menggunakan beberapa jawaban tersebut, dan dengan mudah mengadaptasi jawaban lainnya dengan mengkodekan nama tersebut secara keras daripada memintanya secara interaktif.
untitled.txt
sudah ada? Percayalah pada saya bahwa masalah ini telah terpecahkan danC-x C-f
adalah cara paling sederhana - person abo-abo   schedule 30.11.2013touch
di dired, akui saja - person Dodgie   schedule 30.01.2017