news 2026/10/22 18:18:58

《elisp 每日一练》——文件关联与 Autoload 延迟加载机制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
《elisp 每日一练》——文件关联与 Autoload 延迟加载机制

前面的一系列文章中, 我们差不多介绍完了 major mode 相关的一些概念。但是我们还有两个问题没有解决。之前的测试用例需要手动触发mode开启函数,我们需要的是它能根据一定的规则自动开启major mode。而且我们开发的major mode,我只希望在打开对应文件时加载,而不是无脑加载我们在 .emacs.d 中的所有配置。

背景知识

文件关联

Emacs支持通过正则表达式对文件名进行匹配,根据匹配规则加载自动设置对应buffer的major mode。二者的匹配关系由全局的auto-mode-alist变量存储。

列表中的每一项都是一个cons cell,它的写法为(REGEX . mode-function), 其中mode-function 是启动major mode的函数。例如我想要添加一条规则:所有的.c文件都使用我们之前开发的简易的my-simplec-mode,可以写下如下代码:

(add-to-list'auto-mode-alist'("\\.c\\'".my-simplec-mode)))

autoload 延迟加载

一般情况下,外部要引用子模块的内容,可以使用require关键字,假设我们将之前编写的my-simplec-mode放到一个名为my-simplec-c.el文件中,如果外部要加载可以写下:

(require'my-simplec-c)

Emacs 在读到这句时会将整个文件都加载进来,并且对文件中所有代码执行。虽然它能保证文件中的代码执行一次,但是有时候文件中某些耗时的操作我并不会在开启时就执行,甚至有时候直到关闭Emacs都不会被执行。此时这种全盘执行的方案就有点浪费时间了。

Emacs 允许我们对一些函数或者代码添加autoload 注释,以便延迟加载。注释的写法如下:

;;;###autoload

当我们需要执行一个 elisp 文件时,例如使用load-file、package-install时,它会扫描该文件,对于使用该注释修饰的函数,它不会执行而是生成一条记录,写入对应的-autoloads.el文件中,例如对于上面的my-simplec-c.el,它会生成一个my-simplec-c-autoloads.el的文件。文件中记录需要延迟加载的函数信息。

在真正需要执行的时候再根据 autoloads 文件中记录的信息查找到具体代码位置,正式加载并执行函数。

其实它的加载时机并不只有主动load的时候。而且我们前面说的启动Emacs时执行也不太准确。至于具体的时机我们将在后面详细讨论,在这一阶段读者只用记住autoload 是只在必须调用的时候加载,能加速启动即可。

总结

本篇我们简单讨论了一下关于auto-mode-alist和autoload的内容。前者可以将文件后缀和对应的mode绑定,后者可以做到延迟加载。要达到效果很简单,但是背后的原理我们在这里展开又太大了,后面我打算在打包与模块化等专题的时候详细讨论。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/22 12:02:02

关闭主板过载保护?别傻了,试试这招

在 Windows 命令行中,无法直接关闭主板的过载保护功能。主板的过载保护通常由硬件层面(如 BIOS/UEFI)控制,而非操作系统层面。不过,可以通过一些系统设置或命令行操作来尝试缓解因过载保护导致的黑屏问题。 1. 通过命令…

作者头像 李华
网站建设 2026/10/22 12:00:10

不用编写代码,借助低代码如何快速构建企业业务系统

很多人一听到"开发系统",第一反应是"需要会写代码"。但低代码平台的出现,把这一前提彻底改变了——不懂代码也能做出企业管理系统。这篇文章用最直白的方式,讲清低代码与传统开发的本质区别,以及"不懂代…

作者头像 李华
网站建设 2026/10/23 0:15:30

MATLAB控制系统阶跃响应分析:动态指标与稳态误差全解析

1. 项目概述1.1 核心需求解析做自动控制系统设计的人,几乎每天都要和“系统表现怎么样”这个问题打交道。超调量、上升时间、峰值时间、调整时间这五个指标,是评判系统动态响应最常用的标尺;而稳态误差则是系统静态精度的直接体现。以前在学校…

作者头像 李华
网站建设 2026/10/19 14:03:11

机器学习答辩PPT怎么做?绘图模板与图表联动实战指南

简介:机器学习绘图模板.pptx 是一份面向论文写作者、研究生和机器学习初学者的可编辑绘图模板,用于快速搭建模型架构图、数据流图和流程示意,尤其适合在论文插图、组会汇报中直接复用。资源包仅含 1 个 PPTX 文件,大小约 10.46MB&…

作者头像 李华
网站建设 2026/10/21 16:35:29

C# EmguCV相机标定与畸变校正实战:从棋盘格到内参求解

几个月前我们接到一个视觉定位需求,现场的工业相机装在一个小支架上,拍摄的画面里,靠近边缘的物体已经出现了明显的弧形扭曲。同事把投影位置和实际位置一对比,偏差接近两毫米,这个数字在视觉测量里是不可接受的。因为…

作者头像 李华
网站建设 2026/10/19 6:10:04

从LeNet到卷积神经网络:核心原理、参数计算与实战指南

1. 从LeNet开始理解卷积神经网络1.1 为什么LeNet是绕不开的起点很多接触机器智能的人,学到卷积神经网络(CNN)这一块时,第一个认真研究的框架就是LeNet。原因很简单:它是最早被证明有效的卷积神经网络结构之一&#xff…

作者头像 李华