学习vi和vim编辑器(6):ex编辑器概述(1)

vi编辑器使用的底层编辑器就是ex行编辑器,可以认为vi编辑器是ex行编辑器的可视化模式。ex可以给你机动性更高,能力更强的编辑命令。ex以行为导向,在对文件做大规模改变时就成了优点。

打开文件:

" ex filename "命令使用ex行编辑器打开文件,它列出来了文件的总行数及命令提示符(:),此时无法看到文件的任何一行,除非下达显示一行或多行的ex命令,如下图所示:

ex命令由行地址(可以只是一个行号)以及相应的命令构成。最基本的命令就是p,代表打印(到屏幕),所以在命令提示符中输入" 1p "代表打印第一行。此时甚至可以省略p,单纯的输入行号等价于显示该行。通过在两个数值间用逗号分隔来指定一个范围的行号,例如" 1,3 "代表第1至第3行。没有行号的命令只会对当前行起作用。

输入" :vi "命令可以从ex编辑器进入vi编辑器,也可以在vi编辑器中输入" Q "进入ex编辑器。想在vi编辑器中使用ex编辑器命令,必须输入特定字符 :(冒号)。在冒号后面输入行号,就可以直接跳转到该行,例如" :6 "等效于vi编辑器中的" 6G "命令,都是将光标移动到第6行。

用ex编辑:

许多负责常见编辑操作的ex命令在vi中都有相应的更简单的命令。但是如果需要改变许多行时,ex命令可能更有用。常见的ex命令有:

全名    缩写   功能

delete  d    删除行

move   m   移动行

copy    co  复制行

t    复制行

行地址:每一个ex编辑命令都需要知道要编辑的行号。指定行地址有如下几种方法:

(1)明确的指定行号;

(2)用符号来指定相对于当前位置的行号;

(3)标识某些行的搜索模式作为地址;

定义行范围:通过行号来清楚地定义某一行或某段行的范围。明确的指定行号也称为绝对行地址。例如

:3,18d 删除3到18行;

:160,224m23 将第160行到第244行移动到第23行之后;

:23,29co100  将第23行到第29行复制到第100行之后;

通过:set nu 或:set number 来显示行号,通过:set nonu或者 :set nonumber来关闭行号的显示。 可以通过#来暂时显示某些行的行号,例如" :1,10# "可以暂时显示第1行到第10行的行号。另外通过如下命令也可以得到行号的信息:

:= 列出文件的总行数;

:.= 列出当前行的行号;

:/pattern/= 列出pattern第一次出现时的行号;

行寻址符号:可以使用符号表示行地址,这些行寻址符号可以和绝对行地址合并使用。

. 表示当前行;

$表示文件的最后一行;

%表示文件的每一行,等同于" 1,$ "的组合;

例如" : . ,$ d "删除当前行到文件结尾间的文本。" :20 , . m $ "将第20行到当前行的文件内容移动到文件结尾。" :%d
"删除文件的所有行。" :%t$ "将所有行复制到文件的结尾(做连续的复制)。

除了指定绝对行地址之外,还可以指定相对于当前这一行的地址。+与-代表加上或减去后面的数值,例如" : . , +20d "删除当前这一行到该行之后20行的文件内容。" :226
, $ m  -2 "将第226行到文件结尾的文件内容移动到当前行的两行之前。数字0表示文件开头,也就是第一行文本之前,所以0等效于1-。

搜索模式:使用搜索模式也可以指定行地址。例如

:/pattern/d 删除下一个包含pattern的行;

:/pattern/+d删除下一个包含pattern的行的下一行;

:/pattern1/,/pattern2/d 从第一个包含pattern1的行删除到第一个包含pattern2的行;

这些模式的前后都要使用斜线作为分界线。

重新定义当前这一行的位置:当用分号代替逗号时,第一个行地址将会作为当前行地址,即使此时光标不在该行上。例如" :100;+5
p " 即可显示第100行及其之后5行的内容。

全局搜索:

ex中有一个全局命令g,可以搜索模式并显示所有包含这个模式的行。而" :g! "的功能则正好与" :g "相反,搜索所有不包含指定模式的行。

:g/pattern 寻找(移到)文件最后一次出现pattern的地方;

:g/pattern/p 寻找并显示文件中所有包含pattern的行;

:g!/pattern/nu 寻找并显示文件中所有不包含pattern的行,同时显示所有找到行的行号;

:60,124g/pattern/p 寻找并显示第60行与第124行之间包含pattern的行。

合并ex命令:

想输入新的ex命令,并不是每次都需要输入冒号,可以使用竖线(|)分隔命令,从而在同一个ex提示符下合并多个命令。

保存并离开文件:

:w  将缓冲区的内容写入到文件中,但不离开。编辑文件时应该经常使用" :w ";

:q  离开编辑器;

:wq 写入文件同时离开编辑器,这是无条件写入,即使文件没有被修改;

:x  写入文件同时离开编辑器。只有文件被修改过时才会写入;

本章vi命令总结:

ex,1p,1,2p,d,m,co,t,:=,:.=,:/pattern/=,.,$,% ,+,-,:/pattern/d,:g,:g!,|,:w,:q,

:wq,:x

时间: 2024-12-25 05:24:45

学习vi和vim编辑器(6):ex编辑器概述(1)的相关文章

学习vi和vim编辑器(16):vim的多窗口功能(1)

vim默认是在一个窗口中编辑所有文件,在文件间移动或者移动到文件的不同部分时只显示一个缓冲区.但vim也提供了多窗口编辑功能,可以简化复合的编辑任务.这篇文章将学习如何在一个运行的vim进程里使用多窗口,包括多窗口编辑工作的初始化与启动,在窗口间移动光标,在显示区中移动窗口等. 启动多窗口编辑: 可以在打开vim时启动多窗口编辑,也可以在编辑会话中分割窗口. 从命令行(shell)启动多窗口: 默认情况下,vim为一个会话只打开一个窗口,即使打开时已经指定多个文件.如果想从命令行中打开多个窗口,

学习vi和vim编辑器(15):vim对vi的主要改进

vim对vi做了大量改进,本章将讨论在vim中添加的主要功能:包括内置帮助功能.启动与初始化选项.新的移动命令.扩展的正则表达式.扩展的撤销.自定义可执行文件等. 内置帮助功能: vim的说明文档超过10万行,几乎所有的说明都可以通过vim内置的帮助工具取得,使用它最简单的形式就是调用" :help "命令.使用内置的帮助功能需要了解vi的导航技巧,知道如何在标签间前进与后退.当光标处于某个标签上时,按下" CTRL+] "前往该标签,按下" CTRL+T

学习vi和vim编辑器(9):全局替换(2)

上一篇文章已经学习了如何通过vi编辑器中" :s "命令进行全局替换,而且可以在替换命令中使用正则表达式以进行强大的模式匹配.这一篇文章将学习模式匹配的更多范例,以进一步熟悉正则表达式. 模式匹配的范例: (1)匹配一个完整的单词:如下图所示,如果需要将文本里所有的child单词替换成为children,可能最先想到的就是下图所示的替换命令: 但是这个命令会把childrendish,Fabrichild这两个单词中的child都做替换,这不是我们想要的.替换的关键就是child要是一

学习vi和vim编辑器(13):vi同类品的功能总览

本章将学习vi同类品提供的相关功能. 它们都是我兄弟: 有许多可以自由取得的vi编辑器同类品.<vi和vim编辑器>重点介绍了vim编辑器,也简要地介绍了另外三种常用的同类品:nvi,elvis,vile.这些同类品都提供了vi之外的许多扩展功能,尽管方式可能不同,但这些同类品通常会提供相同的扩展功能.本篇文章将总体介绍这些同类品提供的扩展功能. 多窗口编辑:可以将屏幕分割成多个"窗口",从而在每个窗口编辑不同的文件,或者观察同一文件的不同部分.这使得同时在多个文件中工作更

学习vi和vim编辑器(11):高级编辑方法(2)

本章学习在vi编辑器中如何保存命令. 保存命令: vi和ex中提供了许多方法来保存一长串命令序列,这样当调用已保存的序列时,只需要输入几个字符即可. 单词缩写: 可以定义缩写,让vi在处于插入模式时替你自动将输入展开成原文.定义缩写的命令为:"  ab abbr phrase ",其中abbr就是给phrase指定的缩写.注意,在插入模式中,只有将缩写当成单个单词输入时,缩写才会被展开,单词内的abbr不会被展开.如下图所示,将"vi"定义为"visual

学习vi和vim编辑器(8):全局替换(1)

本章学习vi编辑器中的全局替换命令.通过全局替换命令,可以自动替换文件中所有出现过的某个单词.全局替换一般会用到两个ex命令:":g"(global),":s"(substitute). 替换命令: 替换命令的语法如下: " :s/old/new/ ",该命令会将当前这一行中第一个出现的old模式替换为new.其中斜线用来分隔命令的各部分(如果斜线位于该命令的最后一个字符,则该斜线可以省略). " :s/old/new/g "

学习vi和vim编辑器(1):vi文本编辑器

UNIX系统中有很多编辑器,可以分为两种类型:行编辑器和全屏编辑器.行编辑器每次只能在屏幕中显示文件的一行,如ed和ex编辑器,全屏编辑器可以在屏幕上显示文件的一部分. vi(读为vee-eye)编辑器是UNIX_Like操作系统的标准文本编辑器.vi是 visual editor的缩写,vi编辑器属于全屏编辑器,可以在阅读文件时当场就修改,并且立刻看到修改后的结果.对于新手而言,vi编辑器难度还是非常大的,但是一旦熟悉了vi编辑器,可能就再也不想重新使用其他"简单"的编辑器了.学习v

学习vi和vim编辑器(12):高级编辑方法(3)

本章主要学习vi编辑器中的@功能,ex脚本以及ctags工具的使用. @功能: 命名缓冲区提供了另一种方法来创建"宏",即可以将复杂的命令序列保存到某个命名缓冲区中,再通过@命令执行缓冲区中的内容.举个例子,首先在插入模式中输入如下一行: 然后将该行内容删除并将其保存到" a "这个命名缓冲区中,之后便可以将光标移动到某个单词的首部,执行" @a ",就可以将缓冲区中的内容作为命令进行执行.在这个例子中就是将该单词修改为function,同时仍然

学习vi和vim编辑器(7):ex编辑器概述(2)

接着上一篇文章,学习ex编辑器. 更改缓冲区名称: 可以使用" :w new_file_name"的方式将当前编辑缓冲区保存为新的文件.这样就可以使得当前的编辑结果得以保存,同时又不修改原来的文件(前提是没有对当前文件进行过保存). 保存一部分文件: 通过使用ex的行寻址命令和写入命令w,可以将文件中的一部分保存为新的文件.例如通过" :20 ,$ w new_file_name "命令将当前文件的第20行到文件的结尾保存为新的文件,文件名为new_file_nam

学习vi和vim编辑器(17):vim的多窗口功能(2)

接着上一篇文章,继续学习vim编辑器的多窗口功能.本篇文章主要学习调整窗口尺寸.缓冲区及其与窗口的交互.分页编辑.关闭与离开窗口. 调整窗口尺寸: 在gvim中,可以使用鼠标调整窗口尺寸,只需要用鼠标点击及拖动窗口边界即可.如果是在vim中,只要开启mouse选型(" :set mouse=a "),也能够用鼠标调整窗口尺寸. 窗口尺寸调整命令: ^W=:试图调整所有窗口至相同尺寸(此命令受当前的winwidth和winheight选项值的影响).如果可用的屏幕块不能平均划分,vim也