目录
今天(2019/12/06)开始正式学习vim,俗话说磨刀不误砍柴工,用好工具势必能够提升自己的编程效率。
本文将对vim的基础操作进行学习,并且结合示例进行讲解。
方便日后复习可以快速回忆,当然最好是日后已经养成肌肉记忆啦。哈哈哈哈(#^.^#)
一、在vscode上安装vim插件
easy:
按下左侧extensions-》在搜索框输入vim-》点击下图第一个选项的install(我已经安装好了)
安装结束后就可以使用 vscode 下的 vim 模式了
推荐: 关闭 vim 扩展的 useCtrlKeys, 保留一些 VS Code 自身的一些常用快捷键, 在 settings.json 里面添加配置 “vim.useCtrlKeys”: false
二、基础概念
1.模式:
命令(按键) | 作用 |
ESC | 进入normal模式(默认的模式) |
i | 进入插入模式(insert的缩写) |
v | 进入试图模式(view的缩写) |
2.光标上下左右:
命令 | 作用 | 模式 |
---|---|---|
h | 光标向左移动一格 | Normal |
l | 光标向右移动一格 | Normal |
j | 光标向下移动一行 | Normal |
k | 光标向上移动一行 | Normal |
上下左右键 | 上下左右切换光标 | Normal & Insert |
三、光标定位进阶
1.行内光标定位
注:banlk 字符是指 空格, tab, 换行, 回车等;^和$ _等符号需要加shift健才能使用。
命令 | 作用 | 模式 |
---|---|---|
0 | 到当前行开头 | Normal |
home | 到当前行开头(平常文本编辑也可以用,这里推荐在insert时需要使用) | Normal & Insert |
^ | 到当前行第一个不是 blank 字符的位置 | Normal |
$ | 到当前行末尾 | Normal |
g_ | 到当前行最后有一个不是 blank 字符的位置 | Normal |
gg | 到第一行 | Normal |
nG | n 为行编号, 到第 n 行 | Normal |
G | 到最后一行 | Normal |
2.词汇定位
注:一个单词由字母、数字和下划线组成
命令 | 作用 | 模式 |
---|---|---|
w | w(小写), 到下一个单词的开头 | Normal |
e |
e(小写), 到下一个单词的结尾 | Normal |
每次移动会到达()等符号及其内部。如果想要跳跃的幅度变大,比如移动到忽略()及其内部单词,可以使用大写W/E
尝试一下:
(0)初始状态:
(1)按小写 w:
(2)按小写 e:
可以看到,如果光标不处于末尾,按e不会立即移动到下一个单词末尾,而是先到当前单词末尾
(3)按大写 W:
光标直接跳过(origin)移动到写一个单词开头
(4)按大写 E:
光标跑到")",说明大写的W和E是把print(origin)看成是一个整体来移动光标。
3.单词匹配
命令 | 作用 | 模式 |
---|---|---|
* | 移动到与当前光标匹配的下个单词(目前装的VS Code Vim 组件不生效) | Normal |
# | 移动到与当前光标匹配的上个单词 | Normal |
尝试一下:
(1)按 *
原位置:
按下后:
(2)按 #:
原位置:
按下后:
注:光标所处在单词的哪个位置不重要,匹配的是当前光标所在的整个单词。
4.括号匹配
命令 | 作用 | 模式 |
---|---|---|
% | 定位与光标所在括号相对应的另一半,(使用前要将光标定位在某个括号上) | Normal |
easy:-->
四、插入
vim 插入命令,光标定位完成后,进行插入操作前的命令, 命令执行后切换至 Insert 模式
命令 | 作用 | 模式 |
---|---|---|
a | 在光标后插入( 光标定位后输入 i 命令默认是光标前插入的) | Normal |
o | 小写 o 在当前行之后插入新的一行,相当与回车效果 | Normal |
O | 大写 O 在当前行之前插入新的一行 | Normal |
尝试一下:
(0)初始光标位置:
(1)按 i
(2)按 a
(3)按 o
(4)按O
五、查找
vim 是通过正则匹配来实现的
在 Normal 模式下, 先输入 /, 进入搜索模式
输入想要搜索的词汇, 此时在 vs code 中会高亮所有匹配项
单击 enter(回车) 键后, 点击 n 键就可以光标一个个定位匹配项
六、替换
(vim的语法在vs中无法实现替换,可以使用自带的ctrl+H实现替换)
尝试一下:
(1)按ctrl+H:输入内容:origin
高亮显示查找到的内容
(2)替换
输入替换内容
分两种情况:
按回车:替换一个匹配内容
按ctrl+alt+enter:替换全部匹配内容
七、粘贴
命令 | 作用 | 模式 |
---|---|---|
p | 小写 p, 在光标之后插入拷贝项 | Normal |
P | 大写 P, 在光标之前插入拷贝内容 | Normal |
np(nP) | 重复复制 n 次 | Normal |
尝试一下:
初始:复制的内容是 print,光标位置如图所示
(1)p(小写)
(2)P(大写)
(3)np
测试:3p
nP同理,粘贴三次在r前面
八、拷贝
命令 | 作用 | 模式 |
---|---|---|
y | 拷贝当前行以及其后面一行,共两行 | Normal |
yy | 拷贝当前行 | Normal |
nyy | n 为大于数字, 拷贝 n 行, 第一行为光标所在行 | Normal |
ye | 从光标位置开始拷贝,至遇到第一个空后结束(不包括空格) | Normal |
yw | 从光标位置开始拷贝,至遇到第一个空后结束(包括空格) | Normal |
y$ | 从光标位置开始拷贝,到当前行行末, 包括空格 | Normal |
y0 | 从光标位置开始拷贝,到当前行行首, 包括空格 | Normal |
ynl | 从光标位置开始, 向右拷贝 n 个字符 | Normal |
ynB | 从光标位置开始,向左拷贝 n 个单词 | Normal |
1.尝试一下
初始:
(1)y:
(2)yy:
(3)nyy:
(这里测试使用的是2yy)
(4)ye
(5)yw:
可见ye和yw粘贴后光标的位置是不一样的,yw包含当前拷贝单词后面的空格
(6)y$:光标从第二行的p处开始
(7)y0:光标初始位置在第二行最后一个右括号
从后往前,不包含光标当前位置
(8)ynl:
示例:y4l
(9)ynB
测试:y2B
从光标处,向左拷贝2个单词,拷贝的模式是大写的W/E模式。括号内和单词算一个整体
2.如何拷贝某一块区域, 比较精确的选择拷贝区域?
在 Normal 模式下, 将光标定位至目标拷贝区域的开始或结束位置,
输入命令 v(小写) 进入试图模式
移动光标,光标所经过的位置都被选中,(跟鼠标选中形式一样)
区域选定结束后, 输入 y 命令, 复制成功
如果输入 大写 V 命令, 此时只能以行为单位选中区域
九、删除
命令 | 作用 | 模式 |
---|---|---|
dd | 剪切当前行 | Normal |
ndd | 剪切 n 行, 当前行为第一行 | Normal |
dw | 从光标位置开始剪切, 至遇到第一个空后结束(包括空格) | Normal |
de | 从光标位置开始剪切, 至遇到第一个空后结束(不包括空格) | Normal |
d$ | 从光标开始位置剪切, 至当前行行末, 包括空格 | Normal |
d0 | 从光标开始位置剪切, 至当前行行首, 包括空格 | Normal |
dl | 删除光标所在字符 | Normal |
dh | 删除光标所在位置之前字符 | Normal |
dnl | 从光标位置开始, 向右剪切 n 个字符 | Normal |
dnh | 剪切光标之前的 n 个字符(不包括光标所在字符) | Normal |
dH | 剪切当前光标之前所有内容 | Normal |
dL | 剪切当前光标之后所有内容(包括光标所在字符) | Normal |
部分操作与拷贝类似,以下仅示范:
dl dnl dh dnh dH dL
初始:
(1)dl
(2)dnl
示例:d2l
(3)dh
(4)dnh
示例:d2h
(5)dL
(6)dH
如何 比较精确地删除区域
同上文的拷贝一样, 只需把 拷贝命令 y 换成 删除命令 d 即可
十、其他常用操作
1、重复之前的命令
Normal 模式下输入 .(小数点)
假设上一条命令是拷贝:print(origin)
按‘ . ’:
按‘ . ’一时爽,一直按一直爽:
2.全选(复制/删除)
Normal模式下, 首先全选文档: ggVG/ggvG => (gg 让光标移动到首行, v/V 进入Vision 模式, G 移动到最后一行)
输入 d 删除选中内容, 输入 y 复制选中内容流畅来一遍:
ggvG
3.代码缩进
Normal 模式下, 进入 Vision 模式, 选中目标代码块,
快捷键 shift+> 向右缩进
快捷键 shift+< 向左缩进
v模式下选中:
向右缩进:shift+>
向左缩进:
4.撤销/取消撤销修改
撤销修改命令 和 取消撤销修改命令
命令 | 作用 | 模式 |
---|---|---|
u | 撤销上步修改 | Normal |
END
加油:)