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来执行外部命令
Vim技能修炼教程(6) - 行编辑器的更多相关文章
- Vim技能修炼教程(2) - 语法高亮速成
语法高亮速成 我们继续在人间修行Vim技能之旅.上一次我们学习了如何通过vundle安装插件,这次我们迅速向写插件的方向挺进. 我们先学习一个最简单的语法高亮插件的写法. 语法高亮基本上是由三部分组成 ...
- Vim技能修炼教程(10) - 代码跳转
程序员功能 前面我们用了5讲的篇幅来讲基本编辑的基本功:第4讲是基本操作,第5讲是操作符,第6讲行编辑ex命令,第7讲可视模式,第8讲多窗口,第9讲缓冲区和标签页. 从这一讲开始,我们从通用功能向程序 ...
- Vim技能修炼教程(7) - 可视模式
可视模式 可视模式是与正常模式.插入模式一起并列的模式.它的作用就像图形化编辑器下用鼠标来选择一个块. 在vim下,使用正常模式和ex命令,连搜带跳行的,未必就比用鼠标慢. 我们先做一个例子找找感觉, ...
- Vim技能修炼教程(4) - 基本功
基本功 前面我们学会了插件管理器和如何实现语法高亮,相信大家已经从中体会到了vim插件的强大功能.现在,是时候回来补一补基本功了. Vi有三种主要模式,正常模式,插入模式和可视化模式.正常我们推荐的方 ...
- Vim技能修炼教程(1) - 使用vundle管理插件
世界上有两个伟大的编辑器:一个是emacs,一个是vi.它们从诞生以来,一直在Unix/Linux世界得到最广泛的支持. 尽管过了几十年,在Windows平台上和跨平台上有层出不穷的后起之秀不断挑战它 ...
- Vim技能修炼教程(14) - 写个ex命令吧
写个ex命令吧 我们第二节开始就写了语法高亮的插件.这一节,我们学习第二种插件的写法,就是写个我们自己的ex命令. 自定义ex命令的命令是:command,我们在~/.vim/下建立一个plugin目 ...
- Vim技能修炼教程(12) - Vim的脚本语言支持
Vim的脚本语言支持 本节开始,我们正式接触vimscript这门古老的脚本语言. 首先要说明,vim支持的扩展语言很多,比如python, python3, ruby, lua,tcl等常见脚本语言 ...
- Vim技能修炼教程(11) - 代码折叠
上一讲我们是程序员篇的第一讲,关于代码跳转.代码跳转是一个付出很少收获很大的功能.这一节我们开始一个收获很多,但是付出也相对多一点功能:代码折叠. 代码折叠 折叠的类型 折叠有下面几种类型: * Ma ...
- Vim技能修炼教程(8) - 多窗口
多窗口 如果一个vim只能开一个窗口,那肯定是有点low.尤其是写代码的时候,打开多个文件是经常的需求. 速成教程 横着切成两个 :split 文件名 上下切换窗口 Ctrl-W加上上下键,可以实现上 ...
随机推荐
- 20145324 Java实验二
实验1: 先建立.java 在建立test 测试正常情况 测试出错情况 错误 修改后的代码 正确 测试边界情况 100时出错 修改后的代码 测试 实验2: 先建test在写,java 实验3:建模 练 ...
- C++ 单词接龙
问题描述: 拉姆刚刚开始学习英文字母,对单词排序很感兴趣,他能够迅速确定是否可以将这些单词排列在一个列表中,使得该列表中任何单词的首字母与前一个单词的尾字母相同,力能编写一个计算机程序帮助拉姆进行判断 ...
- PHP闭包 function() use(){}
php的闭包(Closure)也就是匿名函数.是PHP5.3引入的. 闭包的语法很简单,需要注意的关键字就只有use,use意思是连接闭包和外界变量. $a =function()use($b) { ...
- 使用httpclient提交表单数据加号(+)会被自动替换成空格的坑
坑的场景: 今天使用httpclient-4.5.3版本,发送如下报文: { "idNo": "7+6+0+2ce722a546b39463bd62817fe57f8&q ...
- PHP5.6版本安装redis扩展
一.php安装redis扩展 1.使用phpinfo()函数查看PHP的版本信息,这会决定扩展文件版本 2.根据PHP版本号,编译器版本号和CPU架构, 选择php_redis-2.2 ...
- 使用HandleErrorAttribute处理异常
ASP.NET MVC 默认提供了一个异常过滤器HandleError特性,使用该特性可以极为方便的捕捉并处理控制器和操作抛出的异常,也可以将此特性注册为全局异常过滤器从而捕捉项目中的所有异常.如果想 ...
- linq 多条件join
var query=from a in db.A join b in db.B.Where(c=>c.num>3) on new {a.type ...
- 常见ADB命令
常见ADB命令 比如说知道了push和pull操作,就可以实现一个简单的手机助手. 如果有多台设备,操作的时候要指定设备. -s加设备名称
- 【程序员笔试面试必会——排序②】Python实现 计数排序、基数排序
一.计数排序 概要: 时间复杂度O(n),空间复杂度O(k),k是输入序列的值的范围(最大值-最小值),是稳定的.计数排序一般用于已知输入值的范围相对较小,比如给公司员工的身高体重信息排序. 思路: ...
- Oracle 冷备份详解【实战案例】
Oracle 冷备份详解 --准备工作 select * from v$database; select file_name from dba_data_files; create tablespac ...