| show | step |
|---|---|
| version | 1.0 |
| enable_checker | true |
- 我们这次研究了
mark的定义和使用mb定义'b跳转- 可以对
marks,查询删除
- 三种
marks- 小写 本文件内
- 大写 跨文件
- 数字 配置文件中
- 甚至可以在行编辑中,使用标记
'a,'by从标记a的行复制到标记b的行'a,'bt.把从a到b的行复制到当前位置'a,'bm$把从a到b的行移动到文档最后
- 行编辑模式可真是太方便了!
- 可是,你知道吗?
- 行编辑模式来自于ed
- 是当时的无奈之举?
- 怎么回事?🤔
- 我们从时间线捋回去,会发现vi进化过程沿着
- ed->ex->vi->vim
- 最早来自于贝尔实验室的
Ken Tompson
- 1966 年,贝尔实验室聘用了
Ken Thompson Thompson刚刚在加州大学伯克利分校完成了电气工程和计算机科学的硕士学位在伯克利他使用一个名为QED的文本编辑器- 该编辑器在 1965 到 1966 年间被开发用于伯克利分时系统
Thompson到达贝尔实验室后做的第一件事就是为麻省理工学院兼容分时系统重写QED- 他后来又为
Multics项目写了另一个版本的QED - 在重写过程中,他对程序进行了扩展
- 以便用户可以在文件中搜索某一行,并使用正则表达式进行替换。
- 与伯克利的分时系统一样
- 由麻省理工学院、通用电气和贝尔实验室合作的
Multics项目试图创建一个可行的商业分时操作系统 - 最终,
AT&T认为这个项目毫无进展并退出
- 由麻省理工学院、通用电气和贝尔实验室合作的
- 在没有分时系统的情况下
Thompson和贝尔实验室资深研究员Dennis Ritchie- 开始怀念分时系统所提供的“交互式计算的感觉”
- 并着手创建他们自己的版本
- 该版本最终发展成为
Unix。1969 年 8 月
- 在妻子和幼子外出去加州度假时
Thompson“给操作系统、shell、编辑器和汇编程序分别分配了一个星期”- 将新系统的基本组件组合在一起
- 这个编辑器被称为
ed- 它是基于
QED的,但并不完全是QED的复现 Thompson决定放弃某些QED的功能- 弱化了对常规的表达式的支持
- 因此 ed 只能理解相对简单的正则表达式
- 它是基于
QED允许用户打开多个缓冲区同时编辑多个文件- 但是
ed一次只使用一个缓冲区 QED可以执行包含命令的缓冲区- 而
ed则不能。这些简化可能是必要的 Dennis Ritchie曾说过- 去掉
QED的高级正则表达式是“并不大的损失”
- 但是
ed现在是POSIX规范的一部分- 所以如果你有一个符合
POSIX的系统 - 你的电脑上就安装了
ed - 现在,许多
ed命令都是Vim的一部分 - 因此,这就值得摆弄一番了
- 你必须使用
w命令来写入磁盘缓冲区 - 必须使用
q命令来退出编辑器
- 这两个命令可以写在同一行命令中,也就是
wq ed与Vim一样- 是一个模态编辑器
- 若要从命令模式进入输入模式
- 取决于你试图如何转换文本
- 需使用
insert 命令(i)、append 命令(a)或 change 命令(c) ed还引入了s/foo/bar/g语法来查找和替换文本
ed名字来自于editor编辑器ed不允许你编辑开放缓冲区中那些被其他行围绕的行- 也不允许移动光标
- 因为
ed在每次修改的时候都必须重新打印整个文件
- 在 1969 年
ed没有任何机制来“清除”屏幕上的内容- 因为”屏幕“就是一张纸
- 所有已经输出的东西都像是已经用墨水打印出来了
- 可以使用列表命令(l)要求
ed - 打印出一系列的行,但是大多数时候,你都是在你看不到的文本上操作
- 因此,使用
ed就像是尝试用一个低电量的手电筒在黑暗房间中摸索 - 每次你只能看到那么一点儿,所以必须尽最大努力去记住每件东西的位置
- 可以
sudo apt install ed - 来装一下
vi的老祖宗ls -lah > oeasy.txted oeasy.txt1显示第1行2,5p,显示2到5行- 我们能感觉到显示器其实是一张纸
- 这个
4,6p命令在vi也能用,含义是print - 8s/oeasy/o2z/
- w保存
- q退出
- 对
Thompson和Ritchie来说,ed已经足够好了 - 但是其他人则认为它很难用
- 而且它作为一个淋漓尽致地表现
Unix对新手敌意的例子而臭名昭著 - 在 1975 年
- 一个名叫
George Coulouris的人` - 这位前辈很神奇,他的爸爸是英国演员,出演过公民凯恩
- 在伦敦玛丽皇后学院的
Unix系统上开发了一个改进版ed Coulouris利用他在玛丽女王学院的视频显示器开发他的编辑器
- 一个名叫
- 与
ed不同的是Coulouris的程序允许用户编辑在屏幕中的一行代码- 通过一次次击键的方式来操作行(想象一下在
Vim中每次编辑一行) Thompson拜访玛丽女王学院时,看到Coulouris已经写好的程序- 驳斥道他不需要在编辑文件的时候看到它的状态
- 受此启发,
Coulouris将他的程序命名为em - 或者“为凡人而生的编辑器”
the editor for mortals,这也是em名字来源。
(George Coulouris)
- 1976年
Coulouris把em引入了加州大学伯克利分校- 在那里他用了一个夏天的时间在
CS系访学 - 这是
Ken Thompson离开伯克利去贝尔实验室工作十年之后的事了
- 在伯克利,
Coulouris遇到了Bill Joy- 一名研究生。
Coulouris斯向Joy展示了em
- 一名研究生。
Joy以Coulouris的源代码为基础- 为扩展
ed建立了一个名为ex的改进版ed - 1978年,1.1 版本的
ex与第 1 个版本的BSD Unix捆绑在一起 ex在很大程度上与 ed兼容
- 为扩展
- 我们今天也管底行命令模式叫做
- ex command-line Mode
- 但它增加了两种模式
- “开放”模式
- 这种模式可以使 em 单行编辑成为可能
- “可见”模式
- 这种模式会占据整个屏幕
- 并且可以像我们今天所习惯的那样
- 对整个文件进行实时编辑
- “开放”模式
(Bill Joy)
- ex遗留到vim的中特性包括
- 当然hjkl是最基本的
- .exrc进行runcommand配置
- undo撤销虽然只有一层
- 可以使用swap备份文件
- 可以执行寄存器中的命令
- 可以递归的映射
- 甚至那个时候可以用vim玩迷宫
- 用映射去进行移动
- 1979 年
- 第 2 版 BSD 引入了一个名为
vi的可执行文件 - 它只在可视模式下打开
ex vi名字来自于visual可视模式
- 第 2 版 BSD 引入了一个名为
ex/vi(后来称为vi)建立了我们现在使用的Vim中大多数的约定- 但这些约定当时并不是
ed的一部分 - Bill Joy 使用的视频终端是
Lear Siegler ADM-3A- 它的键盘没有光标键。而是,
h、j、k 和 l键上绘制光标键 - 所以 Bill Joy 在vi 中就使用这些键来进行光标移动
ADM-3A键盘上escape键位置是今天我们所使用的键盘上的tab键
- 它的键盘没有光标键。而是,
- 这也就解释了
esc虽然很远 - 但是会被用来实现像退出当前模式这样高频的操作
- 前缀命令的 :字符同样也来自 vi
- 它在常规模式下(即运行 ex 进入的模式)使用 : 作为提示
- 这解决了一个
ed中被长期诟病的问题 - 也就是一旦启动之后
- 没有任何反馈信息向用户致以问候
- 在正常模式下
- 保存和退出需要使用现在仍在使用的经典
wq
- 保存和退出需要使用现在仍在使用的经典
- 原始
vi部分还包括yanking和putting标记marker- 以及用于设置选项的
set命令
- 今天在
Vim中使用的的基本文本编辑过程- 都是
vi中使用的特性
- 都是
vi是除ed之外唯一与BSD Unix捆绑的文本编辑器Emacs可能会花费数百美元- 这是在
GNU Emacs之前 - 所以
vi变得非常流行
- 但
vi是ed的直接衍生版本- 这意味着如果没有
AT&T的源代码 - 源代码就不能被修改
- 这意味着如果没有
- 这促使一些人创建了
vi的开源版本STEVIE(专门为VI爱好者的ST编辑器)出现于1987年Elvis出现于 1990 年nvi出现于 1994 年- 微软dos上也有了类似的东西
- 行编辑器edlin
- 全屏编辑器edit
- 其中一些克隆版本添加了额外的功能
- 如语法高亮和窗口分离
- 众多克隆中比较出色的是
Elvis- 它的许多功能被整合到
Vim中 - 因为许多
Elvis用户推动了这些功能的加入 - minix之父Andrew Tanenbaum 甚至把Evlis列为minix默认编辑器
- 它的许多功能被整合到
- GUI变得开始流行
- 但是也有人给
Elvis加了一个图形用户界面 - 然后就当商业软件来卖
- 这些人没有写
Elvis却挣了很多钱 - 而
Elvis无法得到相应的资源和回馈
- 但是也有人给
- 我们这次研究
ed的历史 - 为什么会有行编辑器这种东西
- 竟然是当年
- 没有显示器只有纸的时代的无奈之举
vim进化到今天- 依然好用
- 而且
ssh的时候直接vim就很方便
- 命令行还有什么好玩的么?🤔
- 下次再说 👋