VIM 使用教学

VIM使用教学

作者: ol
⚠著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

💡参考:
爱编程的大丙
技术蛋老师
皮哥Bryant

正常模式(NORMAL)

Esc 进入正常模式

光标移动

1
2
3
4
5
6
7
8
9
10
11
12
# 标准的移动光标的方法: 使用 h, j, k, l

光标上移

|
光标左移 <-- h j k l --> 光标右移
|

光标下移
# j 可以想象为 Jack(小丑)
# k 可以想象为 King(国王)
# King肯定比Jack要高高在上嘛,所以k上j下

光标移动命令

快捷键 功能 备注
0 光标移动到行首
$ 光标移动到行尾部 选按两个键: shift + 4
gg 光标移动到文件头 第一行的开始
G 光标移动到文件尾部 最后一行的开始
数字n+G 行跳转 n 代表要跳转到哪一行
数字n+回车 相对跳转 n 行 从光标所在当前行往下跳 n 行, n 对应的是一个整数
数字n+j 相对向下跳转 n 行 从光标所在当前行往下跳 n 行, n 对应的是一个整数,不需要回车
数字n+k 相对向上跳转 n 行 从光标所在当前行往上跳 n 行, n 对应的是一个整数,不需要回车
w 光标按单词移动,移动到下一个单词首部 w代表word
e 光标按单词移动,移动到下一个单词尾部 e代表end
b 光标按单词移动,移动到上一个单词首部 b代表back

删除命令

在vim中是没有删除操作的, 其实所谓的删除就是剪切, 被删除的数据都可被粘贴到文档的任意位置, 即便如此我们还是习惯性的将剪切操作称之为删除, 常用的删除操作如下表所示:

快捷键 功能 备注
x (小写) 删除光标后边的字符 vim中的光标比较宽会盖住后边的字符
X (大写) 删除光标前边的字符
dw 删除单词 dw表示delete a word,要先把光标移动到单词的第一个字母上再删除, 否则单词只能被删除一部分
cw 删除单词并进入编辑模式 cw表示change a word,要先把光标移动到单词的第一个字母上再删除, 否则单词只能被删除一部分
ci((,[,})或ci(),],}) 删除()或[]或{}里的内容并进入编辑模式 ci表示change in
s 删除字母并进入编辑模式 只删除一个字母,并进入编辑模式,光标在删除的单词前
d0 删除光标前的字符串 从字符串开头到光标当前位置的字符串被删除了
d$ (D) 删除光标后的字符串 从光标当前位置到字符串尾部的字符串被删除了, 使用 D也行
dd 删除光标所在行
ndd 删除n行 从光标所在行开始删除n行, n对应的是一个整数

撤销和反撤销

撤销和反撤销对应windows中的 ctrl+z和ctrl+y, 但是在vim中使用这两个快捷键是不行的。

快捷键 功能 备注
u 撤销 u表示undo,等价于 windows 中的 ctrl+z
ctrl+r 反撤销 r表示redo,等价于 windows 中的 ctrl+y

复制和粘贴

在vim中做删除操作就相当于剪切, 剪切或者复制之后的数据都可以用来做粘贴操作, 在vim中对应的快捷键如下:

快捷键 功能 备注
p 粘贴到光标所在行的下边 p表示paste(粘贴),小写的 p
数字n+p 粘贴到光标所在行的下边,n份 n是整数,小写的 p
P 粘贴到光标所在行的上边 大写的 P
yy 复制光标所在行 y表示yank(猛拉)
数字n+yy 从光标所在行向下复制 n 行 n是要复制的行数, 代表一个整数
yw 复制光标所在的单词 yw表示yank a word

重复操作

vim会自动记录你上次的操作,.可以执行上一次操作,在vim中对应的快捷键如下:

快捷键 功能 备注
. 执行上一次操作 .(英语的句号)

注释

vim可以直接注释单行和多行以及块,在vim中对应的快捷键如下:

快捷键 功能 备注
gcc 注释单行
gc+数字n+j 此行+向下注释n行 总注释n+1行
gc+数字n+k 此行+向上注释n行 总注释n+1行
gc+((,[,{,},],)) 注释一个块

编辑模式(INSERT)

i 或 Ins 进入编辑模式

切换到编辑模式

如果要编辑文件, 需要从命令模式切换到文件编辑模式, 切换模式的快捷键有很多, 不同的快捷键对应的效果有所不同, 效果如下表所示:

快捷键 功能
i i代表insert,从光标前边开始输入
a a代表append,从光标的后边开始输入
o o代表open a new line,在光标下边创建新行, 在新行中输入
s 删除光标后边的字符(盖住的字符), 从删除的字符位置开始输入
I (大写的i) 从当前行行首开始输入
A 从当前行行尾开始输入
O 在光标上边创建新行, 在新行中输入
S 删除当前行, 在当前行开始输入
cw 删除单词, 在当前行开始输入
ci((,[,})或ci(),],}) 删除()或[]或{}里的内容, 在当前行开始输入

💡文件编辑完成之后, 从编辑模式回到命令模式只需要按键盘上的Esc即可。

转为编辑模式插入位置

命令模式(COMMAND)

保存退出

使用vim对文件编辑完成之后, 需要保存或者退出vim一般都是在末行模式下完成的, 不管是进行那种操作都有对应的操作命令, 如下表:

命令 功能
q 退出, 如果退出的时候文件没有保存, vim会提示是否要保存
q! 直接退出, 不保存 (强制退出)
w 保存, 不退出 (相当在windows中于按了ctrl+s)
wq 保存退出
x 保存退出

替换

命令模式下的替换比正常模式下的替换功能要强大的多, 在命令模式下可以指定将什么样的内容替换为什么样的内容, 并且可以指定替换某一行或者某几行或者是全文替换。

替换对应的命令是 s 并且可以给其指定参数,默认情况下只替换相关行的第一个满足条件的关键字, 如果需要整行替换需要加参数/g。

命令 说明
s/被替换的关键字/新的关键字/g g表示global全局替换,只对光标所在行进行替换
行号1, 行号2s/被替换的关键字/新的关键字/g [行号1 , 行号2] 是一个从小到大的范围, 对这个范围进行替换
%s/被替换的关键字/新的关键字/g %代表对所有行进行替换

查找

在vim的命令模式下一共有三种查找方式, 首先需要在键盘上输入对应的字符, 然后按回车键vim会进行关键字匹配, 之后就可以通过 n 或者N 进行关键字之间的切换了。

搜索快捷键 关键字遍历 描述 备注
/ n 从当前位置向下 直接按键盘上的 /即可
N 从当前位置向上
? n 从当前位置向上 直接按键盘上的 ?即可, 需要使用组合键
N 从当前位置向下
# n 从当前位置向上 光标需要先放在被搜索的关键字上, 键盘上按 #
N 从当前位置向下

💡关于 ? 和 # 都需要使用组合键, 这点要注意一下。

下面总结一下这三种搜索方式:

  •  使用 / 或者 ? 搜索效果一样, 只是遍历关键字的时候的顺序是相反的
  • 使用 # 必须先从被搜索的文件中找到要搜索的关键字, 好处就是搜索的内容不需要通过键盘输入
  • 以上两种搜索方式各有优劣, 请根据实际情况选择使用。

视图模式(VISUAL)

在编辑文件的过程中, 有时候需要删除或者需要复制的数据不整行的, 而是一行中的某一部分, 这时候可以使用可视模式进行文本的选择, 之后再通过相关的快捷键对所选中的数据块进行复制或者删除操作。

有三种方式可以切换到可视模式:

  • v: 进入的字符可视化模式(Characterwise visual mode),文本选择是以字符为单位的。
  • V :进入的行可视化模式(Linewise visual mode),文本选择是以行为单位的。
  • ctrl-v: 进入的块可视化模式(Blockwise visual mode),可以选择一个矩形内的文本。

进入到可视模式之后,就可以进行文本块的选择和复制以及删除了

快捷键 功能 备注
h 光标向左移动 移动光标用于可视模式下的数据块选择
j 光标向下移动 移动光标用于可视模式下的数据块选择
k 光标向上移动 移动光标用于可视模式下的数据块选择
l 光标向右移动 移动光标用于可视模式下的数据块选择
d 删除(剪切) 删除可视模式下选中的数据块
y 复制 复制可视模式下选中的数据块
p (小写) 数据粘贴到光标的后边 粘贴在可视模式下复制或者剪切的数据块
P (大写) 数据粘贴到光标的前边 粘贴在可视模式下复制或者剪切的数据块

字符可视模式

控制光标方向用来选择文件中的不规则数据块, 可以对选中的文本信息进行复制和删除

1
2
# 进入到字符可视模式,直接在键盘上按 v 即可: 
v

通过 v 切换到字符可视模式之后, 在窗口的最下方会看到 – VISUAL-- 字样。

行可视模式

向下移动光标可以选择一整行, 向上移动光标可以取消整行选择

1
2
# 进入行可视模式, 键盘上按 shift+v 
V

通过 V 切换到行可视模式之后, 在窗口的最下方会看到 – VISUAL LINE – 字样。

块可视化模式

通过向上,下移动光标控制矩形文本块的高度,通过向左,右移动光标控制矩形文本块的宽度。

1
2
# 进入块可视模式, 选择一个矩形文本块
ctrl+v

通过 ctrl+v 切换到块可视模式之后, 在窗口的最下方会看到 – VISUAL BLOCK – 字样。

VIM配置文件

vim 是一个文本编辑器工具, 这个工具也是有配置文件的,文件的名字叫做vimrc,在里边可以设置样式,功能, 快捷键等属性 。对应的配置文件分为两种 用户级别和系统级别。

  • 用户级别的配置文件(~/.vimrc)只对当前用户有效
  • 系统级别的配置文件(/ect/vim/vimrc)对所有Linux用户都有效
  • 如果两个配置文件都设置了, 用户级别的配置文件起作用(用户级别优先级高)。