Emacs: 字体锁定解释

8

我使用Emacs已经很长时间了,并且我进行了相当多的自定义。我甚至编写了简单的ELisp函数,现在开始越来越多地使用宏。我不是一个精通Emacs的用户,但我也不是完全的新手。

我使用nxhtml、mumamo、dired、ido、自定义键绑定等等,这么多年来添加了很多东西,我都记不清了;)

但有一件事我真的从未理解过:什么是“font-lock”模式,为什么我要关心它?

例如,我读到nxhtml和nxml(如果我没记错的话)不使用字体锁定。也许我没有理解那部分,但无论如何,作为用户,这对我有什么影响呢?

再以WhiteSpace为例:

请注意,当打开WhiteSpace时,WhiteSpace会保存字体锁定状态,即字体锁定是否开启。并且当关闭WhiteSpace时,WhiteSpace会恢复字体锁定状态。因此,如果打开WhiteSpace并且关闭字体锁定,则WhiteSpace也会打开字体锁定以突出显示空白,但当关闭WhiteSpace时,字体锁定将被关闭。因此,如果希望在关闭WhiteSpace后继续使用字体锁定,请在打开WhiteSpace之前打开字体锁定。

好的,很好。我理解了。但是,如果字体锁定继续存在或不存在会有什么改变呢?

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

任何关于Emacs下“font-lock”是什么以及为什么关心它的示例/解释都将不胜感激!


1
字体锁定是指应用于字符的效果,使它们看起来不同于其常规外观的所有内容。您引用的“whitespace-mode”描述告诉您,“whitespace-mode”不违反次要模式的行为准则,该准则规定次要模式不应相互干扰。即使“whitespace-mode”需要激活字体锁定以使空格看起来不同,但它会记住您之前的字体锁定状态,在您停用它时将一切恢复原状。 - François Févotte
2个回答

10

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

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

如果你想的话,你可以轻松地覆盖它们的值(或者使用不同的配色方案)。一些模式还定义了额外的样式。


4

它会以不同颜色显示代码(例如红色表示注释,绿色表示类名等)。如果关闭该功能,则代码将只呈现黑白色。打开一些代码并执行M-x字体锁定模式几次,观察它的开启和关闭。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接