笨办法学 Python · 续 练习 50:`vi`
练习 50:vi
原文:Exercise 50: vi
译者:飞龙
协议:CC BY-NC-SA 4.0
自豪地采用谷歌翻译
你有一个模块,实现了ed
和sed
中使用的功能。显然,下一步是实现世界历史上最讨厌和实用的文本编辑器:vi
。如果你知道 Lisp 可以实现 Emacs,但没有人有时间创建一个伪装成文本编辑器的全新操作系统。人生苦短,不能整天按住三个按键并敲击 TAB 键。
这个练习的目的不是做一个非常精确的vi
的副本。这是一个非常大的项目,但如果你想尝试它,那么就去做吧。你这个项目中的目标是,再次复用你的ed
模块,并玩转 Python 的 curse
模块。curse
模块让你处理旧式的文本终端窗口和图形操作。实际上“图形”应该加引号,因为curse
中的实际图形很少。
你将使用curse
来创建一个低级的vi
实现,它可以打开文件,使用模块运行ed
和sed
命令,并使用curse
将其显示到终端屏幕。你也会发现,尝试自动化测试它是非常困难的。如果你能弄清楚如何做一个假的curse
测试框架,你会得到附加分,但是这将需要 Unix pty 系统的一些魔术技巧(我认为)。
使其可测试的更好方法是,将尽可能多的vi
放入 Python 模块,以便你可以测试代码,而无需运行curses
屏幕系统。当我说“模块”时,我并不意味着一个完整的 Python 模块,像使用ed
模块一样,你可以使用pip
安装它。我的意思是vi
的代码中的模块,然后导入到你的项目中。
思考这个项目的方法是,将控制视图(curses
)的代码与其余代码分开,以便你可以插入自己的假视图来测试。之后还剩下少量的功能,你可以通过实际运行你的vi
来手动测试。
挑战练习
我们不会实现整个vi
。我需要把它说清楚,因为实际的vi
是旧的,非常复杂,所以实现一个完整的“代码大师副本”将需要很长时间。你实际上只做以下事情:
- 获取你的
ed
模块。 - 为其创建一个
curses
UI。 - 使其在多个文件上工作。
这或多或少是你正在做的事情,所以你应该关注的第一件事是,curses
如何工作。阅读curses
的文档,来了解它的工作原理,并根据需要编写尽可能多的测试来了解它。
一旦你掌握了curses
,你就需要学习如何使用vi
。我为这个练习包括一个vi
速成课,你可以观看它,还有几个可以在线参考的vi
速查表。我建议你看我的vi
教程,并且在这个会话期间,尝试使用真正的vi
来编辑代码。实际上从你的ed
和sed
的实现中,你可以了解vi
如何工作。理论上,vi
仅仅是图形化的ed
,所以你几乎只是向ed
提供一个更好的 UI。
研究性学习
- 你的
ed
实现中的有限状态机,如何与这个vi
实现中的东西相匹配?假设你使用了这个设计。 - 实现 GUI 版本而不是
curses
,有多难?我不建议你这样做,但研究它,看看它需要什么。
笨办法学 Python · 续 练习 50:`vi`相关推荐
- 笨办法学 Python · 续 中文版
笨办法学 Python · 续 中文版 原书:Learn More Python 3 The Hard Way 译者:飞龙 自豪地采用谷歌翻译 在线阅读 PDF格式 EPUB格式 MOBI格式 代码仓 ...
- 笨办法学 Python · 续 练习 33:解析器
练习 33:解析器 原文:Exercise 33: Parsers 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 想象一下,你将获得一个巨大的数字列表,你必须将其输入到电子表格 ...
- 笨办法学 Python · 续 练习 0:起步
练习 0:起步 原文:Exercise 0: The Setup 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你需要设置和配置一些工具来学习此书.有可能你已经有了很多这些东西 ...
- 笨办法学 Python · 续 第二部分:简单的黑魔法
第二部分:简单的黑魔法 原文:Part II: Quick Hacks 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你有最好的想法,你会打动世界!你会成为一个亿万富豪!你的大 ...
- 笨办法学 Python · 续 练习 52:`moreweb`
练习 52:moreweb 原文:Exercise 52: moreweb 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 现在,你已经使用 Python http.server ...
- 笨办法学 Python · 续 练习 24:URL 快速路由
练习 24:URL 快速路由 原文:Exercise 24: Fast URL Search 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我们将结束数据结构和算法的部分,并将 ...
- 笨办法学 Python · 续 练习 32:扫描器
练习 32:扫描器 原文:Exercise 32: Scanners 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我的第一本书在练习 48 中非常偶然涉及到了扫描器,但现在我 ...
- 笨办法学 Python · 续 练习 18:性能测量
练习 18:性能测量 原文:Exercise 18: Measuring Performance 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 在本练习中,你将学习使用多种工具 ...
- 笨办法学 Python · 续 练习 17:字典
练习 17:字典 原文:Exercise 17: Dictionary 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你应该熟悉 Python 的dict类.无论什么时候,你编 ...
最新文章
- PostgreSQL查询优化器之grouping_planner
- 华东交通大学计算机调剂,华东交通大学2018考研调剂信息
- linux 常用命令行 大全
- 保姆级教程 | TensorFlow-YOLOv3 从本地训练到服务器部署全过程
- ural 1012K-based Numbers. Version 2 1013. K-based Numbers. Version 3
- 金蝶ERP实现产品入库及委外加工冲减生产现场虚仓毛坯数(修正版07-05-10)
- diff与patch操作
- 无线充电手机 协议 c语言,这款无线充电器仅69元?支持Qi协议
- NSSM的下载与使用
- ArcGis-学习笔记6-4 空间插值简介
- Rational Rose建立类图
- 苹果开发者账号申请 之 公司开发者账号申请2021年
- 国美易卡利用Facebook精准定位每一位客户
- js html显示emoji表情,js emoji表情长度判断
- 《C Primer Plus》第二章——C语言概述(程序示例与解释,提高程序可读性,函数的定义与使用,调试,关键字,复习题与编程练习)
- 支付宝批量转帐工具使用说明书
- Opensearch架构及引擎原理
- Verilog中的parameter
- 一个汉字包括几个字符,几个字节?一个字母呢?
- C/C++重要知识点
热门文章
- 继续教育c语言试题及答案,2006--2007学年西北师范大学继续教育学院《C语言程序设计》试卷B...
- java jar metainf_java – 从生成的jar文件中排除META-INF / maven文件夹
- 树莓派绿灯闪了几下不闪了_城市猎人的树莓派笔记一灯大师
- RTT学习笔记3-时钟定时器管理
- mysql datatype 类型_MySQL DataType--数值类型
- 用电脑更新手机ios系统_macOS 11正式版:大更新!苹果把iOS风格搬到了电脑上
- fisher线性判别算法python_干货|机器学习算法之线性判别分析
- [C++] - C++11 多线程 - Future
- java vector实现的接口_java的List接口的实现类 ArrayList,LinkedList,Vector 的区别
- eclipse ssh mysql_Eclipse 配置SSH 详解