修改所有buffer的buffer local variable

目前我是这么自定义mode-line的:我有一个自定义的mode-line-format,用setqsetq-default修改当前buffer和未来buffer的mode-line-format

问题是如果我修改之前打开了一个buffer,那个buffer的mode-line-format不会变。

有没有什么方法能修改所有buffer的buffer local variable?

1 个赞

你确实有这个需求,还是就想问这个问题?如果有可能,尽量用实际的例子,很多概念、术语,大家都不太清楚。

那些专门设置了 mode-line-format 的 Buffer 就是不想用默认值,如果想用默认值,就不要设置本地值。

你当然可以在那些 Buffer 中用 setq 一个一个修改,用 M-x kill-local-variable 也能取消本地值。

(save-excursion
  (mapc (lambda (buffer)
          (with-current-buffer buffer
            ;; (setq mode-line-format ...)
            ))
        (buffer-list)))
2 个赞

确实有这个需求,我在emacs启动后修改mode-line,修改之前打开的buffer – 比如scratch,message – 的mode-line都不会变,还是原来的样子。

我就希望能把这些buffer的mode-line也改了。

另外,不是那些buffer用了自定义的mode-line-format,而是 mode-line-format自动变为buffer local:

Automatically becomes buffer-local when set. This variable may be risky if used as a file-local variable.


看了大家的回复,看来要到每个buffer里面改,没有全局的修改方法。

我没能明白你的问题:用 emacs -Q 启动,然后在 *scratch* 中执行

(setq-default mode-line-format "hello")

然后 *Messages* 的 mode line 也会变成 “hello”(需要把光标移到 *Messages* 让 Emacs 更新下 mode line)

然而 *scratch**Messages* 默认并没有设置单独的 mode-line-format

我试了试,的确,vanilla emacs没有这个问题。那可能是我配置的锅,我的配置里不会变……