最近在学习使用 vim,希望可以通过vim来提升自己的开发效率。因此特地总结一些平时开发中常用的快捷键,因为我一般在VS Code中使用vim快捷键,所以需要在VS Code中进行一些配置,才可以完整的使用本文中的快捷键。
配置文件我会放到文章的最后,直接我的配置文件复制到VS Code的settings.json文件当中,就可以使用下面所有的快捷键。当然,有兴趣的朋友可以研究一下如何在VS Code中添加更多的vim快捷键。
vim 模式
-
normal 模式(默认)
-
insert 模式(输入模式)
- 按下
i,输入位置会落在当前光标选中位置的前面 - 按下
a,输入位置在落在当前光标选中位置的后面
- 按下
-
visual模式(可视化模式)
v进入可视化模式(基于字符进行操作)V进入可视化模式(基于行进行操作)
通常用来选择多行或代码块
control+v进入可视化模式(基于块进行操作)
通常用来同时操作多行的字符
退出当前模式
esc或j+k(需添加配置)control+[v退出可视化模式(字符)V退出可视化模式(行)
移动
-
k/j/h/l向上/下/左/右移动 -
shift+k/j/h/l快速向上/下/左/右移动(需要配置 + 搜狗输入法) -
移动到行首:
- 数字键
0 ^移动到本行第一个不是 blank 字符的位置 (配置后可用H)
- 数字键
blank 字符:空格、tab、换行、回车
- 移动到行尾:
$g+_移动到本行最后一个不是 blank 字符的位置(配置后可用L)
在 vim 中快速移动(shift+k/j/h/l)
- 修改 VS Code 中的 vim 配置,点击 github.com/VSCodeVim/V… ,复制下面这几条命令
defaults write com.microsoft.VSCode ApplePressAndHoldEnabled -bool false # For VS Code
defaults write com.microsoft.VSCodeInsiders ApplePressAndHoldEnabled -bool false # For VS Code Insider
defaults write com.visualstudio.code.oss ApplePressAndHoldEnabled -bool false # For VS Codium
defaults write com.microsoft.VSCodeExploration ApplePressAndHoldEnabled -bool false # For VS Codium Exploration users
defaults delete -g ApplePressAndHoldEnabled
- 调整键盘灵活度,设置 => 键盘 ,按键重复和重复前延迟都跳到最右边(Mac)
- 在搜狗输入法的 ABC 模式下,就可以实现快速移动(点击
shift切换搜狗中英文模式)
添加 vim 配置
在 vim 中按下操作符,会进入 pending 模式(添加配置后使用H/L向左/右移动)
y+shift+h复制光标到行前的全部内容d+shift+l删除光标到行尾的全部内容
以单词为单位进行移动
e移动到下一个单词的结尾(从左到右)w移动到下一个单词的开头(从左到右)b移动到上一个单词的开头(从右到左,反向操作)g+e移动到上一个单词的结尾(从右到左,反向操作)
一个符号就是一个单词,如:[
以字符串为单位的移动
字符串:多个单词和符号的组合(通常以空格进行分割)
E移动到下一个字符串的结尾(从左到右)W移动到下一个字符串的开头(从左到右)B移动到上一个字符串的开头(从右到左,反向操作)G+E移动到上一个字符串的结尾(从右到左,反向操作)
vim 删除单个字符
x删除光标所在的字符X删除光标前的字符s删除当前光标的字符并进入insert模式S删除当前光标所在行并进入insert模式
vim 替换单个字符
r替换一个字符R替换多个字符
vim 移动光标
z+z将当前行置于屏幕中央z+t将当前行置于屏幕顶部z+b将当前行置于屏幕底部g+g调到文件首部G调到文件尾部行数+g+g调到指定行行数+G调到指定行
vim 滚动
control+f向下滚动一屏control+b向上滚动一屏control+d向下滚动半屏control+u向上滚动半屏control+e向下滚动一行(光标不会移动)control+y向上滚动一行(光标不会移动)
vim 快速移动 5 行(需配置J/K)
J或5+j向下移动K或5+k向上移动
vim 高效移动
vim-easymotion(需在setting.json文件添加配置)
在 vim 中使用 easymotion 需要先开启,还可以在 vim 中修改<leader>对应的键位
基于单词的移动
<leader>+<leader>+w快速移动到单词的头部(向光标下面进行移动)<leader>+<leader>+b快速移动到单词的尾部(向光标上面进行移动)<leader>+<leader>+e快速移动到字符的尾部(向光标下面进行移动)<leader>+<leader>+g+e快速移动到字符的尾部(向光标上面进行移动)
基于行的移动
<leader>+<leader>+j快速移动到某行(向光标下面进行移动)<leader>+<leader>+k快速移动到某行(向光标上面进行移动)<leader>+<leader>+h快速移动到某行开头、结尾、大小写、_、,和#(向光标上面进行移动)<leader>+<leader>+l快速移动到某行开头、结尾、大小写、_、,和#(向光标下面进行移动)<leader>+<leader>+<leader>+j快速移动到某行(向光标上下任意进行移动)
vim搜索(需配置f/F,s/S)
需要在配置文件中开启使用 sneak:
单行内搜索
t+单个字符+回车正向移动到下一个字符所在之处的前一个字符上T+单个字符+回车反向移动到上一个字符所在之处的后一个字符上f+单个字符+回车正向移动到下一个字符所在之处F+单个字符+回车反向移动到上一个字符所在之处
快速移动时用 f,结合修饰符(c、d)时用t
基于全局进行跳转(基于两个字符进行跳转)
s+ 两个字符 全局查找(和f查找类似,向下查找)S+ 两个字符 全局查找(向上查找)
把s/S的功能添加到f/F(需添加配置)
f替换sF替换S
这样F ,f可以同时搜索一个字符和两个字符
;重复上次的字符查找命令(跳转到下一个字符的位置),反转方向查找上次的字符查找命令(跳转到上一个字符的位置)
给 s/S添加新的功能(需添加配置)
s删除当前字符C删除从当前光标到行尾的字符S删除本行字符并进入 Insert 模式
vim 全局搜索(和VS Code中的搜索功能类似)
/向后查找?向前查找n/N调到下一个/上一个要查找的词的位置/+ 上下左右 查看搜索历史- 输入单词的前几个字符进行搜索就可以
/+#向上查找(精确匹配)/+*向下查找(精确匹配)
处理包裹字符的符号(vim-surround)
c+s+要添加的符号+当前的符号使用新符号替换现在字符两端的符号,例如`cs"``y+s+要添加的符号+当前的符号在字符两端添加符号,例如:ysiw"
ysiwt + 标签名 可以使用标签包裹单词
d+s+当前的符号删除字符两端的符号S+要添加的符号给选中字符的两端添加符号(可视化模式下使用)
vim 常用的组合
- cw 删除当前单词(重命名变量名)
- ea 在当前单词结尾插入
vim 插入
I在行首插入A在行尾插入O在行前插入(另起一行)o在行后插入(另起一行)
vim 操作(复制,新增,删除)
操作符
d删除c删除并且进入 insert 模式y复制
vim 快捷操作
yy复制当前行p粘贴dd删除当前行
这里的复制粘贴与默认的command + c 或 command + v不冲突
vim 撤销和取消撤销
u撤销刚才的操作ctrl+r取消刚才的撤销
这两个操作都是基于vim的可撤销块去进行操作的,可撤销块是指进入插入模式后,每一次的插入或删除内容都会被当成一次修改。
可视化模式结合 k/j/h/l 进行范围操作
v+e选中当前单词o切换可视区的光标位置g+v回到上一次选择的选择区域
可视化模式下:选中 + 操作(增删改)
可视化模式常用的开发技巧
- 多行同时编辑:全部选中(
control+v)后使用A或I - 复制粘贴:系统的剪切板(
command+c/v)和 vim 的剪切板(yy/p)同时使用 - 尽量少用可视化模式(用最少的按键完成操作)
操作符 + 快速移动(需配置)
在 vim 中按下操作符,会进入 pending 模式,配置后可以用H/L进行左右移动
- 例如:
d+shift+l删除光标到行尾的全部内容
操作符结合数字使用
- 数字 +
operator+ 动作(范围) operator+ 数字 + 动作(范围)
示例:d + 3 + w 删除三个单词
点(.)
功能:重复上一次的修改
- 刚才进行的更新(增删改)
- 离开 insert 模式之前的全部按键操作记录
删除一个单词的命令如何选择(光标在单词尾部)
d+i+w
优先选择可以使用.进行重复操作的命令,如d+i+w
一键移动 一键操作
- 快速在尾部加
;
-
j+L+a+;j+A+;然后就可以使用j+.+j来一直自动跳转到下一行的尾部并进入 insert 模式
查找手动替换
/+ 要查找的词cw+ 要替换的词n切换到下一个位置.替换
能够重复就不要使用次数(数字)=> 执行
vim 编辑文件
vim test有 test 文件则进入 test 文件,没有则创建 test 文件并进入:wq写入内容并退出cat test.txt查看当前 test 文件的内容:q!强制退出(不保存当前对文件的修改)
选中函数
v+a+I选中当前整个函数v+a+i选中当前整个函数(不包含最后一个括号)v+i+i选中当前函数中的内容
上面这三个快捷键组合都是基于缩进进行选择,可以先格式化代码再选择
悬浮显示
g + h 悬浮显示(一般用于查看报错的代码提示信息)
大小写
- normal 模式:
g+u变为小写,g+U变为大写 ,例如:gUiw把当前单词全部变成大写 - 可视化模式:
u变成小写,U变成大写,例如:veU把当前单词全部变成大写 - 大小写切换:
~normal 模式和可视化模式都可以使用 v+e选中单词,shift+~把单词每个字母都变成大写
注释
g+c单行注释g+C多行注释
normal 模式和可视化模式都可以使用
vim 调用 VS Code 的命令
格式化文档
shift+alt+f或<leader>+f+d
重命名(函数或变量)
f2或<leader>+r+n
折叠代码
Mac: alt + command + [
windows: ctrl + shift + [
vim: <leader>+ [
展示代码
Mac: alt + command + ]
windows: ctrl + shift + ]
vim: <leader> + ]
窗口管理
使用一下vim快捷键时记得提前设置一下VS Code的按键,避免冲突
新建窗口
ctrl+wv左右ctrl+ws上下
窗口切换
ctrl+wh/j/k/lctrl+ww
关闭窗口
ctrl+wc
只保留当前窗口,关闭其他所有的窗口
ctrl+wo
新建文件/文件夹
在 keybindings.json 中添加按键配置
切换 files explorer 区域
shift+ctrl+hvimctrl+;vscode
切换 editor 区域
shift+ctrl+ivimctrl+'vscode
创建文件
- 在 files explorer 中:
a(推荐) - 在 editor 中:
leader+n+fvim (推荐) - vscode
command+n - 使用插件 file Utils
创建文件夹
- 在 files explorer 中:
A(推荐) - 在 editor 中:
leader+n+dvim (推荐) - 使用插件 file Utils
vim 多文件之间的跳转
标记
m+ 小写字母 例如:mm对单文件进行标记m+ 大写字母 例如:mM对多文件进行标记
跳转
'例如:'m跳转到标记的行- ``` + 之前标记的字符 例如:``m` 跳转到标记的行和列(更精准)
jump to definition
g+d查找定义的变量并进行快速跳转(单文件和多文件都可以查找)
-
l跳转 / 打开目录h回到目录esc退出选择的模式
跳转
任何大于一个单词或超过当前行导航的移动都是一个跳转(跳转记录也会被记录到 vim 中)
vim-sneak 的跳转只记录一次
ctrl+i向后跳转ctrl+o向前跳转
常用操作:
g + d 查看当前变量的引用,ctrl + o 返回之前查看的位置
记录跳转
vim 保留了移动前位置的记录,可以使用:jumps查看
命令
{跳转上一个段落}跳转下一个段落
vim 文本对象
文本是结构化的,可以快速选择
vim 文本对象用法
- 操作符(operator) + (内部
i/ 外部a) + 文本对象 - 可视化模式 + (内部
i/ 外部a)+ 文本对象
vim 文本对象
w一个单词(或)一对()b一对()[或]一对[]{或}一对{}B一对块{}<或>一对<>tXML 标签'一对'"一对"- ```一对`
s一个句子(以.,!或?结尾的语句)p一个段落
vim 文本对象实践示例
v+i+b选中括号里面的内容v+i+(选中括号里面的内容(包含括号)d+i+b删除括号里面的内容v+i+w选中当前单词
vim-textobj-arguments
i+a不包含分隔符a+a包含分隔符
实践技巧
d+a+a删除一个参数c+i+a修改一个参数
vim-textobj-entire
d+a+e删除当前文本所有内容d+i+e删除当前文本所有内容,但是不包含前面和后面的空格
vim 在 VS Code 中操作git
显示侧边代码控制面板
ctrl+shift+g空格+g+g
git 添加到缓存区(git add .)
空格+g+s
git 提交(git commit)
空格+g+c
git 查看差异(git diff)
空格+g+d+f
git 取消add
空格+g+u
git 取消对文件的修改
空格+g+c+l
vim 在 VS Code 中重构
重构按键
ctrl+shift+r只展示重构代码相关操作ctrl+.展示重构代码和其他选项
vim 选中函数中所有代码
v+i+i
提炼为一个函数
- 选中要提炼的代码
ctrl+.选中提炼成一个函数- 也可以提炼成一个内联的函数
提炼为一个变量
- 和提炼为函数操作基本一致
- 选中变量名,
ctrl+.提炼为一个变量
插件
语法报错的话需要先修改语法错误才可以进行重构操作
hocus pocus(vscode 插件)
- 先使用变量/函数,再创建变量/函数
<Space>+f+f创建函数<Space>+v+v创建变量
这是我的配置文件链接:github.com/MambaNeverO…
文件中大部分地方我添加了注释,后续如果有新的实用按键,我也会持续添加到本文中,配置文件也会持续更新,有兴趣的小伙伴可以点赞收藏一下。