Yanıtlar:
Bu işlevi Steve Yegge'nin .emac'lerinden deneyin :
;; kaynak: http://steve.yegge.googlepages.com/my-dot-emacs-file (defun rename-dosya-ve-buffer (yeni ad) "Hem mevcut arabelleği hem de ziyaret ettiği dosyayı NEW-NAME olarak yeniden adlandırır." (etkileşimli "sYeni ad:") (let ((ad (arabellek adı)) (dosya adı (buffer-file-name))) (eğer (dosya adı değil) ("Tampon '% s' bir dosyayı ziyaret etmiyor!" adı) (eğer (get-buffer yeni adı) ("% s 'adlı bir arabellek zaten var!" yeni adı) (progn (yeniden adlandırma dosyası dosya adı yeni ad 1) (yeniden adlandır-arabellek yeni adı) (ziyaret edilen dosya adı yeni adı) (set-buffer-değiştirilmiş-p nil))))))
O sayfaya bir bakın, burada "move-buffer-file" adı verilen gerçekten yararlı bir işlevin daha var.
(set-buffer-modified-p nil)
gereksiz görünüyor. rename-file-and-buffer
Değiştirilmiş bir arabellek çağırdı ve sonra öldürmeye çalıştıysanız, kaydedilmemiş değişiklikler hakkında sizi uyarmadan bunu mutlu bir şekilde yapar.
Evet, dired
mod ile şunları yapabilirsiniz:
C-x d
dirsek açmakRET
geçerli dosyanın dizinini seçmek içinC-x C-j
( dired-jump
Geçerli dosyanın adı için Dired'de)R
dosyayı (veya dired-do-rename
) yeniden adlandırmak için .q
(yeniden adlandırılmış) dosya arabelleğine dönmek içinYeniden adlandırma bir kabuğa eşdeğerdir mv
, ancak açık arabellekleri de güncelleştirir ve aksine mv
dosya sistemindeki dosyadaki erişimi ve süreleri değiştirmez.
C-x C-j
Benim için varsayılan olarak bağlı değildir. Yapma M-x load-library RET dired-x RET
öncelikle bağlı hale getirir.
C-x C-j
Bağlanmamışsa başka bir alternatif sadece M-x dired-jump
ilk kez yapmaktır . Otomatik olarak yüklenir dired-x
( C-x C-j
bu noktadan itibaren tanımlanmasına da neden olur ).
Tamlık için, bazı insanlar bu sayfayı ziyaret ederek Emacs'ın "farklı kaydet" özelliği için bir cevap alacaklarını düşünüyorlar, bu açık bir dosya için Cx Cw.
File > Save as...
En sevdiğim Magnars'tan ( emacs rocks screencasts şöhreti).
Diğer alternatiflerin aksine, adı sıfırdan yazmak zorunda değilsiniz - değiştirilecek geçerli adı alırsınız.
(defun rename-current-buffer-file ()
"Renames current buffer and file it is visiting."
(interactive)
(let* ((name (buffer-name))
(filename (buffer-file-name))
(basename (file-name-nondirectory filename)))
(if (not (and filename (file-exists-p filename)))
(error "Buffer '%s' is not visiting a file!" name)
(let ((new-name (read-file-name "New name: " (file-name-directory filename) basename nil basename)))
(if (get-buffer new-name)
(error "A buffer named '%s' already exists!" new-name)
(rename-file filename new-name 1)
(rename-buffer new-name)
(set-visited-file-name new-name)
(set-buffer-modified-p nil)
(message "File '%s' successfully renamed to '%s'"
name (file-name-nondirectory new-name)))))))
Doğru sürüm için James Yang'a teşekkürler.
İşte stevey'den uyarlanmış daha sağlam bir sürüm.
;; Originally from stevey, adapted to support moving to a new directory.
(defun rename-file-and-buffer (new-name)
"Renames both current buffer and file it's visiting to NEW-NAME."
(interactive
(progn
(if (not (buffer-file-name))
(error "Buffer '%s' is not visiting a file!" (buffer-name)))
;; Disable ido auto merge since it too frequently jumps back to the original
;; file name if you pause while typing. Reenable with C-z C-z in the prompt.
(let ((ido-auto-merge-work-directories-length -1))
(list (read-file-name (format "Rename %s to: " (file-name-nondirectory
(buffer-file-name))))))))
(if (equal new-name "")
(error "Aborted rename"))
(setq new-name (if (file-directory-p new-name)
(expand-file-name (file-name-nondirectory
(buffer-file-name))
new-name)
(expand-file-name new-name)))
;; Only rename if the file was saved before. Update the
;; buffer name and visited file in all cases.
(if (file-exists-p (buffer-file-name))
(rename-file (buffer-file-name) new-name 1))
(let ((was-modified (buffer-modified-p)))
;; This also renames the buffer, and works with uniquify
(set-visited-file-name new-name)
(if was-modified
(save-buffer)
;; Clear buffer-modified flag caused by set-visited-file-name
(set-buffer-modified-p nil)))
(setq default-directory (file-name-directory new-name))
(message "Renamed to %s." new-name))
İşte oldukça sağlam ve VC farkında olan başka bir sürüm:
(defun rename-file-and-buffer ()
"Rename the current buffer and file it is visiting."
(interactive)
(let ((filename (buffer-file-name)))
(if (not (and filename (file-exists-p filename)))
(message "Buffer is not visiting a file!")
(let ((new-name (read-file-name "New name: " filename)))
(cond
((vc-backend filename) (vc-rename-file filename new-name))
(t
(rename-file filename new-name t)
(set-visited-file-name new-name t t)))))))
Burada daha fazla bilgi edinebilirsiniz .
Spacemacs kullanıyorsanız, bu davranışı rename-current-buffer-file
varsayılan olarak bağlı olan (magnara dayalı) bir uygulama ile birlikte geldiğinden ücretsiz olarak alırsınız SPC-f-R
.
Çok kolay bir yol var, Mx komutuna basın ve daha sonra vc-rename-file yazın , bundan sonra dizinde geçerli dosyanızı seçmeniz ve yeni adı seçmeniz yeterlidir. Değiştirilen dosyayı içeren buff yenilenir.
Kaynak: https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Delete_002fRename.html
magnars versiyonuna göre, aşağıdaki gibi değiştirdim, INIT dosya adı bölümünü düzeltti:
(defun rename-current-buffer-file ()
"Renames current buffer and file it is visiting."
(interactive)
(let* ((name (buffer-name))
(filename (buffer-file-name))
(basename (file-name-nondirectory filename)))
(if (not (and filename (file-exists-p filename)))
(error "Buffer '%s' is not visiting a file!" name)
(let ((new-name (read-file-name "New name: " (file-name-directory filename) basename nil basename)))
(if (get-buffer new-name)
(error "A buffer named '%s' already exists!" new-name)
(rename-file filename new-name 1)
(rename-buffer new-name)
(set-visited-file-name new-name)
(set-buffer-modified-p nil)
(message "File '%s' successfully renamed to '%s'"
name (file-name-nondirectory new-name)))))))
Kopya ile elde edilebilir. shift + c dosya ve emacs dosya adı da dahil olmak üzere yol için bir ad belirtmenizi isteyecektir, bu yüzden sadece yeni bir ad verin ve girin ... tabii ki, bir öncekini silmeniz gerekir.
(setq uniquify-buffer-name-style 'forward)
arabellek adındausers\index.html
(zaten başka bir arabelleğe sahip olduğunuz içinposts\index.html
)