我一直是 Vim 的狂热用户,最近对它的工作原理产生了兴趣。
有谁知道是否有教程介绍了将普通文本编辑器转换为具有 Vi/m 功能的基础知识?编程语言无关紧要;我是一个很有经验的程序员。
到目前为止,我找到了以下资源:
我一直是 Vim 的狂热用户,最近对它的工作原理产生了兴趣。
有谁知道是否有教程介绍了将普通文本编辑器转换为具有 Vi/m 功能的基础知识?编程语言无关紧要;我是一个很有经验的程序员。
到目前为止,我找到了以下资源:
我想首先你应该知道 VI/VIM 实际上是两个部分。一个是可视化编辑器vi
,另一个是单行编辑器,称为ed
.
实际上vi
被称为可视化ed
编辑器,因为它建立在(编辑器)之上。它是 ex 模式的可视化部分,您可以在其中查看和编辑文本,这就是它从visual获得名称vi的原因。
ex 模式实际上是编辑器的复制/表示ed
。只需ed
在终端上启动并使用默认的 Vi ex 命令即可。视觉、替换和插入模式由vi
. 例如,有几个命令实际上在做同样的事情,例如:
:100 // Go to line 100, ex mode (ed)
100G // Go to line 100, normal mode(vi)
:.,5d // Delete 5 lines, ex mode (ed)
5dd // Delete 5 lines, normal mode (vi)
等等...
有关这方面的更多信息,我建议阅读O'Reilly的《学习 vi 和 Vim 编辑器》这本书:
作为一点灵感,您也许可以看看 Vi 仿真在各种 IDE 中的实现。
作为经验丰富的 Vi 用户,您将知道使其与其他(可视)编辑器不同的主要有两个关键方面: - 输入模式Esc和:在它们之间切换的常用方式 - 上下文键盘映射,其中多个按键建立一个命令
我见过很多人将 Vi 键盘映射的子集添加到现有编辑器中,虽然可以合理地映射一些东西,但获得仿真可能需要相当广泛地替换现有编辑器的键盘处理。
当然,键盘映射有很好的文档记录,所以实现起来应该不会太难。
接下来是实现命令模式。这取决于您要修改哪个编辑器来实现这一点,但我想将焦点更改为底部的永久小部件/控件。一旦将焦点放在该控件上,您就可以轻松处理输入,然后在按下返回时解析和处理命令。
命令模式的基本语法继承自 ed/sed 编辑器,因此您可以查找其实现(或论文)。
总而言之,获得一个看起来很像 vi 的肤浅实现并不是一项艰巨的工作。但真正做好是另一回事。我建议你认真考虑只使用优秀的 Vim ( http://www.vim.org/ )。