vim自用使用指南
vim模式
vim主要分为几种模式:普通、命令、插入、可视
其中普通模式是vim启动时默认的模式,非普通模式之间的切换,需要回到普通模式才能进行切换。
-
普通模式 --> 插入模式:通过
i、a、o等进入i在光标前插入I在行首插入o在下一行插入O在上一行插入a在光标后插入A在行尾插入 -
插入模式 --> 普通模式:通过
ESC退出插入模式由于
ESC键较远,往往的我们会映射一些键作为ESC,例如j j、CapsLock等,这个可以根据个人喜好来进行映射 -
普通模式 --> 可视模式:通过
v进入 -
可视模式 --> 普通模式:通过
ESC或者再按一边v退出 -
普通模式 --> 命令模式:通过
:进入 -
命令模式 --> 普通模式:命令以回车结束运行,或者通过
ESC退出
光标移动
vim的光标移动均是在普通模式下移动的
以字符为单位(类似方向键)的光标移动是使用hjkl进行移动

以单词为单位的移动
w(word)跳到下一个单词的开头b(begin)跳到本单词或上一个单词开头e(end)跳到本单词或下一个单词的结尾ge跳到上一个单词的结尾

以行为单位的移动
0跳到行首^跳到行首开始的第一个非空字符$跳到行尾gg跳到第一行G跳到最后一行
跳转到同一行下一个指定字符 {char}为一个字符
f{char}光标跳到下个{char}F{char}光标跳到上个{char}t{char}光标跳到下个{char}前一个字符的位置 //不常用T{char}光标跳到上个{char}的后一个字符的位置 //不常用;重复上次跳转操作,反向查找上次的查找命令
操作符与动作
操作符也是在普通模式下进行使用。
操作符是在告诉vim我们要干什么
主要有四个操作符:
-
d(delete) 删除dd删除一行ndd删除n行,n为数字 -
c(change) 修改(删除并进入插入模式)cc删除一行并进入插入模式ncc删除n行并进入插入模式,n为数字 -
y(yank) 复制yy复制一行 -
v(visual) 选中并进入VISUAL(可视)模式
动作是告诉vim我们要怎么做,在使用操作符后,我们在的字符处的光标会变成半高的符号,接下来我们加上动作,注意:再键入一次的d也是一个动作
动作同样是有i和a两个,它们实际上代表的意思是inner和around

它们主要的区别是包含(i)与不包含(a)两边的符号
一些常见的动作motion
1 | iw : 当前单词 |
以d(delete)操作符常用的示例有
diw删除当前单词di( / dib删除当前小括号内的所有内容 注:b是(的替代da{ / daB删除当前包括大括号在内的所有内容 注:B是{的替代df{char}删除当前直到{char}处的内容d^ / d$删除当前直到开头(^) / 结尾处($)的内容die删除整个文件的内容dit删除一个HTML标签内的全部内容
一些额外的补充
p(paste)粘贴u(undo)撤回一个操作符+动作
上面讲的主要是d、c、y三个操作符,这三个操作符比较相似,接下来我们说v
v操作符是进入一个选择的模式,可以快速进入选择模式,进入后可以在后面添加我们的动作,如d删除选中的,iw选中一个单词等等
大小写转换
大小写转换比较简单
~将光标下的字母改变大小写{n}~将光标位置开始的{n}个字母改变大小写g~~改变当前行字母的大小写gUU将当前行的字母改成大写guu将当前行的字母改成小写gUiw(gUaw)将光标下的单词改成大写guiw(guaw)将光标下的单词改成小写
大小写转换也可以配合v操作符一起使用,在v操作符选中后,再使用U转换为大写,或者使用u转换为小写
开发Tips
-
gd(goto definition)查看函数实现 -
gh(goto hover)类似于鼠标悬浮查看的效果 -
gt往后跳转标签页gT往前跳转标签页{n}gt跳转到第{n}个标签页 -
ctrl+0跳转到资源管理器侧边栏,其他数字代表不同页面space展开文件夹、打开文件
插件
Easymotion
easymotion是vim的一个插件,在vscode的vim插件默认自带了这个插件
1 | "vim.easymotion": true |
通过这个来开启,在默认给出的配置文件,该插件是启用的
这个插件增加了快速跳转的功能,通过<leader>加上一些动作来完成操作,在vscode的vim的默认配置文件中,<leader>的默认指定为<space>
1 | "vim.leader": "s" |
我们通过这个可以修改<leader>使用的按键,使用快速跳转模式后,都会出现类似的界面
以上示例是在使用<leader><leader>b出现的界面,我们按下我们想跳转位置的有颜色的字母即可跳转到对应位置
它的具体用法有以下几种
-
前后位置跳转
<leader><leader>w(word)当前光标后面位置的单词开头<leader><leader>b(back)当前光标前面位置的单词开头 -
搜索跳转
<leader><leader>s{char}(search)搜索全部{char}的位置<leader><leader>f{char}搜索当前光标后面全部{char}的位置<leader><leader>F{char}搜索当前光标前面全部{char}的位置
还有很多种用法,可以前往官方提供的文档进行查看
在实际使用中,<leader><leader>w/b已经涵盖了大部分场景,几乎用不上其他用法
vim-surround
这个插件的主要作用是对含括类符号({}、()、""等)添加了动作 s–>surround(环绕)
-
ds{char}删除两边的{char} -
cs{char1}{char2}将两边的{char1}替换为{char2} -
ys{motion}{char}在动作{motion}选中的部分两端添加{char} -
S{char}在v模式下用{char}括起来选中的 -
gs{char}在v模式下用{char}括起来选中的,括号内文本做新一行例:
1
2
3
4Hello world!` =>
`Hello {`
`world`
`}!
建议参考文档、视频
https://github.com/ahrencode/Miscellaneous/blob/master/vim-cheatsheet.pdf