10. 文本编辑器

10.1. Vi/Vim编辑器

大部分Linux系统中都会自带Vi编辑器已方便用户在终端上编辑文件, 而Vim是Vi的升级版本,它在Vi的基础上改进和增加了很多特性,是一个功能更强大、高度可定制的文本编辑器。 如支持代码折叠、插件、多国语言支持、垂直分割视窗、拼字检查、上下文相关补完,标签页编辑等功能。 热爱Vim编辑器的用户,能把它玩出花来,甚至直接把它打造成IDE。

在对Linux服务器进行运维或控制嵌入式开发板的时候,绝大部分情况下我们只能使用终端, 而在终端编辑文件时使用Vi/Vim编辑器几乎是最好的选择, 所以即使它上手不易,但我们也绝不能逃避学习。对新手来说, 要求能熟练使用Vi/Vim编辑器对文件进行基本的读写修改。

10.1.1. Vim使用演示

10.1.1.1. 安装Vim

在Ubuntu下,使用apt可安装Vim编辑器,执行如下命令安装:

1
sudo apt install vim

10.1.1.2. 打开Vi/Vim

安装后使用vi或vim命令都可以打开,它们的基础使用方法是一样的:

1
2
vi       #若系统安装了vim,该命令会自动打开vim软件
vim      #打开vim软件

也可以使用如下命令创建或打开文件:

1
2
vi 文件名   #若文件存在则打开,文件不存在则创建
vim 文件名

10.1.1.3. 退出Vim

由于Vim是在终端下使用,没有图形界面的,所以对它的所有控制都只能通过命令来实现,包括退出。 对于新手来说如何退出Vim都是个问题。

最简单粗暴的Vim退出方式是使用“Ctrl”+“z”直接强制退出。

此处我们通过Vim的命令行模式退出Vim的步骤来体验它的“一般模式”和“命令行模式”。

打开Vim后,请按如下步骤进行操作,注意若开启了输入法,要先把输入法设置成英文:

  1. 按下退出键“Esc”,Vim会进入到“一般模式”。

  2. 输入英文冒号“:”,Vim会进入到“命令行模式”。

  3. 输入强制退出命令“q!”,即字母“q”及英文叹号“!”。

  4. 按回车执行命令,会退出Vim,返回到终端。

执行时终端显示的内容如下图所示。

未找到图片16|

10.1.1.4. 输入内容

初次使用Vim时,想要在编辑器输入内容也并非易事, Vim打开后默认是在“一般模式”的, 键盘的输入都会被当成一般命令而不是文本的内容,即在该模式下的所有输入就如同在其它常用编辑器中按了快捷键。 运气好按了进入“插入模式”的快捷键,后续的输入才会被当成文本内容。

可通过以下步骤进入到“插入模式”输入内容并保存文件:

  1. 按下退出键“Esc”进入“一般模式”。

  2. 输入一般命令“i”,即直接按字母“i”,进入“插入模式”,如下图所示。

  3. 随意输入一些内容。

  4. 按下退出键“Esc”再次进入“一般模式”。

  5. 输入英文冒号“:”,Vim会进入到“命令行”模式。

  6. 输入保存退出命令“wq”或者不保存强制退出命令“q!”。

  7. 按回车执行命令,会退出Vim,返回到终端。

未找到图片17|

10.1.2. Vim的三种模式

经过以上的使用演示,我们体验到了Vim编辑器的三种工作模式:

  • 一般模式(normal mode):一般模式用来浏览文本,查找内容,但是不可以编辑,在该模式下的键盘输入会被当成快捷键, 如复制粘贴等。打开Vim时,默认是工作在一般模式。

  • 插入模式(insert mode):插入模式下具有普通编辑器的功能,该模式下的键盘输入会被当成文本内容。

  • 命令行模式(command-line mode):命令行模式支持保存、退出、替换等命令,以及Vim的高级功能。

我们在使用Vim时,常常会在这三种模式之间进行切换,切换方式可以参考下图。

未找到图片18|

上图的意义就是:

  • 在任意模式下,我们可以通过按键“Esc”进入到一般模式。

  • 在一般模式下,通过按键“a” “i” “o” “O” “r” “R”等可进入到插入模式。

  • 在一般模式下,通过按键“:”可进入到命令行模式。

10.1.3. 插入模式

Vim提供多个快捷键来从一般模式进入插入模式,见下表。进入插入模式之后,就可以正常地编辑文本了, 使用方向键来移动光标,回车键进行换行,操作方式与Windows记事本没有什么区别。

表 进入/退出插入模式的快捷键

快捷键

功能描述

i

在当前光标所在位置插入文本

a

在当前光标所在位置的下一个字符插入文本

o

在光标所在位置后插入新行

r

替换当前光标所在位置的字符

R

可以替换当前光标所在位置之后的字符,按下“Esc”则退出

ESC

退出插入模式

10.1.4. 一般模式

在任意模式下按按键“Esc”可进入到一般模式。下表列出了一般模式下常用的快捷键。 在一般模式下,可以进行复制,粘贴,删除,查找替换某个关键字等。

表 一般模式快捷键

快捷键

功能描述

光标移动

k / ↑

光标向上移动

j / ↓

光标向下移动

h / ←

光标向左移动

l / →

光标向右移动

PageUp

向上翻页

PageDown

向下翻页

nG

跳转到第n行

文本查找与替换

/word

在文件中搜索关键字word

n

查找下一个关键字

N

查找上一个关键字

:1,$s/word1/word2/gc

将文本中的所有关键字word1用word2进行替换,需要用户进行确认。(使用:1,$s/word1/word2/g则直接全部替换)。这实际是运行在命令模式。

撤销重做

u

撤销上一步的操作,等价于Windows的Ctrl+Z

Ctrl+r

重做上一步的操作。

删除、剪切、复制、粘贴

d

删除光标所选的内容

dd

删除当前行

ndd

删除光标后n行

x

剪切光标选中的字符

y

复制光标所选的内容

yy

复制当前行

nyy

复制当前行后n行

p

将复制的数据粘贴在当前行的下一行

P

将复制的数据粘贴在当前行的上一行

区块操作

v

选择多个字符

V

可以选择多行

ctrl+v

可以选择多列

10.1.5. 命令行模式

在一般命令模式下,按下键盘的冒号键“:”,就可以进入命令行模式,继续输入要执行的命令按回车即可执行。

表 命令行模式快捷键

快捷键

功能描述

w

保存文档

w <filename>

另存为以<filename>为文件名的文档

r <filename>

读取文件名为filename的文档

q

直接退出软件,前提是文档未做任何修改

q!

不保存修改,直接退出软件

wq

保存文档,并退出软件。

set nu

在行首加入行号

set nonu

不显示行号

set hlsearch

搜索结果高亮显示

! command

回到终端窗口,执行command命令,按回车键可切回vim。

10.1.6. 用Vi/Vim软件编写简单的sh脚本

到此为止,Vim的基本操作就介绍完了,最后我们尝试用Vim编写一个输出hello world的脚本,熟悉Vim的操作。

在终端中执行行下列命令:

1
vim hello_world.sh

然后进入插入模式(在一般模式下按“i”键),输入下列代码后, 保存文件并退出(退出插入模式,进入命令行模式后,输入wq并回车),注意以下内容全为英文符号。

1
echo "helloworld,this is a script test!"

此脚本文件中的echo命令的作用是将其后面的文本内容直接输出到终端上。

未找到图片19|

Vim退出后回到终端,通过source命令运行刚刚编写的脚本文件:

1
2
#给予运行权限
sudo chmod u+x hello_world.sh

可以看到终端会输出“helloworld,this is a script test!”字样。

未找到图片20|