机器翻译正文由机器翻译自项目原始文档(英文),排版经程序统一处理,可能存在偏差,请以原项目仓库为准。
最大似然估计
mle 是一个用 C 语言编写的小型、灵活的终端文本编辑器。
可运行于 Linux、Windows(Cygwin 或 WSL)、FreeBSD、macOS 等平台。
演示
目标
- 保持代码库小且易于修改
- 最小化构建时和运行时依赖
- 优先简洁而非完全正确
- 使其可扩展和可配置
- 使用 shell 命令增强功能(例如,grep、tree)
功能
- 小型代码库(约 12k 行源代码)
- 完全支持 UTF-8
- 语法高亮
- 可堆叠的键映射(模式)
- Extensible via Lua
- 可编写脚本的 rc 文件
- 键宏
- 窗口分割
- 正则搜索与替换
- 大文件支持
- 增量搜索
- 线性撤销和重做
- 多光标
- 自动缩进
- 无头模式
- Navigation via ctags
- Movement via less
- 通过 fzf 模糊文件搜索
- 通过 tree 浏览文件
- 通过 grep 文件搜索
- 通过 perl 字符串操作
构建
$ sudo apt install git build-essential # 安装 git、make、gcc、libc-dev
$
$ git clone --recursive https://github.com/adsr/mle.git
$ cd mle
$ make mle_vendor=1
要构建完全静态的二进制文件,请尝试 make mle_vendor=1 mle_static=1。
你也可以直接运行 make 来链接系统库,而不是 vendor/。注意,这需要安装以下软件包:
uthash-dev
liblua5.4-dev
libpcre2-dev
要安装到 /usr/local/bin:
$ make install
要安装到自定义目录,请提供 prefix,例如:
$ make install prefix=/usr # /usr/bin/mle
从仓库安装
mle 可能可以通过系统的软件包管理器进行安装。
# apt install mle # 基于 Ubuntu 和 Debian 的发行版
# dnf install mle # 基于 CentOS、RHEL、Fedora 的发行版
# pkg install mle # FreeBSD
# yay -S mle # Arch(通过 AUR)
# snap install mle # 所有主流 Linux 发行版
# nix-env -i mle # NixOS(通过 nixpkgs)
# apk add mle # Alpine
# xbps-install mle # Void
# brew install mle # macOS (Homebrew)
# port install mle # macOS (MacPorts)
# setup-x86.exe -q -P mle # Cygwin
基本用法
$ mle # 打开空白缓冲区
$ mle one.c # 编辑 one.c
$ mle one.c:100 # 在第100行编辑 one.c
$ mle one.c two.c # 编辑 one.c 和 two.c
$ mle -h # 显示命令行帮助
默认按键绑定是直观的。像平常一样输入文本,使用方向键移动,使用 Ctrl-S 保存,Ctrl-O 打开,Ctrl-X 退出。
按 F2 获取完整帮助。
高级用法:mler c
mle 可以通过命令行选项进行自定义。运行 mle -h 查看所有命令行选项。
要设置默认选项,请创建一个名为 ~/.mlerc(或 /etc/mlerc)的 rc 文件。rc 文件的内容可以是任意数量的命令行选项,每个选项用换行分隔。以分号开头的行被解释为注释。
如果 ~/.mlerc 是可执行文件,mle 会执行它,并按上述说明解析输出到标准输出的内容。例如,考虑以下来自可执行的 ~/.mlerc bash(1) 脚本的片段:
# 定义 'test' kmap
echo '-Ktest,,1'
# M-q:如果 `.git` 存在,则将 grep 替换为 git grep
if [ -d ".git" ]; then
echo '-kcmd_grep,M-q,git grep --color=never -P -i -I -n %s 2>/dev/null'
fi
# 设置默认 kmap
echo '-n test'
如果当前工作目录中存在 .git,这将使用 git grep 覆盖内置的 grep 命令。
Shell 命令集成
如果 PATH 中存在,以下程序将启用或增强 mle 的某些功能。
- bash (tab completion)
- fzf(模糊文件搜索)
- grep (file grep)
- less (less integration)
- perl (perl 1-liners)
- readtags (ctags integration)
- tree (file browsing)
也可以通过 cmd_shell (默认 M-e)运行任意 shell 命令。如果选中了任何文本,它会被发送到命令的 stdin。任何生成的 stdout 会被插入到文本缓冲区中。
高级用法:无头模式
mle 提供对非交互式编辑的支持,这在将编辑器用作常规命令行工具时可能有用。在无头模式下,mle 将 stdin 读入缓冲区,如果指定了启动宏,则应用它,然后将缓冲区内容写入 stdout。例如:
$ echo -n hello | mle -M 'test C-e space w o r l d enter' -p test
hello world
如果 stdin 是管道,mle 会自动进入无头模式。无头模式可以通过 -H 选项显式启用或禁用。
如果 stdin 是管道并且通过 -H0 禁用了无头模式,mle 会将 stdin 读入新缓冲区,然后像平常一样在交互模式下运行。
高级用法:脚本
mle 可以通过 Lua 编程语言进行扩展。脚本通过 -x CLI 选项加载。脚本注册的命令可以像平常一样通过 -k 映射到按键。请参见 uscript.lua 获取一个简单示例。
还有一个带有 Wren 脚本支持的 wren 分支。该工作目前已暂停。
分支
致谢
mle 广泛使用以下库。
- 本文标题:mle - 灵活的终端文本编辑器 (C)
- 本文链接:https://www.cn121.com/editor/adsr-mle.html
- 原项目:adsr/mle 版权归原作者 adsr 及贡献者所有
- 收录信息:本站于 2026-10-27 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
- 开源协议:收录时本项目采用 Apache-2.0(查看 LICENSE 原文),本站译文为其衍生内容;使用、修改、分发请以该仓库 LICENSE 原文为准。本站对原文仅作排版与图片地址适配, 并保留原项目的 NOTICE 与署名要求。
- 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 adsr/mle。
- 翻译说明:本页正文为人工智能生成内容——由机器翻译对原项目 README 初译、经程序校验排版,可能存在错漏,请以原项目文档为准。
- 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
- 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。