Emacs 的设计考虑到了编程,它原生支持 C、Python 和 Lisp 等语言,提供语法高亮、可定制的编码风格和实时错误检测等高级功能。其内置的 Lisp 解释器使 Emacs 具有高度适应性,允许用户塑造编辑器以适应特定的工作流程或创建全新的功能。
其丰富的扩展生态系统确保它在从学术写作到系统编程的各个领域保持相关性,而其可定制的界面使用户能够优化其环境以获得最大的生产力。
对于那些重视控制和多功能性的人来说,它仍然是一个可靠的选择,证明几十年前设计的工具仍然可以满足当今快速发展的技术环境的需求。
为什么选择 Emacs?
Emacs 不仅仅是一个文本编辑器,它还是一个强大的、可扩展的编程、写作和定制平台。与 VS Code 或 IntelliJ IDEA 等现代编辑器不同,Emacs 凭借灵活性和可编程性而蓬勃发展。它允许用户深度定制他们的工作流程,将其变成适合他们确切需求的环境。无论您是用 C 语言编码、管理大型项目,甚至是写小说,Emacs 都可以满足您的要求。
对于新用户来说,这可能看起来令人难以承受,但是一旦您了解了其原理,Emacs 就会成为与您一起成长的工具。本指南旨在帮助您设置一个简化的 Emacs 环境,从基本配置到高级集成,确保您每一步都高效。
目录
- 创建 init.el
- 确保 init.el 目录正确
- Emacs 基本配置
- 添加 Linux 内核编码风格模式
- 安装和配置 MELPA 包管理器
- 安装 Clang LSP 服务器
- 使用 Company、Projectile、Treemacs 和 Magit 增强 C 开发
- 添加 GNU Global、GTag 和 Helm-Gtag
- 使用 YASnippet 作为代码模板
- 配置上下文感知导航的语义
- 实用的开发工作流程示例
- 备忘单
- 插件参考
- 其他学习资源
步骤:
创建init.el
- 在您的系统上打开 Emacs。
- 使用命令 C-x C-f(按 Ctrl 和 x,然后按 Ctrl 和 f),打开一个文件进行编辑。
- 输入文件路径 ~/.emacs.d/init.el 以创建或编辑 Emacs 配置文件,然后按 Enter。
- 将您想要的配置添加到缓冲区中。完成后,使用 C-x C-s 保存更改(按 Ctrl 和 x,然后按 Ctrl 和 s)。
确保 init.el 目录正确
为了确保 Emacs 配置始终引用 init.el 文件的正确目录,请将以下代码段添加到 init.el 文件的顶部:
(setq user-emacs-directory "~/.emacs.d/")
这显式地将 user-emacs-directory 变量设置为 ~/.emacs.d/,确保 Emacs 使用指定的路径来存储其初始化文件和相关配置。这种方法避免了 Emacs 可能由于环境特定设置而引用不同目录的潜在问题。
Emacs 的基本配置
这是一个简单实用的 Emacs 设置,清晰地解释了以帮助您理解其用途。此配置增强了可用性、简化了界面并确保了高效的编码体验。
此行将所有备份文件合并到一个目录(~/.saves)中。它可以让您的项目保持干净并避免使您的工作空间变得混乱。
(setq backup-directory-alist `(("." . "~/.saves")))
为了减少干扰,这会删除不必要的界面元素,例如工具栏、滚动条、工具提示和菜单栏。更干净的界面可以帮助您专注于编码,而不会产生视觉噪音。
(tool-bar-mode -1) (scroll-bar-mode -1) (tooltip-mode -1) (menu-bar-mode -1)
此设置禁用 Emacs 启动屏幕,删除 *scratch* 缓冲区中的默认消息,并使系统铃声静音。它从一开始就创造了一个无干扰的环境。
(setq inhibit-startup-screen t initial-scratch-message nil ring-bell-function 'ignore)
光标设置为框样式以获得更好的可见性,并且闪烁效果被禁用。启用括号和缩进的自动配对,使编码更流畅、更快。
(setq user-emacs-directory "~/.emacs.d/")
全局显示行号以方便导航,状态栏中显示列号以跟踪每行中的光标位置。
(setq backup-directory-alist `(("." . "~/.saves")))
此配置在模式行中添加了干净简洁的时间显示,以 24 小时格式显示星期、日期和时间。排除平均负载以保持界面最小化。
(tool-bar-mode -1) (scroll-bar-mode -1) (tooltip-mode -1) (menu-bar-mode -1)
输入时选择内容会自动替换突出显示的文本,剪贴板集成可确保 Emacs 和其他应用程序之间的无缝复制和粘贴。
(setq inhibit-startup-screen t initial-scratch-message nil ring-bell-function 'ignore)
所有编码均设置为 UTF-8,确保与现代文本格式兼容并避免编码问题,特别是在处理国际文本或源代码时。
(setq cursor-type 'box blink-cursor-mode nil electric-pair-mode 1 electric-indent-mode 1)
语法突出显示通过全局字体锁定模式全局启用。使用视觉线模式自然地包裹长线。当光标靠近括号时,括号会突出显示,并且会跟踪最近打开的文件以便快速访问。
(global-display-line-numbers-mode t) (column-number-mode t)
tangotango 主题提供了视觉上吸引人的配色方案。字体设置为“Consolas”,粗体,大小为 15.2 磅,以便在长时间编码过程中提高可读性。
(setq display-time-format "%a %b %d %R" display-time-interval 60 display-time-default-load-average nil) (display-time-mode 1)
注意:记住,我们使用 Emacs Lisp (Elisp),一种函数式编程语言来配置 Emacs。这是一个巨大的优势,因为它允许高度灵活的可编程定制。用强大的 Lisp 方言编写逻辑的能力使 Emacs 不仅仅是一个编辑器,而且是一个个性化工作流程的平台。
添加 Linux 内核编码风格模式
下面提供的配置使 Emacs 严格遵守 Linux 内核编码风格,强调 8 字符制表符、K&R 大括号放置和清晰的可读性。它包括参数列表的自定义对齐功能,自动检测内核相关文件(例如,具有 Kbuild、Kconfig 或内核标头的文件),并自动应用适当的样式。这确保了一致性并简化了 Emacs 中的内核代码编辑。
linux-kernel-coding-style/setup 函数将 Emacs 配置为特定于内核的设置,例如 indent-tabs-mode、tab-width 和 c-basic-offset 为 8,而 linux-kernel-coding-style/ c-lineup-arglist-tabs-only 函数使用制表符对齐参数列表,保持符合内核指南。这些钩子在编辑 Linux 内核文件时自动将样式应用到 c-mode,从而提高生产力并遵守编码标准。
(setq select-enable-primary nil select-enable-clipboard t) (delete-selection-mode 1)
将此配置添加到您的 Emacs 初始化文件 (init.el) 中。 Emacs 现在将自动检测 Linux 内核文件并应用正确的编码风格,节省您的时间并确保符合内核的编码标准。
安装和配置 MELPA 包管理器
MELPA 可以轻松地在 Emacs 中安装附加软件包。
步骤:
- 将 MELPA 添加到 Emacs:
(setq user-emacs-directory "~/.emacs.d/")
- 如果软件包不存在,则自动安装:
(setq backup-directory-alist `(("." . "~/.saves")))
更改 init.el 文件或添加新配置后,您可以刷新 Emacs,而无需关闭并重新打开:
-
重新加载 init.el 文件:
- 在 init.el 缓冲区中按 M-x (Alt x),输入 eval-buffer,然后按 Enter。
- 或者,在代码块末尾使用快捷键 C-x C-e 来对其进行评估。
-
手动评估代码:
- 选择要重新加载的代码片段,按 M-x,输入 eval-region,然后按 Enter。
这使您可以立即应用对 Emacs 配置的更改,而无需重新启动
安装 Clang LSP 服务器
语言服务器协议(LSP)提供自动完成和实时错误检查等高级功能。
必要的要求
视窗
-
LLVM/Clang:
- 从官网下载LLVM安装程序:LLVM Releases
- 安装过程中,请确保将 LLVM 添加到系统 PATH。
Linux
- Debian/Ubuntu:
(tool-bar-mode -1) (scroll-bar-mode -1) (tooltip-mode -1) (menu-bar-mode -1)
- 软呢帽:
(setq inhibit-startup-screen t initial-scratch-message nil ring-bell-function 'ignore)
自由BSD
- 安装 clangd:
(setq cursor-type 'box blink-cursor-mode nil electric-pair-mode 1 electric-indent-mode 1)
步骤:
- 安装 lsp 模式和公司模式:
(global-display-line-numbers-mode t) (column-number-mode t)
- 如有必要,配置 clangd 的路径:
(setq display-time-format "%a %b %d %R" display-time-interval 60 display-time-default-load-average nil) (display-time-mode 1)
- 可选:使用 lsp-ui 设置高级语法突出显示:
(setq select-enable-primary nil select-enable-clipboard t) (delete-selection-mode 1)
什么是 LSP 以及为什么使用它?
语言服务器协议(LSP)弥合了编辑器和编程语言之间的差距,提供自动完成、错误检查和代码导航等功能。这对于 C/C 开发特别有用,因为管理标头、调试和导航大型代码库可能具有挑战性。
通过在 Emacs 中设置 LSP,您可以获得以下能力:
- 在键入时查看实时语法错误。
- 立即跳转到函数或变量定义。
- 获取完成代码的智能建议。
这使得 Emacs 能够与现代 IDE 竞争,同时保留其轻量级和可定制的特性。
Company、Projectile、Treemacs 和 Magit
增强 C 开发的 Emacs 设置涉及集成 Company、Projectile、Treemacs 和 Magit。 Company 为 C 编程提供自动完成功能,实现函数、变量和关键字的实时建议,使编码更快、更高效。通过将其配置为使用 company-clang,您可以确保针对 C 开发量身定制的强大支持。
Projectile 通过允许快速导航、文件发现和项目编译来简化项目管理。它与 Treemacs 无缝配对,后者提供了项目结构的可视化、基于树的表示,帮助您直观地查找和管理文件。最后,Magit 是 Git 的高级界面,为直接在 Emacs 中进行版本控制提供了强大的工具。
使用 C-x g 等快捷键,您可以交互地执行提交、分支和合并等操作,从而增强您的工作流程和生产力。以下是在 Emacs 环境中设置这些工具的完整配置:
(setq user-emacs-directory "~/.emacs.d/")
实际工作流程示例
让我们看看如何在现实场景中结合使用这些工具:
-
打开项目:
- 使用 C-c p f 使用 Projectile 快速查找项目目录中的文件。
-
直观地导航文件:
- 使用 M-0 打开 Treemacs,然后使用箭头键浏览您的项目结构。双击文件将其打开。
-
使用 Magit 的 Git 工作流程:
- 暂存更改:使用 C-x g 打开 Magit,按 s 暂存文件。
- 提交:按 c c 通过消息提交更改。
- 推送:使用 P 将更改推送到远程存储库。
-
代码完成:
- 编辑 .c 文件时,部分键入函数名称,然后按 TAB 键使用公司模式建议。
添加到文章的增强功能
-
GNU 全局和 GTag 配置:
- 添加设置 GNU Global 和 GTags 以进行代码导航的说明:
(setq user-emacs-directory "~/.emacs.d/")
-
Helm-Gtags 集成:
- 包含 helm-gtags 的配置以增强项目导航:
(setq backup-directory-alist `(("." . "~/.saves")))
-
Yasnippet 模板:
- 包含 YASnippet 作为代码模板:
(tool-bar-mode -1) (scroll-bar-mode -1) (tooltip-mode -1) (menu-bar-mode -1)
-
语义配置:
- 添加上下文感知代码完成和解析的语义:
(setq inhibit-startup-screen t initial-scratch-message nil ring-bell-function 'ignore)
-
额外的代码导航功能:
- 提及语义符号参考收集:
(setq cursor-type 'box blink-cursor-mode nil electric-pair-mode 1 electric-indent-mode 1)
这些新增内容通过为 Emacs 中的高级导航、项目管理和自动化工具提供支持来增强现有内容,使文章与现代 C/C 开发的最佳实践保持一致。
备忘单
插件参考
- lsp-mode:语言服务器协议支持自动完成和错误检查。 GitHub
- 公司模式:上下文感知自动完成。 GitHub
- lsp-ui:lsp 模式的 UI 增强。 GitHub
- projectile:项目导航和管理。 GitHub
- treemacs:基于树的文件浏览器。 GitHub
- magit:Emacs 的 Git 界面。 GitHub
- ggtags:代码导航的 GNU 全局集成。 GitHub
- helm-gtags:使用 GNU Global 和 Helm 进行导航。 GitHub
- yasnippet:可重用代码的片段管理。 GitHub
- 语义:高级代码解析和导航。 GNU 统一标准
额外的学习资源
- Emacs for Beginners:适合初学者的设置和使用 Emacs 指南。关联
- Emacs Lisp 简介:了解如何使用 Lisp 自定义 Emacs。关联
- Linux Kernel Coding Style:内核编码标准的官方文档。关联
- 设置 Emacs 进行 C 开发:配置 Emacs 进行 C/C 编程的实用指南。关联
以上是使用 GNU Emacs 进行 C 语言开发的详细内容。更多信息请关注PHP中文网其他相关文章!

C 在性能优化方面仍然占据主导地位,因为其低级内存管理和高效执行能力使其在游戏开发、金融交易系统和嵌入式系统中不可或缺。具体表现为:1)在游戏开发中,C 的低级内存管理和高效执行能力使得它成为游戏引擎开发的首选语言;2)在金融交易系统中,C 的性能优势确保了极低的延迟和高吞吐量;3)在嵌入式系统中,C 的低级内存管理和高效执行能力使得它在资源有限的环境中非常受欢迎。

C XML框架的选择应基于项目需求。1)TinyXML适合资源受限环境,2)pugixml适用于高性能需求,3)Xerces-C 支持复杂的XMLSchema验证,选择时需考虑性能、易用性和许可证。

C#适合需要开发效率和类型安全的项目,而C 适合需要高性能和硬件控制的项目。 1)C#提供垃圾回收和LINQ,适用于企业应用和Windows开发。 2)C 以高性能和底层控制着称,广泛用于游戏和系统编程。

C 代码优化可以通过以下策略实现:1.手动管理内存以优化使用;2.编写符合编译器优化规则的代码;3.选择合适的算法和数据结构;4.使用内联函数减少调用开销;5.应用模板元编程在编译时优化;6.避免不必要的拷贝,使用移动语义和引用参数;7.正确使用const帮助编译器优化;8.选择合适的数据结构,如std::vector。

C 中的volatile关键字用于告知编译器变量值可能在代码控制之外被改变,因此不能对其进行优化。1)它常用于读取可能被硬件或中断服务程序修改的变量,如传感器状态。2)volatile不能保证多线程安全,应使用互斥锁或原子操作。3)使用volatile可能导致性能slight下降,但确保程序正确性。

在C 中测量线程性能可以使用标准库中的计时工具、性能分析工具和自定义计时器。1.使用库测量执行时间。2.使用gprof进行性能分析,步骤包括编译时添加-pg选项、运行程序生成gmon.out文件、生成性能报告。3.使用Valgrind的Callgrind模块进行更详细的分析,步骤包括运行程序生成callgrind.out文件、使用kcachegrind查看结果。4.自定义计时器可灵活测量特定代码段的执行时间。这些方法帮助全面了解线程性能,并优化代码。

使用C 中的chrono库可以让你更加精确地控制时间和时间间隔,让我们来探讨一下这个库的魅力所在吧。C 的chrono库是标准库的一部分,它提供了一种现代化的方式来处理时间和时间间隔。对于那些曾经饱受time.h和ctime折磨的程序员来说,chrono无疑是一个福音。它不仅提高了代码的可读性和可维护性,还提供了更高的精度和灵活性。让我们从基础开始,chrono库主要包括以下几个关键组件:std::chrono::system_clock:表示系统时钟,用于获取当前时间。std::chron

C 在实时操作系统(RTOS)编程中表现出色,提供了高效的执行效率和精确的时间管理。1)C 通过直接操作硬件资源和高效的内存管理满足RTOS的需求。2)利用面向对象特性,C 可以设计灵活的任务调度系统。3)C 支持高效的中断处理,但需避免动态内存分配和异常处理以保证实时性。4)模板编程和内联函数有助于性能优化。5)实际应用中,C 可用于实现高效的日志系统。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

WebStorm Mac版
好用的JavaScript开发工具

Dreamweaver Mac版
视觉化网页开发工具

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

禅工作室 13.0.1
功能强大的PHP集成开发环境