Emacs:字体锁定解释

Posted

技术标签:

【中文标题】Emacs:字体锁定解释【英文标题】:Emacs: font-lock explanation 【发布时间】:2012-03-19 17:48:41 【问题描述】:

我使用 Emacs 已经很长时间了,并且我已经对其进行了很多定制。我什至写过简单的 ELisp 函数,现在我开始越来越多地使用宏。我不是一个知识渊博的 Emacs 用户,但我也不是一个完整的初学者。

我正在使用 nxhtml、mumamo、dired、ido、自定义键绑定以及我多年来添加的许多东西,但我不记得所有这些了; )

但有一点我真的不明白:什么是“字体锁定”模式,我为什么要关心?

例如,我读过 nxhtml 和 nxml,如果我没记错的话,不要使用字体锁定。也许我不太了解那部分,但无论如何:作为用户,它对我有什么改变?

或者以这个关于WhiteSpace的描述为例:

请注意,当 WhiteSpace 开启时,WhiteSpace 会保存 font-lock 状态,即 font-lock 是打开还是关闭。和空白 关闭时恢复字体锁定状态。所以,如果 WhiteSpace 已打开且 font-lock 已关闭,WhiteSpace 也会打开 font-lock 突出显示空白,但 font-lock 将被关闭 当 WhiteSpace 关闭时。因此,在打开 font-lock 之前 WhiteSpace 已打开,如果您希望 font-lock 在之后继续 WhiteSpace 已关闭。

好的,好的。我明白那个。但是,如果 font-lock 继续或不继续,它会改变什么?

基本上我只是不“明白”,不管我读了多少关于这个主题的文章。

欢迎任何关于 Emacs 下的“font-lock”是什么以及为什么它让我担心的示例/解释!

【问题讨论】:

字体锁定是与应用于字符的效果相关的所有内容,以使它们看起来与常规外观不同。您引用的whitespace-mode 描述告诉您whitespace-mode 不违反次要模式行为准则,该准则规定次要模式不应相互干扰。尽管whitespace-mode 需要激活字体锁定以使空间看起来不同,但它会记住您之前的字体锁定状态,以便在您停用它时将所有内容恢复原状。 【参考方案1】:

font-lock-mode == 丰富多彩的语法高亮。 global-font-lock-mode 为 Emacs 中的每种模式启用字体锁定。较旧的 Emacs 版本要求您手动启用它,较新的版本(我认为是 23+)默认启用此功能。我无法想象很多人会想要关闭此功能,因为它使某些类型的内容(如源代码)变得更加可读。每种使用字体锁定的模式都依赖于一组特定的faces——字体属性的组合,如大小、粗体、下划线、斜体和颜色。大多数模式使用的基本面是:

font-lock-builtin-face
font-lock-comment-face
font-lock-comment-delimiter-face
font-lock-constant-face
font-lock-doc-face
font-lock-doc-string-face
font-lock-function-name-face
font-lock-keyword-face
font-lock-negation-char-face
font-lock-preprocessor-face
font-lock-string-face
font-lock-type-face
font-lock-variable-name-face
font-lock-warning-face

如果您愿意,您可以轻松地覆盖它们的值(或使用不同的颜色主题)。有些模式恰好也定义了额外的面。

【讨论】:

【参考方案2】:

它以所有不同的颜色显示您的代码(红色表示 cmets,绿色表示类名等)。如果它关闭,您将获得黑白代码。打开一些代码并执行几次 M-x font-lock-mode 来观察它的开关。

【讨论】:

好的,但是为什么像 nxml 或 nxhtml 这样的模式说他们没有使用字体锁定,却以很多不同的颜色显示? 这就是你所看到的吗?当我在 nxml 模式下打开一个 xml 文件时,我可以看到切换 font-lock-mode 时颜色会打开和关闭。

以上是关于Emacs:字体锁定解释的主要内容,如果未能解决你的问题,请参考以下文章

Emacs 字体锁定模式:提供自定义颜色而不是面

使用 Ctrl 键和鼠标滚动调整 Emacs 字体大小

emacs中解释器中的命令历史记录

如何在emacs中打开IPython解释器?

如何使用 IPython 作为我的 Emacs Python 解释器?

有没有办法在Windows上的emacs下运行MIT方案解释器?