练习 50:vi

原文:Exercise 50: vi

译者:飞龙

协议:CC BY-NC-SA 4.0

自豪地采用谷歌翻译

你有一个模块,实现了edsed中使用的功能。显然,下一步是实现世界历史上最讨厌和实用的文本编辑器:vi。如果你知道 Lisp 可以实现 Emacs,但没有人有时间创建一个伪装成文本编辑器的全新操作系统。人生苦短,不能整天按住三个按键并敲击 TAB 键。

这个练习的目的不是做一个非常精确的vi的副本。这是一个非常大的项目,但如果你想尝试它,那么就去做吧。你这个项目中的目标是,再次复用你的ed模块,并玩转 Python 的 curse 模块。curse模块让你处理旧式的文本终端窗口和图形操作。实际上“图形”应该加引号,因为curse中的实际图形很少。

你将使用curse来创建一个低级的vi实现,它可以打开文件,使用模块运行edsed命令,并使用curse将其显示到终端屏幕。你也会发现,尝试自动化测试它是非常困难的。如果你能弄清楚如何做一个假的curse测试框架,你会得到附加分,但是这将需要 Unix pty 系统的一些魔术技巧(我认为)。

使其可测试的更好方法是,将尽可能多的vi放入 Python 模块,以便你可以测试代码,而无需运行curses屏幕系统。当我说“模块”时,我并不意味着一个完整的 Python 模块,像使用ed模块一样,你可以使用pip安装它。我的意思是vi的代码中的模块,然后导入到你的项目中。

思考这个项目的方法是,将控制视图(curses)的代码与其余代码分开,以便你可以插入自己的假视图来测试。之后还剩下少量的功能,你可以通过实际运行你的vi来手动测试。

挑战练习

我们不会实现整个vi。我需要把它说清楚,因为实际的vi是旧的,非常复杂,所以实现一个完整的“代码大师副本”将需要很长时间。你实际上只做以下事情:

  • 获取你的ed模块。
  • 为其创建一个cursesUI。
  • 使其在多个文件上工作。

这或多或少是你正在做的事情,所以你应该关注的第一件事是,curses如何工作。阅读curses的文档,来了解它的工作原理,并根据需要编写尽可能多的测试来了解它。

一旦你掌握了curses,你就需要学习如何使用vi。我为这个练习包括一个vi速成课,你可以观看它,还有几个可以在线参考的vi速查表。我建议你看我的vi教程,并且在这个会话期间,尝试使用真正的vi来编辑代码。实际上从你的edsed的实现中,你可以了解vi如何工作。理论上,vi仅仅是图形化的ed,所以你几乎只是向ed提供一个更好的 UI。

研究性学习

  • 你的ed实现中的有限状态机,如何与这个vi实现中的东西相匹配?假设你使用了这个设计。
  • 实现 GUI 版本而不是curses,有多难?我不建议你这样做,但研究它,看看它需要什么。

笨办法学 Python · 续 练习 50:`vi`相关推荐

  1. 笨办法学 Python · 续 中文版

    笨办法学 Python · 续 中文版 原书:Learn More Python 3 The Hard Way 译者:飞龙 自豪地采用谷歌翻译 在线阅读 PDF格式 EPUB格式 MOBI格式 代码仓 ...

  2. 笨办法学 Python · 续 练习 33:解析器

    练习 33:解析器 原文:Exercise 33: Parsers 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 想象一下,你将获得一个巨大的数字列表,你必须将其输入到电子表格 ...

  3. 笨办法学 Python · 续 练习 0:起步

    练习 0:起步 原文:Exercise 0: The Setup 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你需要设置和配置一些工具来学习此书.有可能你已经有了很多这些东西 ...

  4. 笨办法学 Python · 续 第二部分:简单的黑魔法

    第二部分:简单的黑魔法 原文:Part II: Quick Hacks 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你有最好的想法,你会打动世界!你会成为一个亿万富豪!你的大 ...

  5. 笨办法学 Python · 续 练习 52:`moreweb`

    练习 52:moreweb 原文:Exercise 52: moreweb 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 现在,你已经使用 Python http.server ...

  6. 笨办法学 Python · 续 练习 24:URL 快速路由

    练习 24:URL 快速路由 原文:Exercise 24: Fast URL Search 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我们将结束数据结构和算法的部分,并将 ...

  7. 笨办法学 Python · 续 练习 32:扫描器

    练习 32:扫描器 原文:Exercise 32: Scanners 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我的第一本书在练习 48 中非常偶然涉及到了扫描器,但现在我 ...

  8. 笨办法学 Python · 续 练习 18:性能测量

    练习 18:性能测量 原文:Exercise 18: Measuring Performance 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 在本练习中,你将学习使用多种工具 ...

  9. 笨办法学 Python · 续 练习 17:字典

    练习 17:字典 原文:Exercise 17: Dictionary 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你应该熟悉 Python 的dict类.无论什么时候,你编 ...

最新文章

  1. PostgreSQL查询优化器之grouping_planner
  2. 华东交通大学计算机调剂,华东交通大学2018考研调剂信息
  3. linux 常用命令行 大全
  4. 保姆级教程 | TensorFlow-YOLOv3 从本地训练到服务器部署全过程
  5. ural 1012K-based Numbers. Version 2 1013. K-based Numbers. Version 3
  6. 金蝶ERP实现产品入库及委外加工冲减生产现场虚仓毛坯数(修正版07-05-10)
  7. diff与patch操作
  8. 无线充电手机 协议 c语言,这款无线充电器仅69元?支持Qi协议
  9. NSSM的下载与使用
  10. ArcGis-学习笔记6-4 空间插值简介
  11. Rational Rose建立类图
  12. 苹果开发者账号申请 之 公司开发者账号申请2021年
  13. 国美易卡利用Facebook精准定位每一位客户
  14. js html显示emoji表情,js emoji表情长度判断
  15. 《C Primer Plus》第二章——C语言概述(程序示例与解释,提高程序可读性,函数的定义与使用,调试,关键字,复习题与编程练习)
  16. 支付宝批量转帐工具使用说明书
  17. Opensearch架构及引擎原理
  18. Verilog中的parameter
  19. 一个汉字包括几个字符,几个字节?一个字母呢?
  20. C/C++重要知识点

热门文章

  1. 继续教育c语言试题及答案,2006--2007学年西北师范大学继续教育学院《C语言程序设计》试卷B...
  2. java jar metainf_java – 从生成的jar文件中排除META-INF / maven文件夹
  3. 树莓派绿灯闪了几下不闪了_城市猎人的树莓派笔记一灯大师
  4. RTT学习笔记3-时钟定时器管理
  5. mysql datatype 类型_MySQL DataType--数值类型
  6. 用电脑更新手机ios系统_macOS 11正式版:大更新!苹果把iOS风格搬到了电脑上
  7. fisher线性判别算法python_干货|机器学习算法之线性判别分析
  8. [C++] - C++11 多线程 - Future
  9. java vector实现的接口_java的List接口的实现类 ArrayList,LinkedList,Vector 的区别
  10. eclipse ssh mysql_Eclipse 配置SSH 详解