ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

终极指南:ad编辑器是什么——融合Vim、Kakoune与Plan9思想的Rust文本编辑器

终极指南:ad编辑器是什么——融合Vim、Kakoune与Plan9思想的Rust文本编辑器 终极指南ad编辑器是什么——融合Vim、Kakoune与Plan9思想的Rust文本编辑器【免费下载链接】adan adaptable text editor项目地址: https://gitcode.com/gh_mirrors/ad5/ad如果你是一个喜欢折腾的开发者一定听说过 Vim 和 Kakoune 的模态编辑也或许对 Plan 9 系统中 Acme 编辑器的万物皆文件理念有所耳闻。ad编辑器读作 A.D.正是一款把这三者精髓融为一体的Rust文本编辑器。它既保留了 vim/kakoune 高效的模式化文本操作又引入了 Acme 通过文件系统协议对外暴露编辑器状态的独特扩展方式让文本既能编辑、又能执行成为现实。这篇终极指南将带你全面认识这款有趣的开源 Rust 文本编辑器。上图是 ad 编辑器的实际运行界面深色主题、分屏编辑、tree-sitter 语法高亮、左下角状态栏清晰显示当前处于 NORMAL 模式整体气质与终端编辑器一脉相承。什么是 ad 编辑器一个可适应的文本编辑器ad的名字是an adaptable text editor一个可适应的文本编辑器的缩写也是一次大胆的实验尝试用 Rust 从零实现一个整合各家所长的编辑器。它最有意思的设计哲学是在 ad 里文本本身就是可执行的东西。你可以把命令写在文本里然后直接运行它——这正是 Plan 9 的 Acme 编辑器最迷人的特性之一。⚠️ 需要说明的是作者明确表示 ad 目前主要是一个实验性项目用于探索编辑器特性的实现暂不建议作为日常主力编辑器使用。但对于想深入了解编辑器内部原理的 Rust 开发者来说它是一座宝藏。设计灵感来源站在三个巨人的肩膀上ad 的官方设计文档docs/design.md详细阐述了它从不同编辑器吸收的设计理念灵感来源借鉴的特性Vim / Neovim模态编辑、分隔符内选择、块跳转、命令模式Kakoune多光标选择、可细化/扩展的选区操作、底部命令输入Plan 9 的 Acme / sam基于 9p 协议的虚拟文件系统接口、sam 编辑语言、结构化正则Emacsmini-buffer 式的自定义辅助输入模式ad 并不打算取代 Vim 或 Emacs而是追随 Acme 的哲学做一个整合中的开发环境integratING把编辑器状态和功能以最简单的方式暴露给外部程序而不是把所有东西都塞进编辑器内部。五种编辑模式比 Vim 更丰富的模式体系和 Vim 一样ad 采用模态编辑但它的模式比 Vim 更细分。根据官方文档docs/tour/modesad 共提供 5 种模式NORMAL选择与操作文本与 Vim 不同ad 采用 Kakoune 式的名词动词顺序INSERT增删文本COMMAND执行内置命令RUN执行外部命令EDIT应用结构化正则表达式值得一提的是在 ad 中执行文本有两种快捷方式用鼠标中键点击选区或者把光标放在选区内按下。命令的输出默认会进入$dir/output缓冲区非常直观。结构化正则表达式来自 Plan 9 sam 的编辑利器ad 最独特的功能之一是实现了 Plan 9 中 sam 编辑器首创的结构化正则表达式Structural Regular Expressions。它不仅仅是简单的查找替换而是可以像编程一样对文本结构进行批量操作。执行引擎位于 src/exec/mod.rs支持的操作包括命令作用s/re/template/替换x/re/遍历所有匹配y/re/在匹配之间遍历按正则分割g/re/过滤匹配行v/re/过滤非匹配行i/template/、a/template/在每个匹配前/后插入d删除每个匹配例如Edit , x/mouse/ c/clicky thing/g这样一条命令就能在全局范围内完成复杂的结构化改写。fsys把编辑器变成文件系统这是 ad 最具颠覆性的设计。通过内置的9p 文件协议实现代码在 src/fsys/ 目录ad 会把编辑器内部状态以虚拟文件系统的形式暴露出来外部程序只要会读写文件就能控制编辑器用 ad 自带的 9p 客户端就能直接探索这个文件系统ad -9p ls ad ad -9p ls ad/buffers/1 ad -9p read ad/buffers/1/dot如果系统安装了fusermount和9pfuse甚至可以在配置中开启auto-mount把这个虚拟文件系统直接挂载到本地目录——届时你可以用任意编程语言、任意你熟悉的工具来操作 ad 编辑器。官方还提供了 Rust 客户端 cratecrates/ad_client和 Shell 辅助脚本data/lib/ad.sh供开发者直接调用。快速上手安装 ad 编辑器的两种方法目前项目还没有完善的打包发布机制推荐通过源码编译安装git clone https://gitcode.com/gh_mirrors/ad5/ad cd ad cargo install --path . cargo xtask setup-dotfiles安装完成后在编辑器内执行:help即可查看内置帮助文档。此外docs/tour/目录下的系列文档index提供了从入门到深入的引导包括界面、模式、加载、执行、结构化正则、fsys 等主题非常适合边看边学。内部架构自己动手实现的五脏六腑ad 贯彻了尽可能从零实现的理念项目内部包含许多值得学习的 Rust 实现Gap Buffer缓冲区内部状态使用 gap buffer 数据结构src/buffer/internal.rs正则引擎自研的、可作用于字符流的正则引擎src/regex/虽然性能不及成熟的 regex crate但为 exec 命令语言提供了灵活性语法高亮基于 tree-sitter 的语法高亮并支持逐行正则高亮作为回退方案src/syntax/LSP 客户端内置了最小化的语言服务器协议客户端src/lsp/Trie 键位映射用 trie 数据结构处理序列化的组合键绑定src/trie.rs9p 协议库支撑 fsys 的完整 9p 协议实现crates/ninep项目还附带多个辅助工具 crate事件库ad_event、REPLad_repl、文件监听ad_watch等整个 workspace 结构清晰非常适合作为 Rust 编辑器实现的学习范本。总结适合谁使用 ad 编辑器编辑器爱好者喜欢探索不同编辑器设计哲学的极客Rust 学习者想通过阅读源码学习编辑器实现gap buffer、正则引擎、协议实现等Plan 9 文化追随者欣赏万物皆文件理念的开发者ad 编辑器虽然还很年轻但它把 Vim 的模态编辑、Kakoune 的选区操作、Acme 的文件系统扩展思想融合在一个 Rust 项目里本身就是一件充满启发性的作品。如果你对这种小而美、可 hack的工具感兴趣不妨 clone 下来亲手试一试体验一下文本即命令的独特乐趣【免费下载链接】adan adaptable text editor项目地址: https://gitcode.com/gh_mirrors/ad5/ad创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表