what is vim?
Vim是从 vi 发展出来的一个 文本编辑器。简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。
vim 的模式
vim 共分为三种模式,分别是: - 命令模式(Command mode) - 输入模式(Insert mode) - 底线命令模式(Last line mode)
命令模式
用户刚刚启动 vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。下面列举常用的命令模式
查找 与 替换
查找
- Command模式下按 “/” 即可进入查找模式,输入要查找的字符串并 按下Enter。 Vim会跳转到第一个匹配。 按下 “n” 查找下一个,按下 “N” 查找上一个
- 在查找模式中加入 示大小写不敏感查找,表示大小写敏感查找, 例如
替换
1
| :{作用范围}s/{目标}/{替换}/{替换标志}
|
例如 在全局范围(%)查找 foo 并替换为 bar,所有出现都会被替换(g)
作用范围
当前行 |
:s/foo/bar/g |
全文 |
:%s/foo/bar/g |
选区,在 Visual 模式下选择区域后输入 :,Vim 即可自动补全为 :'<,'>。 |
:'<,'>s/foo/bar/g |
2-11 行 |
:2,11s/foo/bar/g |
当前行 . 与接下来两行 +2 |
:.,+2s/foo/bar/g |
替换标志符
只替换从光标位置开始,目标的第一次出现 |
:%s/foo/bar |
i 表示大小写不敏感查找 |
:%s/foo/bar/i |
I 表示大小写敏感 |
:%s/foo/bar/I |
c 表示需要确认 |
:%s/foo/bar/c |
g 表示全局 global 替换 |
:%s/foo/bar/gc |
插入
1 2 3 4 5 6 7 8 9 10 11 12 13
| -----进入输入模式(Insert mode)----- i 当前位置前插入 I 当前行首插入
a 当前位置后插入 A 当前行尾插入
o 当前行之后插入一行 O 当前行之前插入一行
-----进入取代模式(Replace mode)----- r 取代光标所在的那一个字符一次 R 一直取代光标所在的文字,直到按下 ESC 为止
|
移动
以行为单位移动
^ |
移动到行首第一个词的首字母。 |
| |
移动到行首第一个字符。 |
$ |
移动到行尾。 |
j |
移动到下一行。 |
k |
移动到上一行。 |
:10 |
移动光标到文件第 10 行。可以 :set number 来让 vim 显示行号。 |
gg |
移动到文件首行。 |
G |
移动到文件尾行。 |
以屏幕为单位移动
Ctrl + e |
向下滚动一行 |
Ctrl + y |
向上滚动一行 |
Ctrl + d(down) |
向下滚动半屏 |
Ctrl + u(up) |
向上滚动半屏 |
Ctrl + f(forward) |
向下滚动一屏 |
Ctrl + b(back) |
向上滚动一屏 |
Shift + g |
切换到最后 |
以单词为单位移动
w |
移动到下一个单词的词首 |
b |
移动到上一个单词的词首 |
e |
移动到下一个单词的结尾 |
删除
x, X |
在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用) |
nx |
n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。 |
dd |
删除游标所在的那一整行(常用) |
ndd |
n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用) |
d1G |
删除光标所在到第一行的所有数据 |
dG |
删除光标所在到最后一行的所有数据 |
d$ |
删除游标所在处,到该行的最后一个字符 |
d0 |
那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符 |
复制
yy |
复制游标所在的那一行(常用) |
nyy |
n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用) |
y1G |
复制游标所在行到第一行的所有数据 |
yG |
复制游标所在行到最后一行的所有数据 |
y0 |
复制光标所在的那个字符到该行行首的所有数据 |
y$ |
复制光标所在的那个字符到该行行尾的所有数据 |
p, P |
p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用) |
撤销与重做
u |
撤销 (常用) |
[Ctrl]+r |
重做上一个动作 (常用) |
查看历史输入
输入模式
在命令模式下按下 i就进入了输入模式。在输入模式中,可以使用以下按键:
- 字符按键以及Shift组合,输入字符
- ENTER,回车键,换行
- BACK SPACE,退格键,删除光标前一个字符
- DEL,删除键,删除光标后一个字符
- 方向键,在文本中移动光标
- HOME/END,移动光标到行首/行尾
- Page Up/Page Down,上/下翻页
- Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
- ESC,退出输入模式,切换到命令模式
底线命令模式
在命令模式下按下 :(英文冒号) 就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号): 1 2 3 4 5 6 7 8 9 10
| :q 退出程序 :q! 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存 :w 保存文件 :w! 若文件属性为『只读』时,强制写入该档案。到底能不能写入, 还是跟权限有关
----环境的变更---- :set nu 显示行号,设定之后,会在每一行的前缀显示该行的行号 :set nonu 与 set nu 相反,为取消行号
ESC 退出底线命令模式
|
惊叹号 ("!") 在 vim 当中,常常具有『强制』的意思
更改vim配置
打开配置文件 如设置显示行号, 跳转到文本末尾, 输入
reference
1.Linux vi/vim