我想让我的emacs缓冲区具有与文件名不同的名称。而不是这样的手动每次设定,我想有基于文件内容这一自动发生的,是这样的:如何使用文件局部变量设置Emacs缓冲区名称?
//局部变量:
//缓冲区名称:MYNAME
//结束:
但是这不起作用,因为缓冲区名称是一个函数,而不是一个变量。我怎样才能做到这一点?
我想让我的emacs缓冲区具有与文件名不同的名称。而不是这样的手动每次设定,我想有基于文件内容这一自动发生的,是这样的:如何使用文件局部变量设置Emacs缓冲区名称?
//局部变量:
//缓冲区名称:MYNAME
//结束:
但是这不起作用,因为缓冲区名称是一个函数,而不是一个变量。我怎样才能做到这一点?
你可以说:
// Local Variables:
// eval: (rename-buffer "my-buffer-name-here")
// end:
这是一个把戏,但。
您可以编程find-file-hook
钩子.emacs
将缓冲区重命名为特定的局部变量内容。喜欢的东西:
(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))
)
我猜Emacs每次都会警告“eval”,但是好主意! – ShreevatsaR 2008-12-09 17:28:21
是的,它每次都会警告“eval”。如果它困扰你,你可以设置变量“enable-local-variable”。这是不安全的,但... – Pierre 2008-12-10 15:36:39