# 4.6 文本编辑器

文本编辑器是类 UNIX 系统（如 FreeBSD）中用于创建、查看、修改纯文本文件的核心工具。无论是编辑 `/etc/rc.conf`、编写脚本还是查看日志，熟练使用合适的编辑器都能极大提升效率。文本编辑工具构成了软件开发生命周期中不可或缺的基础设施。

本节将依次介绍 FreeBSD 中常见的几款文本编辑器，从最简单易上手的内置工具，到功能强大但学习曲线较陡的经典编辑器，再到现代增强版和图形化选择：

| 编辑器            | 获取途径  | 特点简述                               |
| -------------- | ----- | ---------------------------------- |
| ee             | 基本系统  | 极其简单，像记事本，按 ESC 菜单操作               |
| vi             | 基本系统  | 经典 modal（多模式）编辑器，BSD 原生 nvi，轻量但命令多 |
| vim            | Ports | vi 增强版，具有语法高亮、插件、宏等现代功能            |
| neovim         | Ports | vim 重构现代版，Lua 配置、异步插件、LazyVim 发行版  |
| emacs          | Ports | 高度可扩展，几乎是“操作系统”，Lisp 配置            |
| microsoft-edit | Ports | 微软开源，支持中文、鼠标操作、界面友好                |

CLI 编辑器无需图形界面，可在 SSH 远程连接、纯文本控制台中使用，资源占用低，适用于服务器环境和远程管理场景。GUI 编辑器提供可视化界面和鼠标支持，更适合桌面环境下的日常开发与文档编辑工作。

> **注意**
>
> 本篇内容旨在简单介绍 FreeBSD 上常见的文本编辑器，不涉及深入的详细配置，有探索意愿的读者请自行研读相关书籍和教程。

## ee 编辑器

`ee` 是 FreeBSD 基本系统内置的编辑器，支持中文文本编辑。

`ee` 的用法比 [nano](https://www.redhat.com/zh/blog/getting-started-nano) （一款 GNU 编辑器）更为简洁，从其名字“easy editor”（简单的编辑器）即可看出其设计目标。

比如使用 ee 编辑器打开 `a.txt` 文件：

```sh
# ee a.txt
```

可以直接进行编辑，用法与 `nano` 或 Windows 记事本类似。

按 **ESC 键** 会显示提示框，再按两次 **回车键** 即可保存。

## Vi 编辑器

FreeBSD 还内置了一款编辑器 `vi`（实际为 `nvi`，New vi，是 4.4BSD 的重新实现）。与大多数 Linux 发行版将 `vi` 链接到 `vim` 不同，BSD 系统提供的是原生 `nvi`，其用法较为复杂但功能强大。

### Vi 基本使用方法

打开 `vi` 后默认处于**命令模式**，此时输入 `i` 可以进入**插入模式**（文本模式），从而进行文本编辑。注意：在插入模式下，**退格键** 可能不起作用（行为类似 Insert 键），需要使用 **Delete 键** 删除字符。

空行会显示为 `~`。

编辑完成后，按 **ESC 键** 返回命令模式。

在命令模式下输入 `:` 进入底线命令模式，常用命令包括：

* `:q` — 退出（若文件有修改则失败）
* `:q!` — 强制退出，不保存修改
* `:w` — 保存文件
* `:wq` 或 `ZZ` — 保存并退出
* `:wq!` — 强制保存并退出
* `:/关键词` 或 `/关键词` — 搜索关键词（按 n 查找下一个）

**示例**：

```vim
ABC
~
~
~
~
:wq
```

## Vim（增强版 Vi）

Vim（Vi IMproved）是 Vi 的增强版本，提供了语法高亮、插件支持、多窗口等现代功能。

### 安装 Vim

使用 pkg 安装：

```sh
# pkg install vim
```

或者使用 ports 构建：

```sh
# cd /usr/ports/editors/vim
# make install clean
```

### 配置 Vim

安装后可使用 `vim` 命令替代 `vi`，配置更友好。基本配置放在 `~/.vimrc` 文件中。

临时启用行号：

```vim
:set number          " 显示绝对行号（简写 :set nu）
:set relativenumber  " 显示相对行号（简写 :set rnu）
:set nonumber        " 关闭绝对行号
:set norelativenumber " 关闭相对行号
```

要永久启用行号，编辑用户配置文件 `~/.vimrc`（如果不存在则创建）：

```vim
set number              " 或 set nu
" set relativenumber    " 可选：启用相对行号
```

## NeoVim（现代 Vi 改进版）

NeoVim 是 Vim 的重构分支，更加模块化，支持 Lua 脚本，插件生态更活跃，性能更好。

### 安装 NeoVim

* 使用 pkg 安装：

```sh
# pkg install neovim
```

* 或者使用 ports 构建：

```sh
# cd /usr/ports/editors/neovim
# make install clean
```

### NeoVim 基础配置

NeoVim 的配置文件位于 `~/.config/nvim/init.lua`（推荐使用 Lua）。

临时启用行号的命令与 Vim 相同，如需永久启用，编辑 `~/.config/nvim/init.lua`（如果不存在则创建）：

```lua
vim.opt.number = true          -- 显示绝对行号
vim.opt.relativenumber = true  -- 显示相对行号（推荐与 number 一起用，形成混合模式）
```

### LazyVim 编辑器概述

LazyVim 是一个开箱即用的 NeoVim 配置发行版（distribution），基于 lazy.nvim 插件管理器，集成了代码补全、LSP、文件浏览器、Git 集成等 IDE 特性，非常适合想快速获得强大编辑体验的用户。

#### 安装 LazyVim

推荐全新配置：

```sh
# 备份旧配置（如果存在）
$ mv ~/.config/nvim{,.bak} 2>/dev/null || true
$ mv ~/.local/share/nvim{,.bak} 2>/dev/null || true
$ mv ~/.local/state/nvim{,.bak} 2>/dev/null || true
$ mv ~/.cache/nvim{,.bak} 2>/dev/null || true

# 克隆 Starter 模板
$ git clone https://github.com/LazyVim/starter ~/.config/nvim

# 移除 git 历史
$ rm -rf ~/.config/nvim/.git

# 启动（首次会自动下载大量插件）
$ nvim
```

启动后按空格键可打开 LazyVim 的快捷键菜单，非常直观。

NeoVim 和 Vim 共享大部分命令，上述 `:q :q! :wq :wq! :/` 等在 LazyVim 中同样适用。

![NeoVim 主界面](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-80f99869ce327c53163fc332b0b6ab59159063d8%2Fdi-4.6-jie-neovim.png?alt=media)

## Emacs 编辑器

Emacs 是历史悠久、功能极其强大的文本编辑器，以“可扩展性”闻名（几乎所有功能都可以通过 Emacs Lisp 扩展）。

### 安装 Emacs

使用 pkg 安装：

```sh
# pkg install emacs
```

或者使用 ports 构建：

```sh
# cd /usr/ports/editors/emacs
# make install clean
```

### Emacs 基础配置

Emacs 的用户配置文件通常为 `~/.emacs.d/init.el`。

编辑或创建 `~/.emacs.d/init.el` 配置文件：

```elisp
;; Emacs 基础配置示例
(setq inhibit-startup-screen t)     ; 关闭启动画面
(menu-bar-mode -1)                  ; 禁用菜单栏
(tool-bar-mode -1)                  ; 禁用工具栏
(scroll-bar-mode -1)                ; 禁用滚动条
(global-display-line-numbers-mode 1); 显示行号
```

### 退出 Emacs

最常用的退出方式是先按快捷键 Ctrl + x，再按快捷键 Ctrl + c。如果有未保存的修改，Emacs 会提示是否保存。

其他常用启动方式：

* `emacs filename.txt` — 直接打开文件
* `emacs -nw` — 在终端内不启动图形界面

Emacs GUI：

![Emacs GUI](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-15fca12562df9f7c55a934823d6b8a9dbb76424e%2Fdi-4.6-jie-emcs-1.png?alt=media)

Emacs CLI:

![Emacs CLI](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-391b7b55bb37142504f86bb92465d45c5315724c%2Fdi-4.6-jie-emacs-2.png?alt=media)

## microsoft-edit

microsoft-edit 是由微软开源的文本编辑器，原生支持中文，交互界面简单，并支持鼠标操作。

### 安装 microsoft-edit

* 使用 pkg 安装：

```sh
# pkg ins microsoft-edit
```

* 还可以使用 Ports 安装：

```sh
# cd /usr/ports/editors/microsoft-edit/ 
# make install clean
```

### 使用 microsoft-edit

使用 msedit 编辑器打开 `abc.txt` 文件：

```sh
$ msedit abc.txt
```

![microsoft-edit 主界面](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-148d304f174da9d5c9060d80d78a4d2dc2fe2739%2Fmsedit1.png?alt=media)

![microsoft-edit 界面](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-18cdac5dec070135ba7b0aedd2b99c6e9a4baaea%2Fmsedit2.png?alt=media)

操作较为简洁，此处无需展开说明。

## 编辑器配置文件结构

以下是本节介绍的编辑器配置文件路径总结：

```sh
~/.vimrc  # Vim 配置文件
~/.config/
└── nvim/
    └── init.lua  # NeoVim 配置文件
~/.emacs.d/
└── init.el  # Emacs 配置文件
```

## 课后习题

1. 在 FreeBSD 中配置 Vim、NeoVim 和 Emacs 各一个最小化配置文件，测试并记录三者的功能差异。
2. 查看 FreeBSD 中 nvi 编辑器的源码，分析其与 BSD UNIX 的区别。
3. 修改 FreeBSD 中 vi 编辑器的默认配置为 ee。
