【发布时间】:2011-09-04 09:11:22
【问题描述】:
我希望我的 emacs 缓冲区具有与文件名不同的名称。我不想每次都手动设置,而是希望根据文件内容自动发生这种情况,例如:
// 局部变量:
// 缓冲区名称:MyName
// 结束:
但这不起作用,因为 buffer-name 是一个函数,而不是一个变量。我该怎么做?
【问题讨论】:
标签: emacs
我希望我的 emacs 缓冲区具有与文件名不同的名称。我不想每次都手动设置,而是希望根据文件内容自动发生这种情况,例如:
// 局部变量:
// 缓冲区名称:MyName
// 结束:
但这不起作用,因为 buffer-name 是一个函数,而不是一个变量。我该怎么做?
【问题讨论】:
标签: emacs
你可以说:
// Local Variables:
// eval: (rename-buffer "my-buffer-name-here")
// end:
虽然这是一个技巧。
否则,您可以在 .emacs 中编写一个 find-file-hook 挂钩,将缓冲区重命名为特定的局部变量内容。比如:
(defvar pdp-buffer-name nil)
(defun pdp-rename-buffer-if-necessary ()
"Rename the current buffer according to the value of variable"
(interactive)
(if (and pdp-buffer-name (stringp pdp-buffer-name))
(rename-buffer pdp-buffer-name)))
(add-hook 'find-file-hook 'pdp-rename-buffer-if-necessary)
然后在您的特定文件中
// Local Variables:
// pdp-buffer-name: "pierre"
// end:
有了更多的脑力,你可以有一个更好的解决方案。
请注意,可能已经存在满足您需要的扩展程序。查看Emacs wiki。
【讨论】:
谢谢皮埃尔。您的 pdp-buffer-name elisp 示例运行良好。
我做了一项改进,因为我注意到 emacs 将局部变量视为“不安全”,即总是提示询问是否应该应用该值。由于我希望它可以处理许多不同的值,而不会用“安全”值列表弄乱我的 .emacs,所以我添加了一条建议。使用前面示例的命名法,它看起来像这样:
;; allow all values for "pdp-buffer-name"
(defadvice safe-local-variable-p (after allow-pdp-buffer-name (sym val) activate)
(if (eq sym 'pdp-buffer-name)
(setq ad-return-value t))
)
【讨论】: