如何通过编辑当前名称来重命名文件?

时间:2012-09-28 06:41:05

标签: emacs elisp

例如:我有一个文件longest_substring_no_repeating_chars.cc。有一天,我想将其重命名为longest_substr_no_repeating_chars.cc。如何通过编辑旧名称来实现?或者有没有方便的方法呢?

2 个答案:

答案 0 :(得分:3)

假设您要重命名当前正在编辑的文件,您可以定义类似这样的函数:

(defun rename-file-and-buffer ()
  "Renames current buffer and file it is visiting."
  (interactive)
  (let ((name (buffer-name))
        (filename (buffer-file-name)))
    (if (not (and filename (file-exists-p filename)))
        (message "Buffer '%s' is not visiting a file!" name)
      (let ((new-name (read-file-name "New name: " filename)))
        (cond ((get-buffer new-name)
               (message "A buffer named '%s' already exists!" new-name))
              (t
               (rename-file name new-name 1)
               (rename-buffer new-name)
               (set-visited-file-name new-name)
               (set-buffer-modified-p nil)))))))

你可以把它绑定到像 C-c r 这样的关键组合

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

否则,@ Oleg建议使用dired是一个很好的选择。

答案 1 :(得分:2)

您可以在直接模式下执行此操作。 R快捷方式调用dired-do-rename 可以按向下取回旧名称。

如果你使用dired-x,只需添加到你的init文件就更容易了。

(require 'dired-x)

然后您可以按 C-x C-j R 进行编辑,然后根据需要进行编辑,然后 q 返回缓冲区。

另一种可能性:M-x wdired-change-to-wdired-mode。在这种模式下你可以 直接编辑文件。如果要提交更改,请按C-c C-cC-c ESC取消它们。