Vim & Vi :编辑器之神
首次发布时间:2020/7/13
最后修改时间:2020/7/13
摘要
- vi 的三种基本工作模式
- 命令模式
- 编辑模式
- 末行模式
vi 简介
- vi 是 “Visual interface” 的简称,它在 Linux 上的地位就仿佛 Edit 程序在 DOS 上一样
- 它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制
- vi 不是一个排版程序,它不象 Word 或 WPS 那样可以对字体、格式、段落等其他属性进行编排,它只是一个文本编辑程序
- vi 没有菜单,只有命令,且命令繁多
vi 的三种基本工作模式
- 命令模式
- 编辑模式
- 末行模式
命令模式:
- 一启动 vi/vim,就进入了命令模式
- 在此模式下,键盘输入会被 Vim 识别为命令,而不会作为字符被输入到文档中
- 常用命令:
i
:切换到编辑模式,从当前光标所在位置开始输入a
:切换到编辑模式,从当前光标所在位置的后一位开始输入o
:切换到编辑模式,从光标所在行的下一行开始输入,且会自动新开一行- (这个命令自己试一下会更直观一点,命令很简单,描述起来有点绕)
- (我觉得这个命令很实用)
-
上面这三个命令都是我自己比较常用的切换到编辑模式的命令
- 扩展:(我没用过,但是是能正常用,只是我觉得不好用,因为还要切换大小写)
-
I
:切换到编辑模式,从行首开始输入 -
A
:切换到编辑模式,从行末开始输入
-
dd
:删除光标所在行的整行内容ndd
:自光标所在行向下删除 n 行- (n 是具体行数,需要你自己输入)
- (例如
10dd
,表示删除自光标所在行向下 10 行)
-
这两个也很实用,可以比较快的删除内容
u
:回退所做的修改ctrl + r
:撤销回退-
这两个命令配合使用,功能类似于 Windows 下的
ctrl + z
和ctrl + y
编辑模式:
- 命令模式下按下
i
就进入了输入模式(或者使用上面 3 个命令中的一个也行) - 编辑模式下的编辑操作就不赘述了,和 Windows 下差不多,只是不能用鼠标而已
- 按一下
ESC
键就可以回到命令模式
末行模式:
- 在命令模式下按下
:
(英文冒号)就进入了末行模式 -
注意:有时候一直按
:
没反应,看下是不是用了中文冒号 - 常用的命令(已经省略了冒号):
q
:退出 vi/vimq!
:强制退出,且不保存修改w
:保存修改wq
:保存并退出wq!
:强制保存并退出(这个命令是针对只读文件的,平常不会用到)
- 按两下
ESC
键就可以回到命令模式
vim 基础操作
1.1 编辑模式
按键 | 说明 |
---|---|
i | 在光标位置开始输入 |
l (大写 i) | 在行首开始输入 |
a | 光标后一位开始输入 |
A | 在行末开始输入 |
o | 在光标所在行的下一行新开一行,并在新开行的行首开始输入 |
O | 在光标所在行的上一行新开一行,并在新开行的行首开始输入 |
1.2 末行模式
- 在命令模式下,输入
:
(英文冒号),即可进入末行模式 - 退出:
按键 | 说明 |
---|---|
:q | 退出 vim |
:q! | 退出 vim,并且不保存修改 |
:w | 保存修改 |
:qw | 保存修改并退出 |
:x | 保存修改并退出 |
-
:x
在文件内容有修改时,才会写入文件,并更新文件修改时间 -
:qw
无论文件内容是否有修改都会写入文件,并更新文件修改时间,会在编译时产生不必要的开销 -
所以一般首选使用
:x
- 详细可参考这篇文章:vim 中的":wq"和":x"的区别
-
查找命令:
按键 | 作用 |
---|---|
/ | str(字符串查找),这个比较常用,跟 Windows 下的 ctrl + f 功能类似 |
n | 下一个 |
N | 上一个 |
:%s/String//gn | 跟 / 作用类似,也是查找字符串。不过这个命令还可以显示出需要查找的内容的个数,命令中的 String 替换成你们要查找的内容即可 |
-
在命令模式下,按下
/
,输入需要查找的字符串内容 -
然后按回车,即可开始查找
-
开始查找后,按
n
是往后查找下一个,按N
是往前查找上一个 -
:%s/String//gn
:这个命令也是通过n
和N
来查找上一个/下一个。 -
替换命令:
-
目标:把
abc
全部替换为123
末行模式下,将当前文件中的所有
abc
替换成123
:
:%s/abc/123/g
(如果不使用g
,则只会替换每一行的第一个abc
)末行模式下,将第 1 行至第 10 行的
abc
替换成123
:1,10s/abc/123/g
- vim 里执行 shell 下的命令:
- 在末行模式下输入
!
,然后后面跟 shell 命令 - 例如:
:!git log
- 这样就会直接跳到 git log 的显示
- 此时按一下回车,就会回到 vim 里面
- 在末行模式下输入
1.3 命令模式
- 移动光标:
按键 | 作用 |
---|---|
h | 左移 |
j | 下移 |
k | 上移 |
l | 右移 |
M | 光标移动到当前屏幕的中间行 |
L | 光标移动到当前屏幕最后一行行首 |
gg | 光标移动文件开头 |
G | 光标移动到文件末尾 |
nG | 移动到指定行,n 是行号 G |
w | 向后一次移动一个字 |
b | 向前一次移动一个字 |
{ | 按段移动,上移 |
} | 按段移动,下移 |
Ctr-d | 向下翻半屏 |
Ctr-u | 向上翻半屏 |
Ctr-f | 向下翻一屏 |
Ctr-b | 向上翻一屏 |
其实光标移动这里我一个也记不住,也太多了
我一般就用 方向键 + HOME + END + PageUp + PageDown 键来移动光标
简单易用,我觉得这就足够满足我的使用了
- 撤销命令:
按键 | 作用 |
---|---|
u | 撤销修改 |
ctrl + r | 反撤销(和 u 的作用相反) |
-
这两个命令前文也讲过了
-
删除命令:
按键 | 作用 |
---|---|
x | 删除光标后一个字符,相当于 Del |
X | 删除光标前一个字符,相当于 Backspace(退格键) |
dd | 删除光标所在行,ndd 表示删除 n 行(这个命令前面也讲过) |
D | 删除光标后本行所有内容,包含光标所在字符 |
d0 | 删除光标前本行所有内容,不包含光标所在字符 |
dw | 删除光标开始位置的字,包含光标所在字符 |
de | 删除光标所在位置到本单词末尾 |
dE | 删除光标所在位置到本单词末尾包括标点符号 |
db | 删除光标所在位置到前面单词 |
dB | 删除光标所在位置到前面单词包括标点符号 |
d$ | 删除光标所在位置到本行末尾 |
我就只用过
x
、X
、dd
、ndd
,其它的目前没用过
- 复制粘贴:
按键 | 作用 |
---|---|
yy | 复制当前光标所在行,nyy 表示复制 n 行 |
p | 在光标所在位置向下新开辟一行,并粘贴通过 yy 复制的内容,np 表示将复制的内容粘贴 n 次 |
- 替换操作:
按键 | 作用 |
---|---|
r | 替换当前字符(用法:按一下 r ,然后输入字符,只能替换光标所在位置的字符) |
R | 替换当前行光标后的字符(输入的时候有点类似于点了 insert 键) |
- 文本行移动:
按键 | 作用 |
---|---|
>> | 文本行右移 |
<< | 文本行左移 |
感觉没什么用
- 重复命令:
按键 | 作用 |
---|---|
. | 重复上一次操作的命令 |
- 可视模式:
按键 | 作用 |
---|---|
v | 按字符移动,选中文本 |
V | 按行移动,选中文本 |
- 选取文本后:
- 按
d
删除选取的文本内容 - 按
y
复制选取的文本内容 - 按
<<
、>>
对选取的文本内容左右移动
- 按