各位小伙伴,学习了几天的C语言基础,是不是都在苦恼vim上编写代码太麻烦了,和我们之前的Windows操作大不一样,没有了ctrl + c / ctrl + v的一键复制粘贴,只能手敲一些重复代码,或者鼠标选择点击复制,在点击粘贴,大家都用不习惯,难道vim就没有这些快捷键了吗?答案当然是否定的,今天我就将为大家分享一些常用的快捷键,让大家编写代码更轻松,便捷。
首先,得清楚Vim的三种核心工作模式:
1.正常模式(Normal):
进入方式:Vim启动默认进入、插入模式以及可视化模式按Esc退出
核心用途:移动光标、复制粘贴、删除修改等
2.插入模式(Insert):
进入方式:正常模式下,按 i / I / a / A / o / O等
核心用途:直接编辑、输入文本(类似普通记事本)
3.可视化模式(Visual):
进入方式:正常模式下, 按v(字符可视)、V(行可视)、ctrl + v(块可视)
核心用途:选中一段文本,进行批量复制、删除、修改等操作
1.模式切换
1.1 N —- I
| i | 在当前光标前 进入插入模式 |
| I |
在当前光标行首 进入行首(行首:非空白字符前) |
| a | 在当前光标后 进入插入模式 |
| A | 在当前光标行尾 进入插入模式 |
| o | 在当前行下方 新建一行,进入插入模式 |
| O |
在当前行上方 新建一行,进入插入模式 |
1.2 N —- V
| V | 进入行可视化模式(按行选中文本) |
| ctrl + v | 进入块可视化模式(按矩形块选择文本) |
1.3 退出
Esc : 退出 插入 / 可视化模式,返回正常模式
2 光标移动
2.1单个字符/行
| h | 光标向左移动(对应←键) |
| j | 光标向下移动(对应↓键) |
| k | 光标向上移动(对应↑键) |
| l | 光标向右移动(对应→键) |
| 0 |
光标跳转到当前行首(包括空白字符) |
| ^ | 光标跳转到当前行首非空白字符 |
| $ | 光标跳转到当前行尾 |
| gg | 光标跳转到文件开头 |
| G | 光标跳转到文件末尾 |
| nG / :n | 光标跳转到第n行 |
2.2 单词/段落
| w | 光标跳转到下一个单词开头(以空白字符分隔单词) |
| b | 光标跳转到上一个单词开头 |
| e | 光标跳转到当前 / 下一个的结尾 |
| ctrl + f | 向下翻一页 |
| ctrl + b | 向上翻一页 |
| } | 光标跳转到下一个段落的开头 |
| { | 光标跳转到上一个段落的开头 |
3.文本编辑
3.1 删除(不保留到剪切板)
| x | 删除当前光标所在字符 |
| nx | 删除从当前光标开始的n个字符 |
| dd | 删除当前行 |
| ndd | 删除从当前行开始的n行 |
| d$ | 删除从当前光标到行尾的所有字符 |
| d^ | 删除从当前光标到行首非空白字符的所有字符(不包括自身) |
| dw | 删除从当前光标到下一个单词开头 |
| D | 等价于d$ |
| ggdG | 删除整个文档的所有内容(gg 到开头,dG 删除到末尾) |
3.2 复制(保留到剪切板)
| yy | 复制当前行 |
| nyy | 复制从当前行开始的n行 |
| y$ | 复制从当前光标到行尾的所有字符 |
| y^ | 复制从当前光标到行首非空白字符的所有字符(不包括自身) |
| yw | 复制从当前光标到下一个单词开头 |
| Y | 等价于yy |
| ggyG | 复制整个文档的所有内容(gg 到开头,yG 复制到末尾) |
3.3 粘贴
| p | 将剪贴板内容「粘贴到当前光标下方(行操作)」/「粘贴到当前光标后方(字符操作)」 |
| P | 将剪贴板内容「粘贴到当前光标上方(行操作)」/「粘贴到当前光标前方(字符操作)」 |
| np | 将剪贴板内容「粘贴 n 次」 |
3.4 替换/修改
| r | 替换「当前光标所在的单个字符」(无需进入插入模式,如ra将当前字符改为a) |
| R | 进入「替换模式」,持续替换光标后的字符,按Esc退出(区别于插入模式) |
| cc | 删除「当前整行」并进入插入模式 |
| nc | 等价于ndd+i,删除 n 行并进入插入模式 |
| cw | 删除「当前单词」并进入插入模式 |
| ~ | 切换当前光标所在字符的大小写 |
| u | 撤销上一步操作(对应ctrl + z) |
| ctrl + r | 恢复上一步的撤销操作(对应ctrl + y) |
4. 查找与替换
4.1 查找
| /pattern |
(向下查找)字符串pattern,回车确认 |
| ?pattern | (向上查找)字符串pattern,回车确认 |
| n | 跳转到下一个匹配项(与查找方向一致) |
| N | 跳转到下一个匹配项(与查找方向一致) |
| :noh | 取消高亮显示 |
4.2 替换
| :s/old/new | 替换「当前行的第一个 old」为 new |
| :s/old/new/g | 替换「当前行的所有 old」为 new(g=global,全局匹配) |
| :%s/old/new | 替换「整个文档的每一行第一个 old」为 new |
| :%s/old/new/g | 替换「整个文档的所有 old」为 new |
| :n,m s/old/new/g | 替换「第 n 行到第 m 行的所有 old」为 new(如:10,20 s/hello/world/g) |
5.底行命令(按 : 进入)
| :w | 保存当前文件(「write」,不退出 Vim) |
| :w filename | 将当前文件「另存为」filename(如:w new_file.c) |
| :q | 退出 Vim(「quit」,仅当文件未修改或已保存时生效) |
| :q! | 强制退出 Vim,「放弃所有未保存的修改」(紧急退出,慎用) |
| :wq / 😡 | 保存文件并退出 Vim |
| :set nu | 显示「行号」(临时生效,仅当前 Vim 会话) |
| :set nonu | 隐藏「行号」 |
| :set ai | 开启自动缩进(与上一行缩进保持一致) |
| :set ts=4 | 设置制表符(Tab)宽度为4个空格 |
6.可视模式下的操作
进入可视模式后,先移动光标选中文本,在执行后续操作:
| v + 光标移动 | 按字符选中文本 |
| V+ 光标移动 | 执行选中文本(批量选行) |
| ctrl + v + 光标移动 | 按矩形块选中文本 |
| y | 复制选中的文本到剪切板 |
| d | 删除选中的文本 |
| c | 删除选中的文本并进入插入模式 |
| > | 将选中的文本向右缩进 |
| < | 将选中的文本向左缩进 |
| I(块可视化模式) | 给「选中的列块」行首添加内容(如批量添加//注释) |
| A(块可视化模式) | 给「选中的列块」行尾添加内容 |
给大家讲一下 批量添加注释的操作,不是很清晰:
- 正常模式下,移动到要注释的第一行开头;
- 按Ctrl+v进入块可视模式;
- 按j向下移动,选中所有需要注释的行的首列;
- 按I(大写)进入插入模式,输入//;
- 按Esc,完成所有选中行的批量注释。
7.插入模式下的操作
| ctrl + h | 删除光标前的一个字符(对应backspace) |
| ctrl + d | 删除当前光标前的一个制表符 |
| ctrl + c | 等价于Esc,退出插入模式,返回正常模式 |
| ctrl + v | 插入特殊字符如Ctrl+v+Tab插入真实 Tab 符,避免被替换为空格) |
好了,到这里Vim的基本快捷键也为大家分享得差不多了,内容很多,但满满都是干货,这也不是一下就能记住的,是在一次次的实操中逐渐掌握的,我相信,只要掌握得越多,会大幅度提升我们的编写效率。最后就是,制作不易,麻烦看到这里的小伙伴,能点点赞,收藏收藏,支持一下博主,点点关注,和博主继续嵌入式的征程。



