Linux--vi简介

文章目录

  • 1、为什么要学习vi
  • 2、vi背景
  • 3、启动和退出vi
  • 4、编辑模式
    • 4.1、进入插入模式
    • 4.2、保存工作
  • 5、移动光标
  • 6、基本编辑
    • 6.1、添加文本
    • 6.2、插入一行
    • 6.3、删除文本
    • 6.4、剪切、复制和粘粘文本
    • 6.5、合并行
  • 7、查找和替换
    • 7.1、行内搜索
    • 7.2、搜索整个文件
    • 7.3、全局搜索和替换
  • 8、编辑多个文件
    • 8.1、切换文件
    • 8.2、载入更多的文件
    • 8.3、文件之间的内容复制
    • 8.4、插入整个文件
  • 9、保存工作

1、为什么要学习vi

现在这个时代存在着很多图形界面编辑器和易用的基于文本的编辑器,例如nano,那为什么还要学习vi?这有三条充分的理由:

  • vi总是可用的。如果用户面前的系统没有图形界面,例如是远程服务器或者是本地系统的X配置不可以,那么vi就会成为救命稻草。尽管nano已经得到了越来越广泛的应用,但是,迄今为止它还不是通用的。而POSIX(一种UNIX系统的程序兼容标准)则要求必须配备有vi。
  • vi是轻量级的软件,运行速度快。对于很多任务来说,启动vi比在菜单中找到一个图形界面编辑器并等待几兆大小的编辑器载入要容易的多。另外,vi的设计还非常利于打字,vi高手在编辑过程中甚至不需要把手指从键盘上移开。
  • 用户不想被其它Linux和UNIX用户蔑视

2、vi背景

1976年,加州大学伯克利分校的学生,之后又成为Sun公司创始人之一的Bill Joy写出了vi的第一个版本。vi出自单词“visual”,含义是能够在视频终端上用移动光标来进行编辑。在图形界面编辑器出现之前是行编辑器的天下,用户每次只能在一行文本上进行编辑。使用行编辑器的时候,用户需要告知编辑器是在哪一行进行什么样的操作,比如添加或者删除。而视频终端(而非基于打印机的终端,比如电报)的来临使得全屏幕编辑成为可能。由于vi融合了强大的行编辑器ex,vi用户也可以同时使用行编辑的命令。
大多数Linux发现版配备的并不是真正的vi,而是Bram Moolenaar编写的vi加强版–vim(Vi Improved的缩写)。vim是传统UNIX系统中vi的实质性改良版。通常,vim的硬链接(或别名)指向Linux系统的vi名称。

3、启动和退出vi

输入以下命令启动vi:
在这里插入图片描述
屏幕显示如下:
在这里插入图片描述
像操作nano一样,应该先学习怎么退出vi,输入如下命令退出vi(需要注意的是,冒号是命令的一部分)。

:q

此时shell会返回初始的操作窗口。如果因为一些原因,vi不能够退出(通常是因为没有保存修改过的文件),可以通过在命令后添加感叹号的方式强制退出vi。

:q!

注意:如果用户不能确定vi所处的状态,可以按Esc键两次返回初始状态。

4、编辑模式

再次启动vi,并向其传递一个不存在的文件名,就可以通过vi创建新文件。
在这里插入图片描述
正常情况下,屏幕显示如下所示:
在这里插入图片描述
每行你开头的波浪线代表此行没有任何内容,也就是说现在foo.txt是空白的文件。先不要输入任何内容!
讲解过如何退出vi之后,接下来需要了解的就是vi是一个模态编辑器。vi启动后进入的是命令模式。在命令模式下,几乎键盘上的每一个案件都代表一条命令,所以在此时对vi进行普通输入的话,vi基本上就要崩溃了,并且会把文件弄得一团糟。

4.1、进入插入模式

如果用户需要向文件中添加一些内容,那么首先要做的就是按I键(或i)进入插入模式。若此时vim是在增强模式下正常的运行,那么在黑屏幕底部会出现以下内容(若vim以兼容模式运行,则不会出现);
在这里插入图片描述
现在用户可以进行输入操作了,例如:
在这里插入图片描述
最后按ESC键退出插入模式并返回命令模式。

4.2、保存工作

要保存用户修改过的文件,在命令模式下输入一条ex命令,也就是按:键。这样只会,一个冒号会出现在屏幕的底部:
在这里插入图片描述
要将文件写入硬盘,在冒号之后输入w,如下所示:
在这里插入图片描述
文件写入硬盘驱动器之后,用户会在屏幕底部得到一条确认信息。
在这里插入图片描述

注意:如果用户阅读vim的说明文档,会困惑的发现命令模式被称为普通模式,而使用ex命令则被称为命令模式。

5、移动光标

在命令模式下,vi提供了很多移动光标的命令,其中一些命令是与less命令共用的。

光标移动功能键

光标移位
l或右方向键右移一位
h或左方向键左移一位
j或下方向键下移一行
k或上方向键上移一行
数字0至本行开头
Shift-6(^)至本行第一个非空字符
Shift-4($)至本行行尾
W至下一单词或标点的开头
Shift-W(W)至下一单词的开头,忽略标点
B至下一单词或标点的开头
Shift-B(B)至上一单词的开头,忽略标点
Ctrl-F或Page Down下翻一页
Ctrl-B或Page Up上翻一页
number-Shift-G至第number行(如1G会将光标移到文件的第一行)
Shift-G(G)至文件的最后一行
为什么使用h、j、k、l键来移动光标呢?这是因为最初出现的阶端,并不是所有的视频终端都有方向键,这样的设计使得vi高手可以手不离键盘地移动光标。
G命令一样,许多vi的命令的前面都可以缀上数字,前缀数字可以控制命令执行的次数,比如5j可以使得光标下移5行。

6、基本编辑

插入、删除、剪切、复制等构成了基本的文件编辑操作,vi也以其特殊的方式支持这些操作。同时vi还支持有限形式的撤销操作,在命令模式下按U键就可以撤销用户最后一步操作。这项功能在学习一些编辑命令的时候会很有帮助。

6.1、添加文本

有几种方式都可以进入vi的插入模式。因为光标不能跳出行末,所以单纯使用i命令不能完成在文本末尾添加内容的任务。为此vi提供了在行末添加文本的a命令。当用户将光标移动到行的末尾并使用a命令时,光标就会越过文本的末尾,同时vi进入插入模式。这样用户就可以在行末添加文本了。
因为用户经常用到在行末添加文本的功能,所以vi提供了使光标移动到行末并进入插入模式的快捷方式-----A命令。

6.2、插入一行

插入文本的另一种方式式在文本中重开一行,即在两行现存的文字中间插入空白行并进入插入模式。

插入一行功能键

命令开行
o当前行的上方
O当前行的下方

6.3、删除文本

就像用户期望的那样,vi提供了很多删除文本的方式,每一种都需要进行一次至两次的按键操作。首先X键会删除光标处的字符。x命令可加以数字前缀来明确删除的字符数目。D键则使用得更加普遍。像x命令一样,d命令也可加数字前缀来明确删除的次数。另外,d命令总是加以控制删除范围的光标移动命令作为后缀

文本删除命令

命令删除内容
x当前字符
3x当前字符和之后的2个字符
dd当前行
5dd当前行和之后的4行
dW当前字符当下一单词的起始
d$当前字符到当前行的末尾
d0当前字符到当前行的起始
d^当前字符到当前行的下一个非空字符
dG当前行到文件末尾
d20G当前行到文件第20行

6.4、剪切、复制和粘粘文本

命令d不只是删除文本,而是在“剪切”文本。用户每次使用d命令之后,都会复制删除的内容进缓存(类似剪切板),然后用户就可以使用p命令将缓存中的内容粘贴到光标之后或使用p命令将内容粘贴到光标之前。
就像命令d剪切文本的形式一样,命令y会“复制”文本。

复制命令

命令复制内容
yy当前行
5yy当前行和之后的4行
yW当前字符到下一单词的起始
y$当前字符到当前行的末尾
y0当前字符到当前行的起始
y^当前字符到当前行下一个非空字符
yG当前行到文件末尾
y20G当前行到文件第20行

6.5、合并行

vi在行的概念上非常严格。通常来说,将光标移动到行的末端并删除行的末尾字符并不能将此行与下一行合并。因此,vi专门提供了J命令(不要与移动光标的j命令混淆)来合并行。

7、查找和替换

vi提供了在一行或者整个文件中,根据搜索条件将光标移动至指定位置的功能。vi还可以执行文本替换工作,用户可指定替换时是否需要用户确认。

7.1、行内搜索

命令f在行内进行搜索,并将光标移至搜索到的下一个指定字符。比如,命令fa就会将光标移动到本行下一处出现a的地方。在执行过一次行内搜索之后,输入分号可以使vi重复上一次搜索。

输入f命令后,屏幕右下角有出现一个f,f命令后面只能跟一个字符

7.2、搜索整个文件

与less程序一样,命令/可以完成对单词或者短语的搜索。当用户使用/命令后,一个/符号会出现在屏幕的底部。接下来,输入需要搜索的单词或短语,以Enter结束。光标就会移动到下一处包含被搜索字符串的地方。使用n命令可以重复此搜索。
在这里插入图片描述
输入Enter以结束,接下来输入n,光标将继续移动至下一个搜索位置,直到光标移动到文档的最后,且找不到符合条件的字符串。

7.3、全局搜索和替换

vi使用ex命令来执行几行之内或者整个文件中的搜索和替换操作。输入以下命令可将文件中的Line替换为line。

:%s/Line/line/g

全局搜索和替换语法范例

组成含义
:分号用于启动一条ex命令
%确定了操作作用的范围。%简洁的代表了从文件的第1行到最后1行。本命令的范围还可以表示为1,$,意思是“第1行到文件的最后1行”,如果不明确指出命令的作用范围,那么命令只会在当前行生效
s指定了具体的操作–本次是替换操作(搜索和替换)
/Line/line搜索和替换的文本
g代指global(全局),也就是说对搜索到的每一行的每一个实例进行替换。如果g缺失,那么只替换每一行第一个符合条件的实例
在命令末尾添加c,则命令在每次替换之前哦都会请求用户确认,如下所示:
:%s/line/Line/gc

此命令将会将文件替换回原来的样子,但是在每次替换前,vi都会停下来询问用户是否确认执行替换。

replace with Line (y/n/a/q/l/^E/^Y)?

圆括号中的每一个字符都是一种可能的回答,具体含义见下表:

功能键行为
y执行替换
n跳过此次替换
a执行此次替换和之后的所有替换
q或者ESC停止替换
l执行此次替换并退出替换。是last的缩写
Ctrl-E,Ctrl-Y分别是向下滚动和向上滚动,能用于查看替换处的上下文

8、编辑多个文件

用户经常遇到需要同时编辑多个文件的情况。可能是需要对多个文件作出修改,或者是拷贝文件的部分内容到另一文件。用户可以通过在命令行具体指定多个文件的方式使得vi打开多个文件。

vi file1 file2 file3...

在这里插入图片描述
vi启动后,屏幕显示内容如下所示:
在这里插入图片描述

8.1、切换文件

使用以下ex命令来从一个文件切换到下一个文件。

:n

切换回上一个文件

:N

当用户从一个文件切换到另一个的时候,vi要求用户必须先保存对当前文件做出的修改切换到其它文件。若要放弃对文件的修改并使vi强制切换到另一个文件,则可以在命令后添加感叹号(!)。
除了以上描述的切换方法之外,vim(和一些版本的vi)还提供了一些ex命令让用户可以更轻松地编辑多个文本。用户可以使用:buffers命令来查看正在编辑的文件列表。
在这里插入图片描述
输入:buffers加文件编号可切换到另一个文件。如从文件1(foo.txt)切换到文件2(ls-output.txt),用户应当输入如下命令。

:buffer 2

8.2、载入更多的文件

我们也可以在现有的编辑会话中载入更多的文件。使用ex命令:e(edit的缩写)加文件名可以载入另一个文件。先退出现有的编辑会话并回到命令行模式。
在这里插入图片描述
在这里插入图片描述

:e ls-output.txt

在这里插入图片描述

注意:使用:ez载入的文件不会响应:n或者:N命令,而需使用:buffer加文件编号来切换文件

8.3、文件之间的内容复制

用户在编辑多个文件的过程中,有时会需要将一个文件中的一部分复制到另一个文件中。使用之前使用过的复制和粘贴命令即可完成此功能。

8.4、插入整个文件

用户还可以将一个文件完全插入正在编辑的文件中。为了实际演示这项功能,先结束现有的vi会话并重启vi的同时只打开一个文件。
在这里插入图片描述
屏幕将再次显示一份文件列表
在这里插入图片描述
将光标移动带第三行,并深入如下ex命令

:r foo.txt

命令:r(read的缩写)将指定的文件内容插入到光标位置之前。现在的屏幕显示如下所示:
在这里插入图片描述

9、保存工作

就像其他功能一样,vi提供了很多方式来保存编辑过的文件。除了前面介绍的ex命令:w,还要一些其他可用的方法。
在命令模式下,输入ZZ将保存当前文档并退出vi。同样的,ex命令:wq组合了:w:q这两个命令的功能,能够保存文件并退出vi。
当命令:w指定一个随意的文件名时,命令的功能就类似于“另存为”。例如,用户在编辑foo.txt的时候想要将其另存为foo1.txt,那么久可以输入如下内容:

:w foo1.txt

注意:此命令在以新名称保存文件的同时,并不更改编辑中的原文件的名称。当用户继续编辑时,编辑的还是foo.txt而不是foo1.txt。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部