【问题标题】:Can I stop Emacs from resetting default-directory every time I open a file?我可以在每次打开文件时阻止 Emacs 重置默认目录吗?
【发布时间】:2015-04-30 10:01:46
【问题描述】:

我已经在Emacs 上问过同样的问题。如果不允许,对不起,我将删除问题。

如果我:

  • 在我的主目录中启动 Emacs (~)
  • ~/Projects/ruby-play 目录中找到一个文件C-x C-f
  • 尝试使用C-x C-f 查找另一个文件

文件查找器中的默认目录为~/Projects/ruby-play

我希望看到的默认目录仍然是~

我应该使用 package/hook/Elisp 函数来实现这一点吗?

非常感谢!

【问题讨论】:

  • 你知道当你输入一个文件路径时,你可以在任何时候简单地输入/~/来忽略该点之前的所有内容,并从~/开始查找吗? (与// 类似,可以访问文件系统根目录。)
  • 我是,谢谢。但是,我想保留我启动 Emacs 的目录,而不仅仅是主目录。

标签: emacs directory editing


【解决方案1】:

一种方法是将initial-default-directory 设置为nil,但您将根本没有默认目录,甚至没有您的主目录:

(setq insert-default-directory nil)

如果您希望您的主目录显示为默认目录,这并不容易。当以交互方式调用find-file 时,这会导致调用read-file-name,它具有相当复杂的默认行为。

default-directory 上使用setq-default 没有帮助,因为它的值是在访问您当前看到的缓冲区的文件时设置的。

我看到的唯一选择是使用您自己的find-file 版本,如下所示:

(defun my-find-file-read-args (prompt mustmatch)
  (list (read-file-name prompt "~/" nil mustmatch)
    t))

(defun my-find-file (filename &optional wildcards)
  "Edit file FILENAME.
Like `find-file` but always uses ~ as the default directory"
  (interactive
   (my-find-file-read-args "Find file: "
                        (confirm-nonexistent-file-or-buffer)))
  (let ((value (find-file-noselect filename nil nil wildcards)))
    (if (listp value)
    (mapcar 'switch-to-buffer (nreverse value))
      (switch-to-buffer value))))

(global-set-key (kbd "C-x C-f") 'my-find-file)

【讨论】:

  • 哇。谢谢你。 ido-find-file-in-dir 也不会帮助我吗?
  • 我不会用ido,所以不知道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 2021-12-20
  • 2011-01-28
  • 2022-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多