Linux之VI命令行

一、背景介绍

vi 这个名字 来源于单词“visual”,因为它打算在带有可移动光标的视频终端上编辑文本。在发明可视化编辑器之前, 有一次只能操作一行文本的行编辑器。为了指定一个修改,我们告诉行编辑器到一个特殊行并且说明做什么修改,比方说添加或删除文本。视频终端(而不是基于打印机的终端,像电传打印机)的出现 ,可视化编辑成为可能。vi 实际上整合了一个强大的叫做 ex 行编辑器, 所以我们在使用 vi 时能运行行编辑命令。

二、为什么我们应该学习 vi?

只有一个理由,全程键盘操作,摆脱图形界面的繁琐,摆脱鼠标的束缚 !!!

三、启动和停止VI

3.1、要想启动 vi,只要简单地输入以下命令:

启动vi

3.1.2 启动vi的显示界面如下

启动vi后的显示界面

3.1.3 退出vi 输入 :q (注意 冒号是命令的一部分)

退出vi

3.1.4 如果由于某种原因,vi 不能退出(通常因为我们对文件做了修改,却没有保存文件)。 通过给命令加上叹号,我们可以告诉 vi 我们真要退出 vi。这叫强制退出。

q后面加了一个感叹号表强制退出

四、编辑模式

4.1、启动 vi,这次传递给 vi 一个不存在的文件名。这也是用 vi 创建新文件的方法。

vi创建新文件

4.2、 使用 vi vi_test.txt命令后 ,按下enter键 进入vi_test.txt文件

进入文件

五、插入模式

为了在文件中添加文本,首先我们必须进入插入模式。按下 ”i” 按键进入插入模式。之后,我们应该 在屏幕底部看到下面一行,如果 vi 运行在高级模式下(这不会出现在 vi 兼容模式下):

按下i键后 出现INSERT表示进入插入模式

5.1、进入插入模式之后,现在我们尝试输入文本

输入文本

5.2、保存文本,首先要按下Esc退出插入模式。然后按下 :w 表示保存 。记住不要忽略了冒号。当然你可以直接按下 :wq 表示保存并且退出。

编辑完文件之后,保存并且退出

六、键盘操作技巧(移动光标)

6.1、当在 vi 命令模式下时,vi 提供了大量的移动命令。下表是一些光标移动按键

按键

移动光标

l or 右箭头

向右移动一个字符

h or 左箭头

向左移动一个字符

j or 下箭头

向下移动一行

k or 上箭头

向上移动一行

0 (零按键)

移动到当前行的行首。

^

移动到当前行的第一个非空字符。

$

移动到当前行的末尾。

w

移动到下一个单词或标点符号的开头。

W

移动到下一个单词的开头,忽略标点符号。

b

移动到上一个单词或标点符号的开头。

B

移动到上一个单词的开头,忽略标点符号。

Ctrl-f or Page Down

向下翻一页

Ctrl-b or Page Up

向上翻一页

numberG

移动到第 number 行。例如,1G 移动到文件的第一行。

G

移动到文件末尾。

6.2、撤销修改

我们按下“u” 按键,当在命令模式下,vi 将会撤销你所做的最后一次修改。当我们试着执行一些基本的 编辑命令时,这会很方便。

6.3、追加文本

如果我们想要在这个句子的末尾添加一些文本,我们会发现 i 命令不能完成任务,因为我们不能把 光标移到行尾。vi 提供了追加文本的命令,明智地命名为”a”命令。如果我们把光标移动到行尾,输入”a”, 光标就会越过行尾,vi 进入插入模式。这样就允许我们添加更多的文本:

直接移动光标到行尾

6.4、我们几乎总是想要在行尾附加文本,所以 vi 提供了一种快捷方式来移动到当前行的末尾,并且能添加 文本。它是”A”命令。首先,使用”0”(零)命令,将光标移动到行首。现在我们输入”A”,

6.5、打开一行。我们插入文本的另一种方式是“打开”一行。这会在存在的两行之间插入一个空白行,并且进入插入模式

命令

打开行

o

当前行的下方打开一行。

O

当前行的上方打开一行。

七、删除文本

vi 提供了各种各样的方式来删除文本,所有的方式包含一个或两个按键。 x 按键会删除光标位置的一个字符。可以在 x 命令之前带上一个数字,来指明要删除的字符个数。 d 按键更通用一些。类似 x 命令,d 命令之前可以带上一个数字,来指定要执行的删除次数。另外, d 命令之后总是带上一个移动命令,用来控制删除的范围

命令

删除的文本

x

当前字符

3x

当前字符及其后的两个字符。

dd

当前行。

5dd

当前行及随后的四行文本。

dW

从光标位置开始到下一个单词的开头。

d$

从光标位置开始到当前行的行尾。

d0

从光标位置开始到当前行的行首。

d^

从光标位置开始到文本行的第一个非空字符。

dG

从当前行到文件的末尾。

d20G

从当前行到文件的第20行。

八、剪切,复制文本

d 命令不仅删除文本,它还“剪切”文本。每次我们使用 d 命令,删除的部分被复制到一个 粘贴缓冲区中(看作剪切板)。y 命令用来复制文本,和 d 命令剪切文本的方式差不多。这里有些把 y 命令和各种移动命令 结合起来使用的实例:

命令

复制的内容

yy

当前行。

5yy

当前行及随后的四行文本。

yW

从当前光标位置到下一个单词的开头。

y$

从当前光标位置到当前行的末尾。

y0

从当前光标位置到行首。

y^

从当前光标位置到文本行的第一个非空字符。

yG

从当前行到文件末尾。

y20G

从当前行到文件的第20行。

九、粘贴文本

执行小 p 命令把剪切板中的文本粘贴到光标位置之后, 或者是大 P 命令把文本粘贴到光标之前。

十、连接行

vi 提供了一个特定的命令,大写的 J(不要与小写的 j 混淆了, j 是用来移动光标的)把行与行之间连接起来。

源文件

使用大写的J 把第三行和第四行连接起来

连接命令J

十一、查找一行

f 命令查找一行,移动光标到下一个所指定的字符上。例如,命令 fa 会把光标定位到同一行中 下一个出现的”a”字符上。在一行中执行了字符的查找命令之后,通过输入分号来重复这个查找。

同时按下fa 表查找出现的第一个a字符

十二、查找整个文件

移动光标到下一个出现的单词或短语上,使用 / 命令。当你输入/命令后,一个”/”字符会出现在屏幕底部。下一步,输入要查找的单词或短语后, 按下回车。光标就会移动到下一个包含所查找字符串的位置。通过 n 命令来重复先前的查找

按下/ 输入查找的字符 按下enter

十三、全局查找和替代

vi 使用 ex 命令来执行查找和替代操作(vi 中叫做“替换”)我们输入以下命令:

:%s/ds/DS/g

我们把这个命令分解为几个单独的部分,看一下每部分的含义:

条目

含义

:

冒号字符运行一个 ex 命令。

%

指定要操作的行数。% 是一个快捷方式,表示从第一行到最后一行。另外,操作范围也 可以用 1,5 来代替(因为我们的文件只有5行文本),或者用 1,$ 来代替,意思是 “ 从第一行到文件的最后一行。” 如果省略了文本行的范围,那么操作只对当前行生效。

s

指定操作。在这种情况下是,替换(查找与替代)。

/Line/line

查找类型与替代文本。

g

这是“全局”的意思,意味着对文本行中所有匹配的字符串执行查找和替换操作。如果省略 g,则 只替换每个文本行中第一个匹配的字符串。

执行命令

执行命令前


执行命令后

我们也可以指定一个需要用户确认的替换命令。通过添加一个”c”字符到这个命令的末尾,来完成 这个替换命令

:%s/DS/ds/gc

这个命令会把我们的文件恢复先前的模样;然而,在执行每个替换命令之前,vi 会停下来, 通过下面的信息,来要求我们确认这个替换:

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

按键

行为

y

执行替换操作

n

跳过这个匹配的实例

a

对这个及随后所有匹配的字符串执行替换操作。

q or esc

退出替换操作。

l

执行这次替换并退出。l 是 “last” 的简写。

Ctrl-e, Ctrl-y

分别是向下滚动和向上滚动。用于查看建议替换的上下文。

the end

了解更多
举报
评论 0