我经常使用 vim,不管是类 Unix 系统,或者 使用 vscode 的 vim 插件,都能很方便的使用 vim 高效快捷的编辑模式。
这篇文章记录下使用过程中的笔记。
Vim 基础
Vim 的多种模式
Vim 有多种模式,我这里常用的如下:
| 模式 | 描述 |
|---|---|
| NORMAL MODE | 正常模式,刚进入文件默认都会进入此模式,此模式下无法编辑,可以移动光标 |
| INSERT MODE | 插入模式,即编辑模式,此时可以输入文本 |
| VISUAL MODE | 可视化模式,按v键进入,可以选择特定字符或行 |
| VISUAL LINE MODE | 可视化行模式,按shift+v键进入,可以选择多行 |
| VISUAL BLOCK MODE | 可视化字符块模式,按ctrl+v键进入,可以选择多行选中相同位置的字符 |
Vim 常用快捷键
控制光标移动
以下都是在正常模式或可视化模式下的按键
| 键 | 描述 |
|---|---|
| j | 光标下移一行 |
| 数字 n+j | 光标下移 n 行 |
| k | 光标上移一行 |
| 数字 n+k | 光标上移 n 行 |
| h | 光标左移一个字符 |
| 数字 n+h | 光标左移 n 个字符 |
| l | 光标右移一个字符 |
| 数字 n+l | 光标右移 n 个字符 |
| 0 | 光标移动到当前行开头 |
| $ | 光标移动到当前行结尾 |
| gg | 光标移动到整个文本开头 |
| G | 光标移动到整个文本结尾 |
| 数字 n+G | 光标移动到第 n 行 |
编辑复制粘贴删除
以下都是在正常模式或可视化模式下的按键
| 键 | 描述 |
|---|---|
| i | 在当前光标字符前进行编辑 |
| shift+i | 在当前行开头处进行编辑 |
| a | 在光标位置后进入编辑 |
| shift+a | 在本行结尾进入编辑 |
| o | 当前行下新增一行进行编辑 |
| O | 当前行上新增一行进行编辑 |
| Esc | 退出编辑模式或其它操作(如 shift+:执行命令时的退出) |
| u | 撤销上一步的操作 |
| u 或 shift+u | 可视化模式下,u使选中的大写字母变为小写字母,shift+u使选中的小写字母变大写字母 |
| x | 删除当前光标所在的字符,或可视化模式下选中的多个字符 |
| 数字 n+x | 删除当前光标开始的 n 个字符 |
| dd | 删除当前光标所在行,或可视化模式下选中的多个字符 |
| 数字 n+dd | 删除当前行开始的 n 行 |
| y | 复制选中的行或字符 |
| yy | 未选中时,复制当前一整行 |
| p | 粘贴到光标位置的后面,如果复制的是行,则粘贴到新的下一行 |
| shift+p | 粘贴到光标位置的前面,如果复制的是行,则粘贴到新的上一行 |
| r | 替换,把选中的字符或行替换为后面输入的字符 |
执行命令
保存和退出
使用shift+:可执行以下命令
| 键 | 描述 |
|---|---|
| w | 保存 |
| wq | 保存并退出 |
| q | 退出不保存 |
| q! | 强制退出 |
窗口切换
使用shift+:可执行以下窗口相关命令
| 键 | 描述 |
|---|---|
| split | 垂直方向上打开一个新窗口,新窗口打开的文件还是之前的文件 |
| split new.file | 垂直方向上打开一个新窗口,新窗口打开的文件是 new.file |
| vsplit | 水平方向上打开一个窗口,为什么是 vertical,可能表示窗口是竖直方向挨着排的?😊 |
| ctrl+w | 进入窗口切换状态,可以使用jkhl来切换窗口,或w来跳转下一个窗口 |
查找
在正常模式下按/或?可进行查找操作
| 键 | 描述 |
|---|---|
| /aaa | 从上到下的顺序进入查找模式,然后按 Enter 跳转到第一个结果,n键跳转到下一个查找结果,shift+n跳转到上一个查找结果 |
| ?aaa | 从下到上的顺序进入查找模式,然后按 Enter 跳转到第一个结果,此时n键也是从下到上的跳转 |
替换
在正常模式下按shift+:可进行替换操作
使用语法:
s/正则字符串/替换成的字符串/标志位(gim)
| 正则 | 描述 |
|---|---|
| s/string/STRING | 把光标所在行的第一个匹配到的 string 替换为 STRING |
| s/string/STRING/g | 把光标所在行的所有匹配到的 string 替换为 STRING |
| %s/string/STRING | 把所有行的第一个匹配到的 string 替换为 STRING |
| %s/string/STRING/g | 把所有行的所有匹配到的 string 替换为 STRING |
最后查找与替换操作都是可以使用正则表达式的。
第一篇文章,喜欢的收藏点个赞吧😊