关于文本编辑器的一点思考 工作windowsunixlinux生活
程序员文章站
2024-02-22 08:20:16
...
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做了简单说明,工具毕竟只是工具,只要可以完成工作,可以提高工作效率都是可取的,不应该一味的追求工具使用的细节,而应该理解事物的本质,从而真正的驾驭工具而不是被工具驾驭,此为形而上。