Vim实战指南(四):ex命令

原文地址:Vim实战指南(四):ex命令缓存

Introduction

ex是Unix下的一个文本编辑器。至于为何忽然讲到这个,那是由于vi就是ex的"visual mode"。
你已经见过vi中的":w", ":q!",没错,这些就是来自于ex命令。
ex命令远不止这些,实际上全部":"开头的命令,也就是你在vi最下面看到的命令行,都属于ex命令。
接下来我要详细的介绍一下,ex命令的用法。编辑器

ex简介

首先咱们打开ex:工具

$ ex file
"file" 3L, 16C
Entering Ex mode.  Type "visual" to go to Normal mode.

输入1,3,屏幕上将显示1-3行的内容。
试着输入"visual"或者"vi",是否是回到了熟悉的vi界面?
想要使用ex,输入":",是否是在最下面看到了ex命令行?
ex到底是什么东西?事实上这和历史有关,在早期,显示器并不像如今这么好用,那会的“显示器”只有按行显示的功能。当你但愿显示某行,输入命令,“显示器”上才会显示那行。试着想一想一个不支持上下左右滚动的界面。
而控制这个“显示器”显示文本的命令行工具,就是ex。命令行

ex vs vi

为何咱们有了vi还要使用ex?由于对于大段文本的操做,ex命令比vi命令行模式(command mode)更方便。
ex的命令都是基于行的(早期的“显示器”,或者你的小型计算器,除了行列什么都没有了),如:3d

:3:显示第三行
:3,5:显示第3到5行
:3s/hello/hi:将第三行的hello替换成hi,这里s是substitute的缩写code

而在vi命令行模式下,你只须要简单的:orm

3Gip

可是对于删除3-6行,ex命令只须要:get

:3,6d:这里d是delete的缩写it

而在vi命令行模式下,你须要:

3G
3dd:这里你还须要计算6-3=3

另一个例子,将3-6行放到14行的后面,ex命令只须要:

:3,6m14

而在vi命令行模式下,你须要:

3G
3dd
14G
pp

ex的优点就体如今这里。

ex行

上面咱们见过,ex命令都是基于行的,而得到行号有下面几种方法:

3:直接输入行号
3-6:行范围
.:当前行
/pattern/:知足pattern的第一行
$:最后一行
%:每一行

你能够组合这些,如:

:3,$d:删除3行到最后一行
:%d:删掉每一行

你也能够:

:.,.+3d:删除当前行及后面3行
:/pattern/d:删除包含pattern的第一行
:/pattern1/,/pattern2/d:删除从pattern1到pattern2的行

搜索

在vi中,使用/进行搜索,是否是以为每次使用n/N来查找下一个太慢了?试试ex吧:

:g/pattern/nu

是否是全部包含pattern的行以及行号都打印出来了?这里g的意思是global,全文的意思,nu是number,行号的意思。
你也能够把g换成3,6之类的,只在3-6行中搜索。

批处理

在ex中,也能够用"|"来批处理多条命令,如:

3,6d | g/csprojectedu/nu:删除3-6行后,打印全部包含csprojectedu的行。

保存和退出文件

Vim实战指南(一):基础编辑命令中,咱们介绍过保存和退出文件的方法,实际上:

ZZ:是vi命令行模式下的命令
:q:ex命令,退出文件,若是有未保存的修改则没法退出
:q!:ex命令:强制退出
:x:ex命令,保存和退出文件
:w:ex命令,保存文件
:w!:ex命令,强制保存
:w another:将文件另存为文件another
:3,6w another:将3-6行另存为文件another(编辑神器)
:9,13w >>another:将9-13行追加到文件another后面(编辑神器2)
:r another2:将another2文件的内容追到到当前文件光标后(编辑神器3)
:3r /home/user/another3:将/home/user/another3文件的内容追到到当前文件第3行后(编辑神器4)

编辑神器1-4,是否是很方便?

多文件处理

vi支持多文件处理,同时处理多文件不只节省你屡次打开和退出vi的时间,也可让你反复利用vi的缓存区,关于缓存区的说明见Vim实战指南(三):高级技巧
首先在命令行打开多个文件:

$ vi filename1 filename2

首先打开filename1,你能够经过ex的命令来切换:

:n:切换到下一个文件
:N:切换到上一个文件
:args:显示全部文件
:rewind/:rew:跳到第一个文件
:last:跳到最后一个文件

记住,缓存区是公用的,你能够将filename1中选择的内容,经过缓存区拷贝到filename2中。

Summary

掌握ex命令后,是否是发现vi愈来愈好用了?别着急,更强大更好用的ex命令还在后面。

相关文章
相关标签/搜索