一个允许您更改当前打开的文件和缓冲区名称的函数,如何使当前名称成为默认名称

时间:2014-04-13 16:22:46

标签: emacs elisp

这是由Steve Yegge写的(至少我在他的博客上找到了它)。它允许您在emacs中更改当前打开文件的名称。是否可以在新名称对话框中将文件的当前名称设为默认名称?我经常在文件名中输入一个小错误,而不是仅仅编辑它而不是重写整个名称。

;; Never understood why Emacs doesn't have this function.
(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)
       (rename-file name new-name 1) 
       (rename-buffer new-name)
       (set-visited-file-name new-name)
       (set-buffer-modified-p nil))))))

2 个答案:

答案 0 :(得分:2)

您需要使用read-from-minibuffer

(interactive (list (read-from-minibuffer "New name: " (buffer-name))))

我还建议error代替message报告错误。

PS。如果您想要基于现有文件完成,您可能更喜欢

(interactive (list (read-file-name "New name: " nil nil nil (buffer-name))))

PPS。核心中不存在此函数的原因是大多数人更喜欢从专用缓冲区操作文件,特别是dired用于"目录编辑"和vc-dir用于版本控制,您可以在其中重命名文件,并相应地处理相应的缓冲区。

答案 1 :(得分:1)

这种强大的重命名已由dired处理。

为了便于直接跳转到当前缓冲区的文件,请将其添加到init:

(autoload 'dired-jump "dired-x" nil t)
(define-key ctl-x-map [(control j)] 'dired-jump)

现在 C-x C-j R 重命名当前缓冲区。你也在路上 发现可以做的所有其他有用的事情。

编辑:从那里 M-n 填写旧名称。