在 VSCode中使用 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… ,复制下面这几条命令
shell
复制代码
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
替换s
F
替换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
+w
v
左右ctrl
+w
s
上下
窗口切换
ctrl
+w
h
/j
/k
/l
ctrl
+w
w
关闭窗口
ctrl
+w
c
只保留当前窗口,关闭其他所有的窗口
ctrl
+w
o
新建文件/文件夹
在 keybindings.json 中添加按键配置
切换 files explorer 区域
shift
+ctrl
+h
vimctrl
+;
vscode
切换 editor 区域
shift
+ctrl
+i
vimctrl
+'
vscode
创建文件
- 在 files explorer 中:
a
(推荐) - 在 editor 中:
leader
+n
+f
vim (推荐) - vscode
command
+n
- 使用插件 file Utils
创建文件夹
- 在 files explorer 中:
A
(推荐) - 在 editor 中:
leader
+n
+d
vim (推荐) - 使用插件 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
一对块{}<
或>
一对<>t
XML 标签'
一对’"
一对”- ```一对`
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…
文件中大部分地方我添加了注释,后续如果有新的实用按键,我也会持续添加到本文中,配置文件也会持续更新,有兴趣的小伙伴可以点赞收藏一下。
作者:溪阳
链接:https://juejin.cn/post/7134701599833882655
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。