Vim的三种模式
经过以上的使用演示,我们体验到了Vim编辑器的三种工作模式:
一般模式 (normal mode) |
一般模式用来浏览文本,查找内容,但是不可以编辑,在该模式下的键盘输入会被当成快捷键, 如复制粘贴等。打开Vim时,默认是工作在一般模式。 |
---|---|
插入模式 (insert mode) |
插入模式下具有普通编辑器的功能,该模式下的键盘输入会被当成文本内容。 |
命令行模式(command-line mode) | 命令行模式支持保存、退出、替换等命令,以及Vim的高级功能。 |
我们在使用Vim时,常常会在这三种模式之间进行切换,切换方式可以参考下图。
上图的意义就是:
- 在任意模式下,我们可以通过按键“Esc”进入到一般模式。
- 在一般模式下,通过按键“a” “i” “o” “O” “r” “R”等可进入到插入模式。
- 在一般模式下,通过按键“:”可进入到命令行模式。
插入模式
Vim提供多个快捷键来从一般模式进入插入模式,见下表。进入插入模式之后,就可以正常地编辑文本了, 使用方向键来移动光标,回车键进行换行,操作方式与Windows记事本没有什么区别。
表 进入/退出插入模式的快捷键
快捷键 | 功能描述 |
---|---|
i | 在当前光标所在位置插入文本 |
a | 在当前光标所在位置的下一个字符插入文本 |
o | 在光标所在位置后插入新行 |
r | 替换当前光标所在位置的字符 |
R | 可以替换当前光标所在位置之后的字符,按下“Esc”则退出 |
ESC | 退出插入模式 |
一般模式
在任意模式下按按键“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 | 可以选择多列 |
命令行模式
在一般命令模式下,按下键盘的冒号键“:”,就可以进入命令行模式,继续输入要执行的命令按回车即可执行。
表 命令行模式快捷键
快捷键 | 功能描述 |
---|---|
w | 保存文档 |
w |
另存为以 |
r |
读取文件名为filename的文档 |
q | 直接退出软件,前提是文档未做任何修改 |
q! | 不保存修改,直接退出软件 |
wq | 保存文档,并退出软件。 |
set nu | 在行首加入行号 |
set nonu | 不显示行号 |
set hlsearch | 搜索结果高亮显示 |
! command | 回到终端窗口,执行command命令,按回车键可切回vim。 |
用Vi/Vim软件编写简单的sh脚本
到此为止,Vim的基本操作就介绍完了,最后我们尝试用Vim编写一个输出hello world的脚本,熟悉Vim的操作。
在终端中执行行下列命令:
vim hello_world.sh
1 | |
---|---|
然后进入插入模式(在一般模式下按“i”键),输入下列代码后,保存文件并退出(退出插入模式,进入命令行模式后,输入wq并回车), 注意以下内容全为英文符号。
echo "helloworld,this is a script test!"
此脚本文件中的echo命令的作用是将其后面的文本内容直接输出到终端上。
Vim退出后回到终端,通过source命令运行刚刚编写的脚本文件:
source hello_world.sh
可以看到终端会输出“helloworld,this is a script test!”字样。