1. 什么是编辑器


形而上者谓之道,形而下者谓之器,器者,工具也。我们可以从工具的操作目标,输入条件,输出结果来分析一个工具。例如刀是人类的基本工具,假设操作目标是一个苹果,你输入力量,它输出被刀劈开的苹果。 当然如果你不用工具,用手也可以劈开苹果,但是明显的没有使用工具那么流畅,工具就是帮助我们快速的解决问题的东西。
编辑这个词的概念非常广泛,但是其实说白了,编辑就是对信息内容的组织整理修改等。编辑器就是对信息内容的组织整理修改提供便利的工具。
因为计算机里面的内容有多种组织形式,因此有多种多样的编辑器,常见的编辑器有文本编辑器、音频编辑器、图像编辑器、视频编辑器等。这些编辑器有的针对文本内容,有的针对图像资源,但是本质上都是大同小异的。

2. 工具组合对文本编辑的影响

假设我现在要写一篇文章,我需要若干张白纸,我的工具是一支笔。根据上文所说,分析工具从工具的操作目标,输入条件,输出结果来分析,白纸是操作目标,输入条件是我的笔画,输出结果是写在纸上的笔迹。很显然我肯定会写错别字,但是我除了在错别字上涂改,没有其他更好的修改手段了,这是工具以及工具所操作对象的局限性所决定了的。除了发明新的工具,否则无法弥补这个局限性。后来,有人发明了改正液和胶带纸,但是修改结果还是非常不美观。
这是因为白纸既是内容的存储介质也是内容的显示介质,因为存储介质和显示介质绑定在一起,因此已经写下字符的地方,你不可以让这个字符消失,即不可以删除。你不可以在一个位置写下A,再把这个A修改成B,即不可以修改。如果你要在已经写好的内容中间再插入新的内容,后面的内容不会自动让出空档给你插入,即不可以在中间插入。
综上所述,我对笔+纸这个工具组合是非常的不满意,于是我开始意淫一个完美的文本编辑工具,这个文本编辑工具可以快速 定位, 删除,修改, 插入,查找,比较,替换,排序等等。
最终这个工具出现了,那就是计算机文本编辑器,计算机系统相对于笔和纸有了很多天生的优势。计算机的存储介质和显示介质是分开的,存储是硬盘,显示是屏幕。硬盘天生支持擦除修改,显示屏幕天生支持动态刷新,操作系统天生支持快速定位文件指针和动态扩展文件大小。
好吧,我们来理一理头绪,现在我们的工具是计算机文本编辑器,操作目标是文件系统里面的一个文件,输入条件是我的鼠标和键盘,输出结果是修改后的文件的显示结果。基于计算机文本编辑器的特性,我们可以随心所欲的编辑文本。
最后提一个问题,如果我有一个非常大的文本文件,例如1G,我想在它的第一个字节后面添加一个新字节,那么从第一个字节往后的内容是否都需要往后移动一个字节的位置以便给这个新字节腾出点地方来呢?也就是说我添加了一个字节,会造成后面接近1G的内容移动一个字节的位置吗?
(答案肯定是否定的啦,那具体是怎么实现的呢?)

另外因为计算机的特性,我们的文本编辑器无法自动保存编辑的历史记录,所以最终有人发明了版本控制系统,例如CVS,SVN,Git等。
3. 计算机文本编辑器是如何工作的

让我们来回忆一下,我们日常是如何使用计算机文本编辑器的,首先我们利用编辑器打开一个文件,所谓打开也即是读取硬盘上的文件并显示在屏幕上,然后编辑器接受我们的输入,再根据我们的输入来修改文件内容,并将修改后的内容更新显示到屏幕上,最终修改到我们满意为止保存文件关闭编辑器。
任何完整的计算机系统,都有标准输入输出设备,并由操作系统负责协调这些设备。操作系统实现并维护着一个文件系统,编辑器借助于操作系统提供的接口读取文件系统中的文件,同时借助于操作系统提供的接口在屏幕显示文件内容,编辑器所要做的主要工具就是判断用户的输入,执行对应的编辑操作。什么样的键盘鼠标输入对应于什么样的编辑操作取决于用户和编辑器之间的协议。
编辑器是一个程序,因为程序都是活在操作系统里面的,如果编辑器程序当前激活并等待输入,那当操作系统收到用户输入,就会将输入定向到当前激活的程序,当前激活程序可以根据其源程序指示来处理这个输入。根据输入的不同,编辑器程序可以处理各种需求。为了提高编辑效率,一般上文本内容都是从硬盘读取到内存缓冲区,在编辑完成后,编辑器调用操作系统的接口来将修改内容从缓冲区保存到硬盘上的文件系统。
4. 计算机文本编辑器的基本操作

编辑文本最重要的基本点是操作定位问题,也即定位光标的位置,这里要区分光标和鼠标指针的区别,光标一般都是一个小竖线,指示你将要执行的操作从何处定位。在鼠标没有发明前,光标就存在于计算机里任何需要编辑文本的地方,对于现代习惯使用鼠标的人来说,因为鼠标指针点到哪里,光标就定位到哪里,我们往往忽视了光标和鼠标指针的区别,实际上他们两个是完全不相关的2个东西。不需要鼠标指针,我们完全可以使用键盘的上下左右键来移动光标。
定位到要操作的地方,下面就可以执行操作,你可以输入, 删除,修改,查找,比较,替换,排序,复制,剪切,粘帖等等。仔细分析上面的这么多操作,其实关键的操作只有 光标定位,输入,删除这三个基本操作,只需要这三个基本操作就可以完成任意的文本编辑工作,其他的操作都是为了提高工作效率而存在的非必要操作。比如我要修改A为B,其实就是分成3步,即先定位光标到A后面,然后删除A,再输入B。比如说我要将Hello替换成Hi,只需要将光标定位到o再依次删除ello,再输入i即可。
5. 如何使用UltraEdit来完成基本的编辑操作

在Windows系统里面,我使用UltraEdit(UE)来完成日常的文本编辑工作。UE使用上下左右键或者鼠标来定位光标,鼠标确实是个好东西,指到哪里就可以定位到哪里。输入内容只需要按键盘上的字母或者符号数字输入即可,删除内容就按Backspace或者Delete,这样就可以完成基本操作。至于稍微复杂一点的操作例如查找和替换,UE都提供了菜单和窗口界面来帮助我们完成操作。只是点点鼠标而已,非常的傻瓜化。
6. 如何使用VI来完成基本的编辑操作

VI在1976年首发于BSD操作系统,现在已经成为Unix\Linux类系统的标准配置,这类系统常常需要运行字符模式来执行指令,对于不需要菜单的字符模式,鼠标除了移动光标以外没有太大的作用,如果仅仅是为了移动光标而将手指移出键盘区去找鼠标是非常浪费时间而效率低下的。所以一个不需要使用鼠标而能快速定位光标的文本编辑器就显得非常重要了。
VI使用键盘上的kjhl来上下左右移动光标,你可能会疑问,VI不用鼠标就算了,为什么还不使用键盘上的上下左右键来移动光标呢?答案是上下左右键在键盘上的位置离字母区太远了,我们不光懒得将手移出键盘区,我们甚至懒得将手指移出键盘上的字母区。当然啦,kjhl只是VI里面最基本的光标移动命令,有很多复杂的命令来完成复杂的光标移到任务。
说完了VI如何定位光标,下面说说VI如何完成输入,删除。VI分为插入模式(Insert Mode)和一般命令模式(Normal Mode),普通的输入和删除方式和其他的所有编辑器一样,在插入模式下完成重复劳动就行。很显然如果VI只支持插入模式下的重复劳动,那它就不可能成为“编辑器之神”,VI的命令模式异常强大,你可以使用命令快速的完成 删除,修改,查找,比较,替换,排序,复制,剪切,粘帖等等等等等等任意复杂的定制性编辑工作。


9. 道

形而上者谓之道,形而下者谓之器,道者,真理也。如今的文本编辑器参差不齐层出不穷,本文只列举了UltraEdit和VI做了简单说明,工具毕竟只是工具,只要可以完成工作,可以提高工作效率都是可取的,不应该一味的追求工具使用的细节,而应该理解事物的本质,从而真正的驾驭工具而不是被工具驾驭,此为形而上。

关于文本编辑器的一点思考相关推荐

  1. android 富文本编辑器_富文本编辑器,还是Tinymce好一点?Angular/Vue集成最新版

    以前jQuery.PC网页时代,富文本编辑器一直就是百度Ueditor.KindEditor.现在使用Angular.Vue.React等MVVM架构以及最新的大前端 工程模式下,老的编辑器显然不更新 ...

  2. 关于前端职业规划的一点思考

    自己目前已经工作3年了,最近也刚换了新工作,日常也一直在考虑自己的前端职业规划到底是怎样的,目前个人视角还不是很宽广,怕误人子弟,以下这篇文章有点启发,故转发供大家借鉴(里面有部分内容做了一些小修改) ...

  3. 数据结构与算法之美 32 字符串匹配基础(中):如何实现文本编辑器中的查找功能

    如何实现文本编辑器中的查找功能 背景 BM 算法的核心思想 BM 算法原理分析 1. 坏字符规则 2. 好后缀规则 BM 算法代码实现 背景 文本编辑器中的查找替换功能,我想你应该不陌生吧?比如,我们 ...

  4. 真·富文本编辑器的演进之路-Span开胃菜

    Span的基础性概念分析 国际惯例,官网镇楼,这是对Span最好的全局概览. https://developer.android.com/guide/topics/text/spans Span种类 ...

  5. 我为什么要做富文本编辑器【wangEditor5总结】

    wangEditor 官网 www.wangEditor.com 了解最新版的编辑器 --------------------------------------------------------- ...

  6. wangeditor 最大字数_我为什么要做富文本编辑器【wangEditor5个月总结】

    本文是几年前写的,直接访问 wangEditor 官网 www.wangEditor.com 了解最新版的编辑器 ------------------------------------------- ...

  7. 真·富文本编辑器的演进之路

    Span的基础性概念分析 国际惯例,官网镇楼,这是对Span最好的全局概览. https://developer.android.com/guide/topics/text/spans Span种类 ...

  8. 使用文本编辑器开发一个Java程序的详细步骤

    概述 前提: 在学习本博文之前,您需要搭建好Java环境,其中包括1.JDK(Java开发工具箱)的下载:2.JDK环境变量的设置. 就目前对于Java程序的开发现状看的话,都是采用的流行的开发工具, ...

  9. (转)关于数学建模竞赛的一点思考、总结和建议

    宋一凡 环境保护与安全工程学院核安全工程专业 大学生活即将结束,回顾几年的经历,数学建模竞赛留给我太多的回忆.虽然数模竞赛已经远去,但至今看到听到"三天三夜72小时"时,精神还会为 ...

最新文章

  1. eclipse run as 后边没有java application的选项了?
  2. 【手写系列】写一个迷你版的Tomcat
  3. 《微机原理及接口技术》第03章在线测试
  4. b350主板支持cpu列表_惊!AMD旧主板通过这个方法竟也能支持PCIe4.0
  5. c语言正确理解以下名词及其含义,C程序作业答案.doc
  6. React+Webpack快速上手指南
  7. 面试常备题---JVM加载class文件的原理机制
  8. AD制作gerber文件详细步骤
  9. Android MP4边下边播
  10. 【网络教程】苹果MACCMS10怎样设置伪静态
  11. 二义性调用(Ambiguous Call)
  12. 解决进入WindowsXP系统蓝屏提示“stop:0X0000007B
  13. zabbix 参数 脚本_zabbix 自定义脚本短信报警
  14. 重拾Java基础知识:运算符操作
  15. FTP是什么?FTP工具怎么用呢?
  16. python 支付宝接口_python实现支付宝转账接口
  17. 数据分析--数据分析是什么?
  18. 联想台式修复计算机,联想台式电脑如何一键恢复出厂设置
  19. 武汉mysql ocp考点_MySQL OCP考试复习系列–开篇:了解MySQL考试
  20. 某强人整理央视《家有妙招》不看别后悔

热门文章

  1. win10平板续航测试软件,Win10平板必备工具!触摸屏虚拟鼠标应用推荐
  2. jquery中的各种动画效果
  3. IQE 和 Porotech 合作开发 MicroLED
  4. Electron常见问题 52 - Electron 屏蔽下载保存对话框弹窗
  5. 男人到中年,活得不如一条狗
  6. JAVA基础 网络编程
  7. 【winui3】轻量笔记本应用
  8. 用Python写一个桌面便签(每日计划本)
  9. 联想thinkpad待机怎么唤醒_笔记本睡眠怎么唤醒【步骤介绍】
  10. 如何解决更新windows10后兼容性助手显示Vmware不能在Windows上运行的问题?