10. 文本编辑器¶
10.1. Vi/Vim编辑器¶
大部分Linux系统中都会自带Vi编辑器已方便用户在终端上编辑文件, 而Vim是Vi的升级版本,它在Vi的基础上改进和增加了很多特性,是一个功能更强大、高度可定制的文本编辑器。 如支持代码折叠、插件、多国语言支持、垂直分割视窗、拼字检查、上下文相关补完,标签页编辑等功能。 热爱Vim编辑器的用户,能把它玩出花来,甚至直接把它打造成IDE。
在对Linux服务器进行运维或控制嵌入式开发板的时候,绝大部分情况下我们只能使用终端, 而在终端编辑文件时使用Vi/Vim编辑器几乎是最好的选择, 所以即使它上手不易,但我们也绝不能逃避学习。对新手来说, 要求能熟练使用Vi/Vim编辑器对文件进行基本的读写修改。
10.1.1. 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后,请按如下步骤进行操作,注意若开启了输入法,要先把输入法设置成英文:
按下退出键“Esc”,Vim会进入到“一般模式”。
输入英文冒号“:”,Vim会进入到“命令行模式”。
输入强制退出命令“q!”,即字母“q”及英文叹号“!”。
按回车执行命令,会退出Vim,返回到终端。
执行时终端显示的内容如下图所示。
10.1.1.4. 输入内容¶
初次使用Vim时,想要在编辑器输入内容也并非易事, Vim打开后默认是在“一般模式”的, 键盘的输入都会被当成一般命令而不是文本的内容,即在该模式下的所有输入就如同在其它常用编辑器中按了快捷键。 运气好按了进入“插入模式”的快捷键,后续的输入才会被当成文本内容。
可通过以下步骤进入到“插入模式”输入内容并保存文件:
按下退出键“Esc”进入“一般模式”。
输入一般命令“i”,即直接按字母“i”,进入“插入模式”,如下图所示。
随意输入一些内容。
按下退出键“Esc”再次进入“一般模式”。
输入英文冒号“:”,Vim会进入到“命令行”模式。
输入保存退出命令“wq”或者不保存强制退出命令“q!”。
按回车执行命令,会退出Vim,返回到终端。
10.1.2. Vim的三种模式¶
经过以上的使用演示,我们体验到了Vim编辑器的三种工作模式:
一般模式(normal mode):一般模式用来浏览文本,查找内容,但是不可以编辑,在该模式下的键盘输入会被当成快捷键, 如复制粘贴等。打开Vim时,默认是工作在一般模式。
插入模式(insert mode):插入模式下具有普通编辑器的功能,该模式下的键盘输入会被当成文本内容。
命令行模式(command-line mode):命令行模式支持保存、退出、替换等命令,以及Vim的高级功能。
我们在使用Vim时,常常会在这三种模式之间进行切换,切换方式可以参考下图。
上图的意义就是:
在任意模式下,我们可以通过按键“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命令的作用是将其后面的文本内容直接输出到终端上。
Vim退出后回到终端,通过source命令运行刚刚编写的脚本文件:
1 2 | #给予运行权限
sudo chmod u+x hello_world.sh
|
可以看到终端会输出“helloworld,this is a script test!”字样。