首页 >后端开发 >C++ >使用 GNU Emacs 进行 C 语言开发

使用 GNU Emacs 进行 C 语言开发

Patricia Arquette
Patricia Arquette原创
2024-12-28 08:28:12710浏览

C Development with GNU Emacs

Emacs 的设计考虑到了编程,它原生支持 C、Python 和 Lisp 等语言,提供语法高亮、可定制的编码风格和实时错误检测等高级功能。其内置的 Lisp 解释器使 Emacs 具有高度适应性,允许用户塑造编辑器以适应特定的工作流程或创建全新的功能。

其丰富的扩展生态系统确保它在从学术写作到系统编程的各个领域保持相关性,而其可定制的界面使用户能够优化其环境以获得最大的生产力。

对于那些重视控制和多功能性的人来说,它仍然是一个可靠的选择,证明几十年前设计的工具仍然可以满足当今快速发展的技术环境的需求。

为什么选择 Emacs?

Emacs 不仅仅是一个文本编辑器,它还是一个强大的、可扩展的编程、写作和定制平台。与 VS Code 或 IntelliJ IDEA 等现代编辑器不同,Emacs 凭借灵活性和可编程性而蓬勃发展。它允许用户深度定制他们的工作流程,将其变成适合他们确切需求的环境。无论您是用 C 语言编码、管理大型项目,甚至是写小说,Emacs 都可以满足您的要求。

对于新用户来说,这可能看起来令人难以承受,但是一旦您了解了其原理,Emacs 就会成为与您一起成长的工具。本指南旨在帮助您设置一个简化的 Emacs 环境,从基本配置到高级集成,确保您每一步都高效。

C Development with GNU Emacs

目录

  • 创建 init.el
  • 确保 init.el 目录正确
  • Emacs 基本配置
  • 添加 Linux 内核编码风格模式
  • 安装和配置 MELPA 包管理器
  • 安装 Clang LSP 服务器
  • 使用 Company、Projectile、Treemacs 和 Magit 增强 C 开发
  • 添加 GNU Global、GTag 和 Helm-Gtag
  • 使用 YASnippet 作为代码模板
  • 配置上下文感知导航的语义
  • 实用的开发工作流程示例
  • 备忘单
  • 插件参考
  • 其他学习资源

步骤:

创建init.el

  1. 在您的系统上打开 Emacs。
  2. 使用命令 C-x C-f(按 Ctrl 和 x,然后按 Ctrl 和 f),打开一个文件进行编辑。
  3. 输入文件路径 ~/.emacs.d/init.el 以创建或编辑 Emacs 配置文件,然后按 Enter。
  4. 将您想要的配置添加到缓冲区中。完成后,使用 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,而无需关闭并重新打开:

  1. 重新加载 init.el 文件:

    • 在 init.el 缓冲区中按 M-x (Alt x),输入 eval-buffer,然后按 Enter。
    • 或者,在代码块末尾使用快捷键 C-x C-e 来对其进行评估。
  2. 手动评估代码:

    • 选择要重新加载的代码片段,按 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 设置涉及集成 CompanyProjectileTreemacsMagitCompany 为 C 编程提供自动完成功能,实现函数、变量和关键字的实时建议,使编码更快、更高效。通过将其配置为使用 company-clang,您可以确保针对 C 开发量身定制的强大支持。

Projectile 通过允许快速导航、文件发现和项目编译来简化项目管理。它与 Treemacs 无缝配对,后者提供了项目结构的可视化、基于树的表示,帮助您直观地查找和管理文件。最后,Magit 是 Git 的高级界面,为直接在 Emacs 中进行版本控制提供了强大的工具。

使用 C-x g 等快捷键,您可以交互地执行提交、分支和合并等操作,从而增强您的工作流程和生产力。以下是在 Emacs 环境中设置这些工具的完整配置:

(setq user-emacs-directory "~/.emacs.d/")

实际工作流程示例

让我们看看如何在现实场景中结合使用这些工具:

  1. 打开项目
    • 使用 C-c p f 使用 Projectile 快速查找项目目录中的文件。
  2. 直观地导航文件
    • 使用 M-0 打开 Treemacs,然后使用箭头键浏览您的项目结构。双击文件将其打开。
  3. 使用 Magit 的 Git 工作流程
    • 暂存更改:使用 C-x g 打开 Magit,按 s 暂存文件。
    • 提交:按 c c 通过消息提交更改。
    • 推送:使用 P 将更改推送到远程存储库。
  4. 代码完成
    • 编辑 .c 文件时,部分键入函数名称,然后按 TAB 键使用公司模式建议。

添加到文章的增强功能

  1. GNU 全局和 GTag 配置
    • 添加设置 GNU Global 和 GTags 以进行代码导航的说明:
(setq user-emacs-directory "~/.emacs.d/")
  1. Helm-Gtags 集成
    • 包含 helm-gtags 的配置以增强项目导航:
(setq backup-directory-alist `(("." . "~/.saves")))
  1. Yasnippet 模板
    • 包含 YASnippet 作为代码模板:
(tool-bar-mode -1)
(scroll-bar-mode -1)
(tooltip-mode -1)
(menu-bar-mode -1)
  1. 语义配置
    • 添加上下文感知代码完成和解析的语义:
(setq inhibit-startup-screen t
      initial-scratch-message nil
      ring-bell-function 'ignore)
  1. 额外的代码导航功能
    • 提及语义符号参考收集:
(setq cursor-type 'box
      blink-cursor-mode nil
      electric-pair-mode 1
      electric-indent-mode 1)

这些新增内容通过为 Emacs 中的高级导航、项目管理和自动化工具提供支持来增强现有内容,使文章与现代 C/C 开发的最佳实践保持一致。


备忘单

C Development with GNU Emacs

C Development with GNU Emacs


插件参考

  • 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn