Bagaimana cara membuat file baru dari mode dired?

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.


person Kei Minagawa    schedule 30.11.2013    source sumber
comment
Saya tidak ingin mengetik C-x C-f. Saya ingin cara yang lebih sederhana.   -  person Kei Minagawa    schedule 30.11.2013
comment
Apa yang terjadi jika untitled.txt sudah ada? Percayalah pada saya bahwa masalah ini telah terpecahkan dan C-x C-f adalah cara paling sederhana   -  person abo-abo    schedule 30.11.2013
comment
untitled2.txt harus dibuat.   -  person Kei Minagawa    schedule 30.11.2013
comment
Inilah sebabnya mengapa perintah buat file baru tidak diterapkan. Tapi saya ingin menyelesaikan operasi terkait file saya dalam mode dired.   -  person Kei Minagawa    schedule 30.11.2013
comment
Saya menggunakan fungsi ini selama beberapa minggu. Dan saya perhatikan bahwa saya menghapus untitled.txt dan kemudian memasukkan nama file baru. Menghapus hanya membuang-buang waktu. Jadi akhirnya saya menggunakan C-x C-f seperti yang Anda katakan. Terima kasih abo-abo.   -  person Kei Minagawa    schedule 14.01.2014
comment
@ abo-abo tidak sekonyol itu. Mengapa saya harus menekan dua tombol awalan yang akan mengalihkan saya ke buffer yang tidak diinginkan, padahal yang saya inginkan hanyalah membuat file (bukan beralih ke buffer tersebut). Dalam mode yang didedikasikan untuk fungsi direktori satu tombol, tidak kurang. Seharusnya ada analog touch di dired, akui saja   -  person Dodgie    schedule 30.01.2017
comment
Saya merasa terkejut bahwa editor direktori (dired)/manajer file tidak memiliki sarana bawaan untuk membuat file kosong.   -  person Jacob Lee    schedule 11.05.2021


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.

person Robin Green    schedule 30.11.2013
comment
Ini tidak berhasil untuk saya. Bagi saya, ketika saya melakukan C-x, C-f, saya mendapatkan prompt find-file. Saya memasukkan nama file baru. Saya mendapatkan 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
comment
Shell M-x dan di shell ketik 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
comment
@incandescentman: Karena upaya emacs untuk tidak membuat file kosong, Emacs mengonfirmasi bahwa Anda benar-benar ingin membuat file kosong. Jadi itu sebabnya Anda memerlukan konfirmasi verbose. Untuk menghindari hal ini, Anda perlu mengubah buffer. Misalnya ketik a lalu hapus di buffer. Atau elisp di sini mungkin yang Anda inginkan. - person Kei Minagawa; 24.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")))
person Drew    schedule 30.11.2013
comment
Saya harus membungkusnya dalam (with-eval-after-load 'dired ...) - person Jay; 29.09.2016
comment
ya, sama di sini. jika tidak dibungkus, Anda mendapatkan kesalahan - Nilai simbol sebagai variabel tidak berlaku: dired-mode-map - person Kirill Yunussov; 31.03.2019

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))
       )
     )
  )
person Kei Minagawa    schedule 01.12.2013

  1. tekan C-x C-f
  2. masukkan nama file
  3. 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

person user3113626    schedule 06.12.2016

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.")) )) ))
person lawlist    schedule 30.11.2013
comment
Sekarang saya bisa mengerti maksud Anda. Saya dapat mempelajari banyak tips berguna emacs dari kode ini. Terima kasih. - person Kei Minagawa; 28.02.2014

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.

person phils    schedule 30.11.2013
comment
Ya!! Itu dia. Kode Anda sangat membantu. Saya menggunakan beberapa fungsi dalam kode Anda. Terima kasih banyak. - person Kei Minagawa; 01.12.2013
comment
Ini adalah satu-satunya solusi yang benar-benar berfungsi sesuai keinginan saya. - person incandescentman; 29.02.2016