0. 前言
介绍
无论是笔记,还是教程,说一件事,都喜欢从其介绍开始说起。
vi编辑器是Unix系统最初的编辑器。它使用控制台图形模式来模拟文本编辑窗口,允许查看文件中的行、在文件中移动、插入、编辑和替换文本。尽管它可能是世界上最复杂的编辑器至少讨厌它的人是这么认为的,但其拥有的大量特性使其成为Unix系统管理员多年来的支柱性工具。在GNU项目将vi编辑器移植到开源世界时,他们决定对其作一些改进。由于它不再是以前只能运行在Unix中的那个原始的vi编辑器了,改进之后不仅可以运行于unix,还可用于windows、mac等多操作平台,开发人员也就将他重命名为vim(vi improved)。
1. 开始
1.1. vi的模式
普通模式
由Shell进入vi编辑器时,首先进入普通模式。在普通模式下,从键盘输入任何字符都被当作命令来解释。普通模式下没有任何提示符,输入命令后立即执行,不需要回车,而且输入的字符不会在屏幕上显示出来
编辑模式
编辑模式主要用于文本的编辑。该模式下用户输入的任何字符都被作为文件的内容保存起来,并在屏幕上显示出来。
命令模式
命令模式下,用户可以对文件进行一些高级处理。尽管普通模式下的命令可以完成很多功能,但要执行一些如字符串查找、替换、显示行号等操作还是必须要进入命令模式。
也有文章称为两种工作模式,即把命令模式合并到普通模式。
如果不确定当前处于哪种模式,按两次 Esc 键将回到普通模式。
1.2. vim模式
可视模式
在正常模式中按下v,V,ctrl
+v,可以进入可视模式。可视模式是选中一块区域进行操作,包括删除,替换,复制,粘贴,改变大小写等。
2. vim命令分类
2.1. 启动vim
命令 | 解释 |
---|---|
vim -c cmd file | 在打开文件前,先执行指定的命令 |
vim -r file | 恢复上次异常退出的文件 |
vim -R file | 以只读的方式打开文件,但可以强制保存 |
vim -M file | 以只读的方式打开文件,不可以强制保存 |
vim -y num file | 将编辑窗口的大小设为 num 行 |
vim + file | 从文件的末尾开始 |
vim +num file | 从第 num 行开始 |
vim +/string file | 打开 file,并将光标停留在第一个找到的 string 上 |
vim --remote file | 用已有的 vim 进程打开指定的文件 |
2.2. vim文档操作
命令 | 解释 |
---|---|
:e file | 关闭当前编辑的文件,并开启新的文件 如果对当前文件的修改未保存,vi 会警告 |
:e! file | 放弃对当前文件的修改,编辑新的文件 |
:e+file | 开始新的文件,并从文件尾开始编辑 |
:e+n file | 开始新的文件,并从第 n 行开始编辑 |
:enew | 编译一个未命名的新文档(CTRL-W n) |
:e | 重新加载当前文档 |
:e! | 重新加载当前文档,并丢弃已做的改动 |
:e#或ctrl+^ | 回到刚才编辑的文件,很实用 |
:f或ctrl+g | 显示文档名,是否修改,和光标位置 |
:f filename | 改变编辑的文件名,这时再保存相当于另存为 |
gf | 打开以光标所在字符串为文件名的文件 |
:w | 保存修改 |
:n1,n2w filename | 选择性保存从某 n1 行到另 n2 行的内容 |
:wq | 保存并退出 |
:x | 保存并退出 |
:q | 退出当前窗口(CTRL-W q 或 CTRL-W CTRL-Q) |
:saveas newfilename | 另存为 |
:browse e | 会打开一个文件浏览器让你选择要编辑的文件 |
:set browsedir=last | 用上次访问过的目录(默认); |
:set browsedir=buffer | 用当前文件所在目录; |
:set browsedir=current | 用当前工作目录 |
:Sex ; | 水平分割一个窗口,浏览文件系统 |
:Vex | 垂直分割一个窗口,浏览文件系统; |
2.3. 基础编辑、移动光标
指令 | 解释 |
---|---|
$ | 行尾 |
^ | 行首 |
w | 下一个单词 (词首) |
e | 下一个单词(词尾) |
b | 前一个单词 |
x | del 删除后一个字符 |
X | backspace 删除前一个字符 |
u | 撤销 |
ctrl + r | 重做 |
k | 上 |
h | 下 |
g | 左 |
l | 右 |
i | 插入,开始写东西 |
s | 覆盖 |
esc | 退出输入模式,进入普通模式,可执行各种命令 |
2.4 操作和重复操作
指令 | 解释 |
---|---|
f | 查找字符,按f后再按需要移动到的字符,光标就会移动到那 |
f; 就会移动到下一个 ; 的位置 |
|
F | 反向查找字符 |
. | 重复上一个操作 |
v | 选择模式,用上下左右选择文本,按相应的指令直接执行,如:选中后执行 d 就直接删除选中的文本 |
ctrl + v | 块状选择模式,可以纵向选择文本块,而非以行的形式 |
d | 高级删除指令: |
dw 删除一个单词 |
|
df( 配合 f ,删除从光标处到 ( 的字符,单行操作 |
|
dd 删除当前行 |
|
d2w 删除两个单词 |
|
d2t, 删除当前位置到后面第二个 , 之间的内容,不包含 , (t = to ) |
2.5. 复制 和 粘贴
指令 | 解释 |
---|---|
y | 复制 |
yy | 复制当前行 |
p | 粘贴到后面 |
P | 粘贴到前面 |
o | 在当前行的下一行 添加空行并开始输入 |
O | 在当前行的上一行 添加空行并开始输入 |
2.6. 搜索
指令 | 解释 |
---|---|
/ | 从当前位置向后 搜索 |
? | 从当前位置后前 搜索 |
n | 搜索完之后,如果有多个结果,跳到 下一个匹 配项 |
N | 跳到 上一个 匹配项 |
* | 直接匹配当前光标下面的字符串,移到下一个匹配项,跟/ ? 没有关系 |
# | 上一个匹配项 |
2.7. 高级移动
指令 | 解释 |
---|---|
% | % 在配对的 () [] 之间移动 |
H、M、L | 移动到编辑器可视范围的头部,中间,尾部 |
G | 到文件的尾部,前面添加数字再按 G 跳到输入的行,写行号的时候是看不见的 |
- + | 跳到上一行,下一行 |
( ) | 跳到当前句子的 首 / 尾 |
{ } | 跳到 前一个 / 后一个 空行 |
[[ | 跳到前一个{ |
]] | 跳到后一个{ |
2.8. 高级指令
指令 | 解释 |
---|---|
J | 合并当前行与下一行。合并已选中的所有行。 |
r | 替换当前字符到下一个输入的字符。如: r 后接 4 会把当前字符替换成 4 |
C | 是 c$ 的缩写:修改从光标到结尾 |
D | 是 d$ 的缩写:删除从光标到结尾 |
Y | 是 yy 的缩写:复制当前行 |
s | 删除光标下字符,并开始编辑 |
S | 删除当前行,并开始编辑 |
< | 向前缩进,一行,或多行,范围设置在前面提到了,t 等等 |
> | 向后缩进,一行,或多行 |
= | 格式化,一行,或多行 |
~ | 切换光标下的字符大小写 |
3. vimtutor
在已经安装了vim的情况下 输入vimtutor
可直接进入vimtutor
vimtutor是vim官方的教程,每个必要的基本命令分为一个小节,可以边看教程边操作非常有效且方便。学完大概需要20-25分钟。