重命名Emacs中的当前缓冲区和相关文件

重命名Emacs中的当前缓冲区和相关文件,emacs,Emacs,我想重命名在Emacs中绑定到当前缓冲区的文件 我在本文中发现以下elisp: 它工作正常,但如果可能,我想将当前文件名设置为默认值。 我该怎么写呢?您能详细说明一下为什么需要这样做吗? 条件是什么? 因为自从我开始使用Emacs以来,这个问题就从未出现过 但当我想重命名某个东西时,我有时会这样做: 假设我正在编辑spam-spom-spam.cc。我想确定名字 C-xd C-s spo C-x C-q 德拉 C-C-C 这看起来像是很多命令,但它们的流程非常自然。 作为奖励,您可以大致了解您

我想重命名在Emacs中绑定到当前缓冲区的文件

我在本文中发现以下elisp:

它工作正常,但如果可能,我想将当前文件名设置为默认值。
我该怎么写呢?

您能详细说明一下为什么需要这样做吗? 条件是什么? 因为自从我开始使用Emacs以来,这个问题就从未出现过

但当我想重命名某个东西时,我有时会这样做:

  • 假设我正在编辑spam-spom-spam.cc。我想确定名字
  • C-xd
  • C-s spo
  • C-x C-q
  • 德拉
  • C-C-C
  • 这看起来像是很多命令,但它们的流程非常自然。 作为奖励,您可以大致了解您的目录以及 新重命名的文件将显示在那里。

    最近有一个 上 Emacs Redux关于这个主题的博客

    基本上,它是在 配置(由同一作者),您可以安装它来获得这种行为和大量其他有趣的东西。否则,您只能将相关的代码片段(摘自上面的博客文章)放入配置文件中:

    (取消重命名文件和缓冲区()
    “重命名当前缓冲区及其访问的文件。”
    (互动)
    (let((文件名(缓冲区文件名)))
    (如果(不是(和文件名(file-exists-p filename)))
    (消息“缓冲区未访问文件!”)
    (let((新名称(读取文件名“新名称:”文件名)))
    (续)
    ((vc后端文件名)(vc重命名文件名新名称))
    (t
    (重命名文件名新名称t)
    (设置访问的文件名新名称t(()()()())))
    (全局设置键(kbd“C-C r”)'重命名文件和缓冲区)
    
    此操作不需要外部工具。看


    更改dired缓冲区中的文件名后,缓冲区名称也会更改。

    看看这是否回答了您的问题?请参阅“dired-x”中的
    dired-jump
    ,谢谢,这很有用。我有一个
    (dired default directory)
    的快捷方式,但是这个要好一点。谢谢你的回复。我想在开始编写shell脚本时更改文件名,但之后我想更改它的名称。我仍在编写脚本。编辑原始函数以检查是否存在具有新名称的文件。根据
    ;; 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))))))