我想重命名一个在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 :(得分:4)
您能否详细说明为什么需要这样做? 有什么条件? 因为自从我开始使用Emacs以来,这种情况从未出现过。
但是,当我想重命名时,有时我会这样做:
这可能看起来像很多命令,但它们很自然地流动。 作为奖励,您可以了解目录以及目录的概况 新重命名的文件看起来就在那里。
答案 1 :(得分:4)
最近有一个 post 关于此主题的 Emacs Redux 博客。
基本上它是在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)
答案 2 :(得分:2)
无需外部工具。参见
http://www.gnu.org/software/emacs/manual/html_node/emacs/Wdired.html
更改dired-buffer中的文件名后,缓冲区名称也会更改。