2013-07-24 77 views
4

我想重命名一個綁定Emacs中當前緩衝區的文件。重命名當前緩衝區和Emacs中的相關文件

我發現下面的elisp從這篇文章: How do I rename an open file in Emacs?

;; source: http://steve.yegge.googlepages.com/my-dot-emacs-file 
(defun rename-file-and-buffer (new-name) 
    "Renames both current buffer and file it's visiting to NEW-NAME." 
    (interactive "sNew name: ") 
    (let ((name (buffer-name)) 
     (filename (buffer-file-name))) 
    (if (not filename) 
     (message "Buffer '%s' is not visiting a file!" name) 
     (if (get-buffer new-name) 
      (message "A buffer named '%s' already exists!" new-name) 
     (progn 
      (rename-file name new-name 1) 
      (rename-buffer new-name) 
      (set-visited-file-name new-name) 
      (set-buffer-modified-p nil)))))) 

它工作正常,但如果可能的話我想設置當前文件名作爲默認值。 我會如何寫這個?

+0

看看http://stackoverflow.com/a/384612/41861 –

回答

3

有最近是 postEmacs的終極版博客在這個問題上。

基本上它是在Prelude 配置(由同一作者)執行,你可以安裝它來獲得這種行爲和噸其他有趣的東西。否則,你可以在你的配置文件中只輸入相關的代碼片段(摘自上面的博客文章):

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

(global-set-key (kbd "C-c r") 'rename-file-and-buffer) 
+0

它很好用!我也會檢查Prelude。謝謝! – ironsand

+0

編輯原始函數以檢查具有新名稱的文件是否存在。根據https://rejeep.github.io/emacs/elisp/2010/03/26/rename-file-and-buffer-in-emacs.html – CodyChan

3

能否詳細說一下爲什麼你需要這樣做? 有什麼條件? 因爲自從我開始使用Emacs以來,這從來沒有出現過。

但這裏是我做的,有時,當我要重命名的東西:

  1. 說我編輯spam-spom-spam.cc。我想修復這個名字。
  2. CX d
  3. 銫SPO
  4. CX CQ
  5. DEL一個
  6. CC CC

這可能看起來是一個許多命令,但他們流動自然地進行。 作爲獎勵,您將獲得目錄的概述以及新更名文件的外觀。

+2

看到從dired-x的'dired-jump' –

+0

謝謝,這很有用。我有一個'(dired默認目錄)', 的快捷方式,但是這個好一點。 –

+0

感謝您的回覆。當我開始編寫shell腳本時,我想更改文件名,但之後我想更改它的名稱。我仍然在編寫劇本。 – ironsand

相關問題