“~/” 可以重新绑定到其他地方吗?

“~/” 可以重新绑定到其他地方吗?

我在 Windows XP 上使用 Emacs,每当我输入“~/”时,它都会自动用目录替换,在我的情况下是“C:/Documents and Settings//Application Data”。有什么方法可以让它指向另一个目录,比如桌面上的项目目录?每次我需要在那里创建一个新文件时,我都必须 Cx Cf + 完整路径,虽然制表符补全比通常更快,但最好将该目录绑定到“~/”之类的目录以方便访问。有什么办法可以做到这一点吗?

答案1

您需要做的就是设置%HOME%环境变量。

您可以通过以下方式完成此操作:
开始->设置->控制面板->系统
点击高级选项卡。底部有一个按钮:“环境变量“。

创建一个名为的新变量HOME并将您想要的路径放入其中。

由于大多数 Windows 程序不关心这个变量,所以它不太可能对您造成任何其他影响。



这也可以通过编辑 emacs 的注册表项来完成。以下是有关注册表变量的一些信息:Windows 注册表

答案2

似乎~由 处理expand-file-name,并且没有提到任何改变其扩展方式的方法。但它确实使用了HOME环境变量。您可以为 指定一个新值HOME,但这可能会混淆用作HOME存储文件位置的其他内容(customize等,它们可能想要读取或写入 下的文件HOME)。

作为一项实验,我写了一些建议,find-file暂时改变 的值HOME。这样做的目的是尽量减少替代值处于活动状态的时间。

(defvar fake-HOME-value "/var/tmp"
  "An alternate value to use for the HOME environment variable
while the 'fake-HOME' around advice is active.")

(defadvice find-file (around fake-HOME)
  "Temporarily replace the HOME environment variable with
the value from 'fake-HOME-value'."
  (let ((original-HOME-value (getenv "HOME")))
    (unwind-protect
        (progn
          (setenv "HOME" fake-HOME-value)
          ad-do-it)
      (setenv "HOME" original-HOME-value))))

(defun disable-fake-HOME ()
  "Disable the fake-HOME advice for find-file."
  (interactive)
  (progn
    (ad-disable-advice 'find-file 'around 'fake-HOME)
    (ad-update 'find-file)))

(defun enable-fake-HOME ()
  "Enable the fake-HOME advice for find-file."
  (interactive)
  (progn
    (ad-enable-advice 'find-file 'around 'fake-HOME)
    (if (ad-is-active 'find-file)
        (ad-update 'find-file)
      (ad-activate 'find-file))))

(enable-fake-HOME)
;(disable-fake-HOME)

将其放入您的.emacs(或.el文件,和(load-file "/path/to/your.el"))。我无法在 Windows 上测试它,但唯一特定于平台的是 的使用HOME,但我认为 Emacs 将 Windows 等效项 (几个环境变量的组合?) 转换为HOME

答案3

~是“用户主目录”的一个非常古老且完善的同义词,并且该逻辑可能深藏在 emacs 内部,除非您愿意在找到适当的代码并对其进行更改后从源代码重建它,否则不太可能改变。另一方面,您可能可以将启动 emacs 的快捷方式设置为在您选择的目录中启动,这样您就可以保存和加载文件而无需指定路径。可能吧。

相关内容