编辑器 活跃维护

mle

adsr/mle

灵活的终端文本编辑器 (C)

956
Stars 标星
58
Forks 分支
20
Watchers 关注
17
Open Issues
C
主要语言
Apache-2.0
开源协议
1.4 MB
仓库大小
5 个月前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:adsr/mle
git clone https://github.com/adsr/mle.git
git clone git@github.com:adsr/mle.git
README.md master

机器翻译正文由机器翻译自项目原始文档(英文),排版经程序统一处理,可能存在偏差,请以原项目仓库为准。

最大似然估计

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 分支。该工作目前已暂停。

分支

  • eon - 鼠标支持和类似记事本的选择功能
  • turbo-mle - Turbo Vision 移植版

致谢

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 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。