Emacs 设置
在本文中,我们将讨论如何在 Linux 上轻松设置 Emacs 进行 C++ 开发。
简介
Emacs 是适用于 Linux 和基于 UNIX 的系统中最古老、功能最齐全的文本编辑器之一。它已经存在了很长时间(GNU emacs 已经超过二十年),并以其强大而丰富的编辑功能而闻名。Emacs 不仅仅是一个文本编辑器;它可以通过不同的“模式”进行自定义和扩展,使其可以用作 C++、Java、C 或 Python 等编程语言的集成开发环境 (IDE)。
在本文中,我们将配置 Emacs 的 lsp-mode
(语言服务器协议)用于 C++ 开发。建议在使用 Emacs 之前学习基本键绑定,例如保存文件、搜索文件等。
这篇关于设置 Emacs 的文章专门针对希望在 Emacs 中进行 C++ 开发的新手程序员。根据本文配置 Emacs 后,用户将能够获得基本功能,如代码补全、实时语法检查、代码导航等。有关 C++ 开发的 lsp-mode
高级配置,请参考此处
下载和安装
我们将在 Linux 终端中安装 Emacs。
首先,我们必须打开终端;我们可以使用快捷键 Ctrl
+ Alt
+ t
,或者可以通过在菜单中搜索来手动打开它。
命令 1: 首先,使用以下命令更新软件包列表
sudo apt-get update
此命令用于从所有已配置的源下载软件包信息,并获取软件包更新版本的信息。
sudo (Super User DO) 允许经许可的用户以超级用户或另一个用户的身份运行命令,具体取决于安全策略。因此,如果需要,请输入您的系统密码以继续。
命令 2: 现在我们将通过以下命令下载 Emacs:
sudo apt-get install emacs
如果需要,输入您的系统密码以继续。下载后,您可以检查 Emacs 是否成功安装在您的系统中。
emacs --version
如果成功安装,输出将如下所示
输出

现在我们准备好自定义 Emacs 了,只需打开 Emacs 的初始化文件。
cd ~/.emacs.d && emacs init.el
所有用于 Emacs 的自定义代码都将写入 init.el
文件中。
每次提到保存文件时,都意味着执行 C-x``C-s
(Control + x
,然后 Control + s
)键绑定;每次提到从 Emacs 执行最新命令/代码时,都意味着将光标置于命令/代码的末尾,然后执行 C-x``C-e
(Control + x
,然后 Control + e
)。
设置 MELPA 和 use-package
设置 MELPA
MELPA (Milkypostman's Emacs Lisp Package Archive) 是一个兼容 ELPA 的包仓库,其中包含大量有用的 Emacs 包。添加以下代码并执行它,以下载配置 Emacs 进行 C++ 开发所需的其他包。
(require 'package)
(setq package-enable-at-startup nil)
(add-to-list 'package-archives
'("melpa" . "https://melpa.org/packages/")
'("melpa-stable" . "https://stable.melpa.org/packages/"))
(package-initialize)
执行上述代码行后,您将在 Emacs 中获得 5000 多个可供下载的包。您可以通过运行以下命令查看它们:
M-x package-list-packages RET
输出

设置 use-package
在 init.el
中添加以下代码并执行它。
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
现在我们将使用 use-package
下载和安装任何其他 Emacs 包。use-package
是一个非常流行的包,用于组织 Emacs 配置并高效加载已安装的包。
将以下代码复制到 inti.el
文件中,以在 Emacs 中下载和安装 C++ 开发所需的包。
(use-package lsp-mode
:ensure t
:hook ((lsp-mode . lsp-enable-which-key-integration))
:config (setq lsp-completion-enable-additional-text-edit nil))
(use-package lsp-ui
:commands lsp-ui-mode
:ensure t)
(use-package ccls
:ensure t
:config
(setq ccls-executable "ccls")
(setq lsp-prefer-flymake nil)
(setq-default flycheck-disabled-checkers '(c/c++-clang c/c++-cppcheck c/c++-gcc))
:hook ((c-mode c++-mode objc-mode) .
(lambda () (require 'ccls) (lsp))))
(use-package flycheck
:ensure t)
(use-package yasnippet
:ensure t
:config (yas-global-mode))
(use-package which-key
:ensure t
:config (which-key-mode))
(use-package helm-lsp
:ensure t)
(use-package helm
:ensure t
:config (helm-mode))
(use-package lsp-treemacs
:ensure t)
;;; This will enable emacs to compile a simple cpp single file without any makefile by just pressing [f9] key
(defun code-compile()
(interactive)
(unless (file-exists-p "Makefile")
(set (make-local-variable 'compile-command)
(let ((file (file-name-nondirectory buffer-file-name)))
(format "%s -o %s %s"
(if (equal (file-name-extension file) "cpp") "g++" "gcc")
(file-name-sans-extension file)
file)))
(compile compile-command)))
(global-set-key [f9] 'code-compile)
要正确缩进整个文件,请按 C-x h
,这将选择整个文件,然后按 TAB
。现在保存文件并退出 emacs (C-x C-c
)。
现在创建一个 .cpp
文件(例如 a.cpp
,但不要在 .emacs.d/
目录中)。我建议创建一个专门用于编程的目录,并在其中创建文件。首次打开 Emacs 时,许多包将下载并安装,这可能需要一些时间。之后,lsp-mode
将寻找 C++ 开发的语言服务器,由于这是 lsp-mode
安装后 Emacs 的首次启动,它会要求下载 C++ 所需的语言服务器,即 clangd
。下面是 Emacs 要求下载 clangd
服务器的快照。

下载 clangd
服务器后,通过进入微缓冲区 (M-x treemacs
)(M-x
表示 Alt + x
或 ESC + x
)运行 treemacs 命令。
当从微缓冲区运行命令时,输出将如下所示:-
输出

从提供的选项中选择所需的目录。在我的情况下,我的目录名为 Coding/
,其中包含 Java/
和 SFML/
作为子目录。选择正确的目录后,输出将如下所示:-
输出

现在让我们通过选择 a.cpp
缓冲区来编写我们的第一个程序
#include <iostream>
int main() {
std::cout << "Wassup World\n";
return 0;
}
我们已经在 init.el
文件中定义了一个函数,用于通过按 [f9]
键编译一个简单的 cpp 文件(请参阅 init.el
文件末尾的 code-compile()
函数)。因此,通过按 [f9]
键,此简单代码将在不退出 emacs 的情况下编译。
输出
![Compiling Code by hitting [f9] key](/img/tutorials/tools/emacs-compile.jpg)
我们可以在 Emacs 的 Emacs shell(也称为 eshell
)中运行程序。按 C-x o
切换缓冲区,然后按 C-x 2
将当前缓冲区拆分为两个缓冲区,然后再次按 C-x o
切换缓冲区。如果使用 Emacs 的 GUI 版本,也可以通过鼠标选择缓冲区来切换缓冲区。现在要启动 eshell
,请从微缓冲区 (M-x eshell
) 运行 eshell
命令。一旦 eshell
打开,运行您的可执行文件。
输出
![Compiling Code by hitting [f9] key](/img/tutorials/tools/emacs-eshell.jpg)
这是设置 Emacs 用于 CPP 开发的基本指南。要启用和发现 lsp-mode
的更多功能,请参阅此处。
Emacs 的常规自定义
本节完全是可选的。本节不涉及 C++ 开发。在本节中,我们将只配置 Emacs 的外观。
Emacs 打开时,通常会显示启动消息。如果您想禁用它,请在 init.el
文件中输入此内容
(setq inhibit-startup-message t)
使滚动条不可见
(toggle-scroll-bar -1)
保存文件并执行此行。要使其再次可见,只需将 -1
替换为 t
。
使菜单栏不可见
(menu-bar-mode -1)
保存文件并执行此行。要使其再次可见,只需将 -1
替换为 t
。
使工具栏不可见
(tool-bar-mode -1)
保存文件并执行此行。要使其再次可见,只需将 -1
替换为 t
。
使每行前面的行号可见
(global-linum-mode t)
保存文件并执行此行。要使其再次不可见,只需将 t
替换为 -1
。
Emacs 还提供各种内置主题。用户可以查看并启用最适合他们的主题。要查看内置主题,请从微缓冲区运行命令 M-x customize-themes
并选择所需的主题。本指南中提供的快照中使用的 Emacs 使用了 material 主题,该主题可以通过 use-package
下载。
(use-package material-theme
:ensure t)
(load-theme 'material t)
重启 Emacs,material 主题将加载。