【问题标题】:How do I set an Emacs buffer name with a file local variable?如何使用文件局部变量设置 Emacs 缓冲区名称?
【发布时间】:2011-09-04 09:11:22
【问题描述】:

我希望我的 emacs 缓冲区具有与文件名不同的名称。我不想每次都手动设置,而是希望根据文件内容自动发生这种情况,例如:

// 局部变量:
// 缓冲区名称:MyName
// 结束:

但这不起作用,因为 buffer-name 是一个函数,而不是一个变量。我该怎么做?

【问题讨论】:

    标签: emacs


    【解决方案1】:

    你可以说:

    // 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

    【讨论】:

    • 我猜 Emacs 每次都会警告“eval”,但好主意!
    • 是的,它每次都会警告“eval”。然后,您可以将变量“enable-local-variable”设置为 t 如果它打扰您。虽然不安全...
    【解决方案2】:

    谢谢皮埃尔。您的 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))  
      )  
    

    【讨论】:

    • 这绝对应该完成解决方案。不错!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多