本人是 VSCode 的重度使用者,最近突然发现能够在 VSCode 中使用 Vim 插件编写代码,所以就趁着机会学习下Vim指令。
一、Vim 的几种模式
1)正常模式(Normal):这个模式的主要任务就是移动光标。确定好光标位置以后,进行删除和粘贴操作。
2)编辑模式(Insert):这个模式的主要任务就是输入内容。
3)可视化模式(Visual):这个模式就是选择内容,能够进行复杂的复制(简单的复制在 Normal 模式下就可以)。
4)命令模式:执行一些 Vim 提供的指令,设置一些环境和整体的布局的内容。
二、Vim 常用命令
1)移动光标的指令
这个集合的指令,主要是在 Normal 模式下使用。让光标达到我们指定的地方。
最基本的移动方式,逐行移动和逐字符移动
j:光标向下移动一行
k:光标向上移动一行
h:光标向左移动一个字符,直到移动到行的最左侧为止
l:光标向右移动一个字符,知道此行的最后一个字符
逐个词的进行移动
这个是跳到单词的开头,有两个方向跳,大小写是否忽略符号
w:跳到下一个单词的开头上,不忽略符号。这个认为,连续的英文字母是词,连续的字符是不同的词。非连续的英文字母和非连续的字符都认为是不同的词。
W:跳到下一个单词的开头上,忽略符号。这个认为,只有空格分割的才是不同的词,不再区分字母和非字母。
b:跳到上一个单词的开头上,不忽略符号。
B:跳到上一个单词的开头上,忽略符号。
这个是跳到单词的结尾,有两个方向跳,大小写是否忽略符号
e:跳到下一个单词的结尾上,不忽略符号。
E:跳到下一个单词的结尾上,忽略符号。
ge:跳到上一个单词的结尾上,不忽略符号。
gE:跳到上一个单词的结尾上,忽略符号。
在一行的首和尾进行跳转
0: 光标移动到行的最左侧
$: 光标移动到行的最右侧
_:光标移动到行的句子的最前面
根据指定的字符,在一行内进行移动,这个要好好利用
f:在此行中向后查找接下来指定的字符,并将光标移动到此字符上
t:在此行中向后查找接下来指定的字符,并将光标移动到此字符之前
F:在此行中向前查找接下来指定的字符,并将光标移动到此字符上
T:在此行中向后查找接下来指定的字符,并将光标移动到此字符之后
;:重复上次的字符查找命令
,:反向查找上次的字符查找命令。
其实f 和 t 的区别,主要是用处不同,f在实际中主要用在根据字符查找,t在实际中主要根据标点查找。
针对页面的跳转
gg:光标移动到文档的最开始
nG:光标跳转到第 n 行上
G:光标移动到文档结尾
zz:使得当前光标的所在位置在界面的中心
zt:使得当前光标的所在位置在界面的上面
zb:使得当前光标的所在位置在界面的下面
这两个快捷键是我将原始的命令重映射的
Ctrl+h(原始 Ctrl+e):界面向上移动一行,光标不动
Ctrl+l(原始 Ctrl+y):界面向下移动一行,光标不动
2)编辑指令
这个指令也是在 Normal 模式下使用的
控制进入 Insert 模式后光标所在的位置
i:进入Insert模式,在光标当前的位置前开始输入字符。
a:进入Insert模式,在光标当前的位置后开始输入字符。
I:进入Insert模式,在光标所在整行的位置前开始输入字符。
A:进入Insert模式,在光标所在整行的位置后开始输入字符。
s:进入Insert模式,删除光标下的字符。
o:进入Insert模式,在当前行的下方插入一个新行。
O:进入Insert模式,在当前行的上方插入一个新行。
删除一部分内容(这个删除的也就是默认到剪切板,能够进行粘贴)
d:删除操作,通常与其他的操作进行配合。以下是例子
dw:当前所在字符到w跳转到的所有字符之间都删除。(dW,db,dB,de,dE,dge,dgE都相同)
df{char}:当前所在字符到f跳转到的所有字符之间的都删除。(dF{char}都相同)
dd:删除光标所在的当前行
d10j:向下的10行都删除
c:改变操作,其实与d的操相同,唯一不同的时,操作完成以后进入编辑模式。
r:用于替换单个字符
3)复制和粘贴
首先是复制操作
y:复制命令,通常与其他操作进行配合。以下是例子
yy:复制当前行,包括换行符。
y$:复制从光标位置到行尾的文本。
y^:复制从光标位置到行首的文本。
yw:复制到下一个词的开头。
这个与 d 操作很像,都是复制到光标跳转到的位置。
然后是粘贴操作
p:是将剪切的内容粘贴到当前光标的后面。
P:是将剪切的内容粘贴到当前光标的前面。
4)选择操作
这个主要是在 Visual 模式下的使用。
v:进入 Visual 模式,文本的选择是以字符为单位。
V:进入 Visual 模式,文本的选择是以行为单位。
进入 Visual以后选中内容,d 就是删除操作(也是剪切),y 是复制操作,u 所有字母变小写,U所有字母变大写。shift + > 整体向右移动,shift + < 整体向左移动
5)其他
:s/old/new: 替换文本中的所有匹配项(这个要先在 Visual下 选中)
:%s/old/new:替换整个文件中的所有匹配项
u:撤销
Ctrl+r: 恢复撤销
x:删除当前光标所在的字符
r:替换当前光标所在的字符
关于函数的一些,gd:进入函数定义,Ctrl+o 从函数定义中返回,gh查看函数参数等信息。
关于VScode 中文件跳转的一些,Ctrl+0:将光标从编辑器跳转到文件栏,j 和 k 进行移动,使用 space 展开或者关闭文件夹,使用 l 将光标选中的文件在编辑器中打开。
zc:折叠,只折叠当前的一层
zo:展开,只展开当前的一层
zC:递归折叠当前以下的所有层
zO:递归展开当前以下的所有层
/str:向下查找字符串 str
?str:向上查找字符串 str
n 跳到下一个匹配项, N 跳到上一个匹配项
:noh 或者 :nohl 取消查找的高亮
*: 选取光标所在处的整个字符,并向下查找。
#: 选取光标所在处的整个字符,并向上查找。
shift+%:应用在光标处为圆括号、大括号时,来查找另一个与之匹配的圆括号,大括号。
shift+c:清除该行光标之后的内容
shift+j:表示将下一行接到上一行,合并上下行
三、混合使用
1)diw,这其中的 i 指的是 ”inner“,还有一个对应的 a,即 ”around“。这里的 i 和 a 相当于是选择了范围。
2)其实很多操作指令基本上就是搭配范围来使用的。w 也是个范围,f也是范围。
3)xp:调换相邻两个字符,ddp 调换相邻两行。
4)注意:x 和 s,都是删除一个字符,不同的是 x 删除完字符以后会进入编辑模式。