最近了解学习了被称为编辑之神的vim,感觉很有意思,也很有用
推荐刚接触vim的可以去实验楼学习学习,贴个链接,
也可以参考这篇文章进行学习。
一、关于vim的几种模式
vim是啥可以谷歌一下,这里想记录一下vim的六种基本模式
常用的是其中的普通模式、插入模式和命令执行模式
- 普通模式
① 在普通模式中,用的编辑器命令,比如移动光标、删除文本等等。这是启动vim后的默认模式。
② 普通模式命令往往需要一个操作符结尾。例如普通模式命令dd删除当前行,但是第一个d的后面可以跟另外的移动命令来代替第二个d,比如用移动到下一行的j键就可以删除当前行和下一行。另外还可以指定命令重复次数,2dd(重复dd两次),和dj的效果是一样的。
③ 在普通模式中,有很多方法可以进入插入模式中。比较普通的方法是是按a(append/追加)键或者i(insert/插入)键。 - 插入模式
① 在这个模式中,大多数按钮都会向文本缓冲中插入文本。就跟平常的编辑器一样。
② 在插入模式中,可以按ESC回到普通模式中 - 命令行模式
在命令行模式中,可以输入会被解释成并执行的文本。例如执行命令(:键),搜索(/和?键)或者过滤命令(!键)。在命令执行后,vim返回到命令模式之前的模式,通常是普通模式 - 可视模式
① 这个模式与普通模式比较相似。但是移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。当执行一个非移动命令时,命令会被执行到这块高亮的区域上。
② vim的文本对象也能和移动命令一样用在这个模式中 - 选择模式
这个模式和无模式标记器的行为比较相似(windows标准文件控件的方式)。在这个模式中,可以用鼠标或者光标高亮选择文本,不过输入任何字符的话,vim会用这个字符替换选择的高亮文本块,并且自动进入插入模式 - ex模式
这和命令模式比较相似,在使用:visual命令离开ex模式前,可以一次执行多条命令
二、基本的三种模式的切换
- ① vim启动默认进入普通模式,按
i或a可以进入插入模式 - ② 普通模式中按
:进入命令模式 - ③ 命令行模式中输入
wq回车后保存并退出vim - ④ 处于插入模式或命令行模式时只需要按
ESC或者ctrl+[即可进入普通模式
三、进入插入模式
在普通模式下,使用下面的键将进入插入模式,并可以从响应的位置开始输入
| 命令 | 说明 |
|---|---|
| i | 在当前光标处进行编辑 |
| I(大写的i) | 在行首插入 |
| A | 在行末插入 |
| a | 在光标后插入编辑 |
| o | 在当前行后插入一个新行 |
| O | 在当前行前插入一个新行 |
| cw | 替换从光标所在的位置后到一个单词结尾的字符 |
四、保存文档但不退出vim
在普通模式下,使用下面的键将保存文档但不退出vim
| 命令 | 说明 |
|---|---|
| w | 保存文档 |
| w+文件名 | 将文档保存为其他文件名或存到其他路径下 |
五、退出vim
在命令模式下:
| 命令 | 说明 |
|---|---|
| wq | 保存并退出编辑 |
| q! | 强制退出,不保存 |
| q | 退出 |
| wq! | 强制保存并退出 |
| x | 保存并退出 |
| wq | 保存并退出 |
在普通模式下:
使用组合键:shift+zz即可保存并退出vim
六、删除文本(命令模式下)
| 命令 | 说明 |
|---|---|
| x | 删除光标所在的字符 |
| X | 删除光标所在额前一个字符 |
| delete | 同x |
| dd | 删除整行 |
| dw | 删除一个单词(不适用于中文) |
| d$或D | 删除至行尾 |
| d^ | 删除至行首 |
| dG | 删除到文档结尾处 |
| d1G | 删除至文档首部 |
除此之外,还可以在命令之前加上数字,表示一次删除多行,如2dd表示一次删除2行
七、重复命令
vim可以重复执行上次执行的命令
普通模式下:
| 命令 | 说明 |
|---|---|
| . (小数点) | 重复上一次的命令操作 |
| N(command),N表示重复后面的次数 | 执行指定次数的相同命令 |
使用dw或者daw删除一个单词,也可以使用dnw(n替换为响应数字)表示删除n个单词(类似的还有很多)
八、光标的快速跳转
行间跳转:
普通模式下,使用下列命令在行间按行号进行跳转
| 命令 | 说明 |
|---|---|
| nG | 光标移动到第n行 |
| gg | 光标移动到第一行 |
| G | 光标移动到最后一行 |
注:
① 如果默认没有显示行号,先进入命令模式,输入set nu显示行号
② 在完成一次跳转后,可以使用ctrl+o快速回到上一次(跳转前)光标所在的位置
行内跳转:
普通模式下,使用下列命令在行内按栈单词为单位进行跳转
| 命令 | 说明 |
|---|---|
| w | 到下一单词的开头 |
| e | 到当前单词的结尾 |
| b | 到前一个单词的开头 |
| ge | 到前一个单词的结尾 |
| 0或^ | 到行头 |
| $ | 到行尾 |
| f 字母 | 向后搜索指定字母并跳转到第一个匹配的位置 |
| F 字母 | 向前搜索指定字母并跳转到第一个匹配的位置 |
九、复制粘贴和剪切
复制和粘贴文本
普通模式中使用y复制
| 命令 | 说明 |
|---|---|
| yy | 复制右边所在的整行(3yy表示复制3行) |
| y^或y0 | 复制至行首,不含光标所在的字符 |
| y$ | 复制至行尾。含光标所在的字符 |
| yw | 复制一个单词(y2w表示复制2个单词) |
| yG | 复制至文本末 |
| y1G | 复制至文本开头 |
| f 字母 | 向后搜索指定字母并跳转到第一个匹配的位置 |
| F 字母 | 向前搜索指定字母并跳转到第一个匹配的位置 |
普通模式中使用p和P粘贴
| 命令 | 说明 |
|---|---|
| p | 粘贴至光标后 |
| P | 粘贴至光标前 |
剪切及粘贴
其实前面的dd删除命令就是剪切,每次dd删除文档后便可以使用p来粘贴
tip:这一点可以让我们实现一个很爽快的功能——交换上下行: ddp
十、字符的替换和撤销命令
字符的替换和撤销命令都是在普通模式下的
| 命令 | 说明 |
|---|---|
| r待替换字母 | 将光标所在字母替换为指定字母 |
| R | 连续替换,直到按下ESC为止 |
| cc | 替换整行,即删除整行,并进入插入模式 |
| cw | 替换一个单词,即删除一个单词,并进入插入模式 |
| C | 替换光标以后至行末 |
| ~ | 转换光标所在字母的大小写 |
| u | 撤销一次操作 |
| U | 撤销当前行的所有修改 |
| ctrl+r | 撤销一个已经撤销的操作 |
十一、查找
快速查找
普通模式下输入
/,然后键入要查找的字符串,回车后就会进行查找?与/功能相同,只不过?是向上而/是向下查找。
进入查找之后,键入n和N可以继续查找。n是查找下一个内容,N是查找上一个内容
高级查找
普通模式下
| 命令 | 说明 |
|---|---|
| \* | 寻找光标所处的单词 |
| \# | 同\*,但\*是向前找,而#是向后找 |
| g\* | 同\*,但部分符合该单词即可 |
| g\# | 同\#,但部分符合该单词即可 |
以上查找n和N的继续查找命令依然可以用
十二、快速缩进
缩进操作在普通模式下有效
| 命令 | 说明 |
|---|---|
| >> | 将整行向右缩进 |
| << | 将整行向左回退 |
命令模式下可对shiftwidth值进行设置可以控制缩进和回退的字符数
set shiftwidth=n 设置缩进字符数为n
十三、调整文本位置
命令模式下输入
| 命令 | 说明 |
|---|---|
| ce | 使本行文本内容居中(center) |
| ri | 使本行文本内容靠右(right) |
| le | 使本行文本内容靠左(left) |
