【问题标题】:Set variable under specific mode emacs在特定模式下设置变量emacs
【发布时间】:2019-01-05 07:27:55
【问题描述】:

希望在乳胶模式下设置一个变量。这个想法是乳胶模式下设置的值将覆盖自定义部分中设置的相同变量的值。我对 emacs 很陌生,所以这些是我的尝试:

    (add-hook 'LaTeX-mode-hook '(setq line-move-visual t))
    (add-hook 'latex-mode-hook (lambda () (setq line-move-visual t)))

为什么这些不起作用?我应该怎么做?

澄清:希望将变量 (setq line-move-visual t) 设置为所有其他文件的 (setq line-move-visual nil)

【问题讨论】:

  • 第二行应该可以。你是如何将 line-move-visual 设置为 nil 的?这两个设置可能会产生干扰。
  • 抱歉,刚刚意识到您已经在问题中提到了这一点。想不出第二行不起作用的原因,然后...
  • 如果您使用的是 AUCTeX 库而不是内置的 tex-mode.el,那么尝试一下怎么样?:(add-hook 'LaTeX-mode-hook (lambda () (setq line-move-visual t))) 每个使用 AUCTeX 的人都会(一开始)对钩子感到困惑,因为它们与内置库如此相似:gnu.org/software/auctex/manual/auctex/Modes-and-Hooks.html
  • @lawlist 感谢大家的帮助,是的,你是对的,我正在使用 auctex 并且不知道要使用不同的钩子。我可以在今天晚些时候进行测试。

标签: emacs latex


【解决方案1】:

如果您只是 setq LaTeX-mode-hook 中的变量,它也会对任何其他打开的缓冲区产生影响。可以使更改仅影响当前缓冲区:

(add-hook 'LaTeX-mode-hook
      (lambda ()
        (make-local-variable 'line-move-visual)
        (setq line-move-visual nil)))

另外,请注意,Emacs 中 LaTeX 的默认模式的钩子称为 latex-mode-hook,但是当您使用(更高级的)AUCTeX 时的钩子称为 LaTeX-mode-hook

编辑:将make-variable-buffer-local 更改为make-local-variable。请参阅此答案的 cmets。

【讨论】:

  • 我认为你想要make-local-variable 而不是make-variable-buffer-local,即affects the behavior of the variable in all buffers
  • 嗯,我想,你是对的,@VasiliyFaronov。这种方式为我工作了几十年,但可能更多是因为使用稀少而不是因为正确性。编辑了答案。
  • 从 Emacs 24.3 开始,您可以使用setq-local 代替make-local-variablesetq 的顺序
猜你喜欢
  • 2011-07-26
  • 2011-12-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多