Vim技能修炼教程(6) - 行编辑器
在很久很久以前,计算机的运算能力还很弱,终端与主机的通信也不好。在没有显示器的时代,只能通过电传打字机跟主机通信。那时候只有行编辑器,编辑的时候只能在一行中进行。需要显示哪一行,就把哪一行或者哪几行打印出来看。
Unix上使用的行编辑器是ed. 这个编辑器至今仍然在Unix/Linux/FreeBSD各系统中存在。
ed的增强版是ex. ex最大增强之处就是提供了可以全屏编辑的模式。在ex中输入:visual命令,就会切换到全屏编辑模式。好吧,这就是vi。Vi本质上就是ex编辑器的visual模式。在Linux中,ex被链接到vim上。
ex命令的最直观特点就是以冒号开头,比如我们熟悉的:q命令。
行编辑器虽然不流行已经很久了,但是ex做为vi的另一种模式,至今仍然发挥着作用。
基本上vim所有的编辑功能都提供了相应的ex命令。通过:help ex-cmd-index可以查看到这些ex命令的列表。我们写vimscript使用的功能,基本上都是ex命令。包括程序流程控制所用的:if命令,模拟正常模式下输入的:normal命令等。
ex命令
前面讲了这么多历史沉钩,是希望大家能够切换一下思路。即使是在vi模式下执行ex命令,它们仍然是行编辑器的模式。也就是默认的大部分命令只对当前行有效,如果想要跨行,必须指定行号。
ex命令的一般模式是:[行地址]命令
行地址有三种指定的方法:
* 直接指定行号:
* 1表示第一行
* 3,5表示第3行到第5行
* 采用特殊变量表示
* .点号表示当前行
* $表示最后一行
* %表示每一行
* +n, 当前行开始向前数第n行,n省略则为1
* -n, 当前行向后数第n行,n省略则为1
* 利用搜索来定位行 /
复制粘贴命令
- :delete: 简写为:d,例:1,10d: 删除前10行
- :move: 简写为:m,例:1m10,第1行移动到第10行
- :copy: 简写为:t或:co。
例:将本行和上下两行一起复制到整个文件之前
:-,+t0
获取行号的命令
- := 列出文件的总行数
- :.= 当前行的行号
- :/搜索字符串/= 查找搜索字符串出现的第一次的行号
文件操作
文件操作跟文本无关,visual模式不再有优势,这时ex命令反而成为主力了。
- :w 缓冲区写到文件
- :q 退出vi
- :wq 写文件并退出
- :x 如果修改过则写文件并退出
- :r 文件名,将文件读入光标开始的位置
- :e 文件我,读入新文件
- C-^: 在多个文件间切换
:w命令支持文件名做为参数。
:w命令还支持将部分行写入到文件,也可以添加到文件尾。
例:将当前行开始的10行写入test.txt中:
:.,+9w test.txt
行编辑命令本身的编辑
这一节要说的是对于写命令的时候,vim或者说ex能够提供的帮助。
- C-w : 删除至单词开头
- C-v : 删除至行首
- C-r{寄存器} : 将寄存器的内容粘贴到命令行
行编辑命令的自动补全
在vi模式下,ex命令可以用tab键进行自动补全。也可以通过Ctrl-d命令列出所有的可选项。
运行外部命令
Vim有时候需要调用外部命令来实现任务。
- :!{命令}:执行命令
- :read !{命令}:执行命令,并把返回结果读入缓冲区
- :shell: 启动一个shell来执行外部命令
最新文章
- JavaWeb 命名规则
- JS-window对象集合
- 整理 iOS 9 适配中出现的坑(图文)(转)
- C 关于二叉查找树的回顾,并简述结构接口设计
- iis7负载均衡
- 关于document.write
- Zookeeper单机版安装(CentOS 7环境下)
- dpkg -P xx
- 本地phpstudy时常停机连接失败,php.ini文件中9000端口问题
- mysql sql语句执行时是否使用索引检查方法
- pow()函数结果强制转化为int造成误差的分析
- [iOS11] contentInsetAdjustmentBehavior 问题, push back时, 界面会上下移动.
- swoole框架和其所涉及的协议
- JEECG3.8 全套实战视频全部开放,免费下载!
- mysql load_file在数据库注入中使用
- understand 在windows 以及 unbuntu 下的安装
- 实现用 jquery 禁用浏览器的前进后退按钮
- Tcp连接的七次握手浅析
- Pipeline和FeatureUnion
- mysql grant权限总结