vscode代替vim的部分基本配置
输入法选择
一般个人习惯是在新机配置编辑环境前, 先配置下输入法。
可以使用rime, 来作为编辑环境的输入法。()
rime是一个可高度自定义的开源输入法,可以很轻松的根据自身需求来定制,从而提升日常效率。
推荐原因: 可满足个人需求的代码,中文,英文三模式快速切换。以及其他一些功能的自定义, 非常零活。
有同样需求的, 可参考下我的输入环境配置[链接]。
日常使用相关
首先声明下,这只是个人的使用习惯,并不适用于所有人,毕竟选择vscode就是为了满足自身低门槛的可定制性需求; 对于养成你自己的习惯,也有如下建议,可以做为参考。
例如,可以在帮助(H)
的编辑器操场,来寻找适合自己的习惯。或者先用起来,不合适在慢慢寻找调整,最终找到最符合自己的习惯。再或者,多自己去折腾寻找,查阅各种分享,都是可以的。
Ctrl+"space"
在 vscode 中的作用为 显示/隐藏 代码提示 。可更换其快捷键(如更换为Alt+"/"
), 或修改win注册表禁用win系统对Ctrl+"space"
快捷键的强制绑定, 或通过第三方键绑定来实现修改。- 关闭部分自动补全的触发时机
- 关闭写函数时, 通过括号触发自动补全建议的确认。–由于这样很容易造成意外情况,因此关闭这个设置。
在设置中搜索 “accept suggestion oncommit character”然后取消勾选即可
- 关闭写函数时, 通过括号触发自动补全建议的确认。–由于这样很容易造成意外情况,因此关闭这个设置。
vscode中的快捷键及功能
常用的默认快捷键
多窗口间多文件间如何快速切换
快捷键 | 功能 |
---|---|
Ctrl + B |
打开/隐藏 侧边栏 |
Ctrl + "+"/"-" |
放大/缩小 view |
Ctrl+"space" |
显示/隐藏 代码提示(windows中和系统快捷键冲突,故本人修改为Alt+"/" )或 (通过注册表禁用系统自身对此快捷键的强绑定[方法链接]) 或 通过第三方的键绑定软件间接映射实现 |
Ctrl+Shift+"space" |
显示/隐藏 代码提示(参数提示) |
Ctrl+o |
从打开文件中返回(和vim中的gd配合使用) |
终端中: code+文件名 |
在终端中用code打开文件 |
Alt+"鼠标左键" |
实现任意位置 多光标 (与vim中的Ctrl+v 模式, 那个方便用哪个) |
Ctrl+Shift+P | |
> zen | 进入/退出 zen模式 |
> 侧边栏中已载入文件的文件名 | 打开对应文件(在vscode中,打开文件的方法很多,因此我很少使用vim中底线命令模式下e+"文件名"的方式来打开文件 |
| |
Alt+"1~9" |
在已打开的文本文件中切换(也就1~4 常用) |
Ctrl+tap 或Ctrl+Shift+tap 个人习惯用vim下的 gt 或gT |
在已打开的文本文件中切换(常用方法 Ctrl不松,不断tap来切换) |
| |
Ctrl+0 |
进入侧边栏(0窗口) |
Ctrl+"1~9" |
从左依次往右的窗口(不怎么上下分窗口,故无验证。这里仅提到涉及左右的切换) |
| |
Ctrl+反引号 |
打开/关闭终端) |
新增,切换等 |
可根据自身需求来自定义终端间的切换、新增 等快捷 |
code + fileName |
在当前vscode窗口中打开文件 (若文件不存在会自动新建) |
自定义快捷键,满足个人需求(附详细过程)
1 | 对于已知某个快捷键对应某项功能时, 想要在此功能的现有快捷键上新增键绑定。 有可能遇到重复的键绑定过多而无法确定此项功能的"键绑定ID"的情况 |
多窗口间如何更快速定位/切换
标签换行
- 打开设置, 搜索
Wrap tabs
, 勾选即可。 -> 很久以前也有插件的方法, 不过这是官方更新、比较方便。
- 打开设置, 搜索
Ctrl+Shift+p
打开命令面板打开后,可输入想要使用的命令, 其另一个快捷键为F1, 已被本人删除。 因为之前在Qt和Visual Studio上习惯用
F1
跳转api文档,故通过用户任务+第三方语言插件+键绑定为F1
实现了此功能(部分api无法跳转,还未解决,故实用性还较弱,不再此说明…)- 绑定命令面包开启后,上下移动相关的快捷键,方便使用键盘直接上下移动选择,以及确认动作(主要是由于vim后遗症)
只是上下选择, 需要确认后才打开(推荐)
- 上移 workbench.action.quickOpenSelectPrevious 的键绑定为
Ctrl+P
when表达式内容inQuickOpen
- 下移 workbench.action.quickOpenSelectNext 的键绑定为
Ctrl+N
when表达式内容inQuickOpen
- 确认 workbench.action.acceptSelectedQuickOpenItem 的键绑定为
Ctrl+space
when表达式内容inQuickOpen
。 (win平台下使用Ctrl+space
需修改注册表,或通过第三方键绑定来映射)
- 上移 workbench.action.quickOpenSelectPrevious 的键绑定为
选择后自动直接打开, 不需要确认(不建议)
- 上移 workbench.action.quickOpenNavigatePrevious 的键绑定为
Ctrl+P
when表达式内容inQuickOpen
- 下移 workbench.action.quickOpenNavigateNext 的键绑定为
Ctrl+N
when表达式内容inQuickOpen
- 上移 workbench.action.quickOpenNavigatePrevious 的键绑定为
- 绑定命令面包开启后,上下移动相关的快捷键,方便使用键盘直接上下移动选择,以及确认动作(主要是由于vim后遗症)
Ctrl+q
打开视图面板(用于跳转vscode界面的一切窗口,非常有用)跟
ctrl+shift+p
使用建议一样,建议选择非自动打开的- workbench.action.openView 的键绑定为
Ctrl+q
(我习惯绑定Ctrl+0
) 用于打开面板,默认绑定的哪个是自动确认选择并立即消失的,把另一个无配置的做相同绑定后,解除自动确认选择,改为手动上下+确认 - workbench.action.quickOpenNavigateNextInViewPicker 的键绑定为
Ctrl+N
用于代替下箭头按键
- workbench.action.quickOpenNavigatePreviousInViewPicker 的键绑定为
Ctrl+P
拥有代替上箭头按键
- workbench.action.acceptSelectedQuickOpenItem 的键绑定为
Ctrl+space
when表达式内容inQuickOpen
- workbench.action.openView 的键绑定为
总结: 通过以上命令,可随意在各个窗口中有来有回,使用键盘快速定位到想要操作的一切文件。
代码书写优化,增加
Ctrl+space
作为接受代码建议的快捷键- acceptSelectedSuggestion 的键绑定改为
Ctrl+space
(需改注册表 或 通过第三方键绑定,如先改键绑定为Alt+NumPad7
, 再由可进行键绑定的第三方软件(win下如PowerToys)进行快捷键映射, 最终实现Ctrl+space
的绑定)
- acceptSelectedSuggestion 的键绑定改为
代码书写优化,增加
enter
关闭代码建议窗口(原作用为接受建议快捷键)由于平时输入法打字习惯使用回车来取消选择, 故做此配置
- hideSuggestWidget 的键绑定添加
enter
(可在命令面板打开首选项:打卡键盘快捷方式(JSON)
)
- hideSuggestWidget 的键绑定添加
代码错误提示快速修复的选择快捷键, 新增”Ctrl+p”和”Ctrl+n”以及确定用的”Ctrl+space”(以便更符合vim用户的习惯)
键绑定id分别是”selectPrevCodeAction”和”selectNextCodeAction”以及 “acceptSelectedCodeAction”
- 在原有键绑定上新增即可,手把手过程略(过于简单)
代码书写优化,增加格式化代码的快捷键(借鉴vim此功能的键位
==
,并使用vscode的Api简化其操作)ctrl+shift+p
打开命令面板, 搜索’打开键盘快捷方式’等关键字来打开快捷键配置的json文件keybindings.json
添加以下配置
1
2
3
4
5
6// 格式化代码
{
"key": "oem_plus oem_plus", //向vim自带的那样使用, "==" 来格式化代码, 这里直接将"=="映射至vscode的全局格式化api, 以达到日常使用格式化时抛弃ggVG。
"command": "editor.action.formatDocument",
"when": "editorTextFocus && vim.active && !inDebugRepl && vim.mode != 'Insert'"
},
必用插件(vscodevim)的使用,所带来的快捷键
单窗口单文件内如何快速定位
单窗口多文件间的快速切换
对于单文件文本相关的快捷键操作,我习惯使用vim插件代替vscode原有的快捷键:(弃用Vim插件相关的快捷键可在设置中搜索 Vim:Handle keys
编辑其json文件来弃用
阅读说明:
- 只会列出常用且已完善的
--·-->
–·–> 代表解释()
–·–> 代表补充说明
命令模式/可视模式 下:
esc
–.–> 进入命令模式在命令模式下使用
v
–.–> 进入可视模式- 单词
w
–·–> 定位光标至后面一个单词开头b
–·–> 定位光标至前面一个单词开头e
–·–> 定位光标至本单词末尾
- 单句 (单句,指的就是不包括单行内行首行尾的空格)
^
–·–> 定位光标至本句 的 句首 (不需要句尾,因为用不到)
- 单行 (单行,指的就是包括单行内的所有空格)
$
–·–> 定位光标至本行 的 行尾 (记忆Shift+4
也行,个人习惯记忆$
)0
–·–> 定位光标至本行 的 行首
- 多字母与多行
k
–·–> 定位光标至 上一行 ↑j
–·–> 定位光标至 下一行 ↓h
–·–> 定位光标至 前一个字母(或空格) ←l
–·–> 定位光标至 后一个字母(或空格) →
- 单屏幕
H
–·–> 定位光标至 屏内顶行L
–·–> 定位光标至 屏内底行M
–·–> 定位光标至 屏内中间行
- 单文件
gg
–·–> 定位光标至 文件开头 (全文件第一行)G
–·–> 定位光标至 文件末尾 (全文件最后一行)
- 文件内浏览
Ctrl+d
–·–> 光标下移半屏 (也可以理解为 “将文本上翻半屏”) (记忆技巧 down)Ctrl+u
–·–> 光标上移半屏 (也可以理解为 “将文本下翻半屏”) (记忆方法 up)Ctrl+e
–·–> 文本上滚 (下拉 滑鼠条 效果)Ctrl+y
–·–> 文本下滚 (上拉 滑鼠条 效果)Ctrl+f
–·–> 光标下移整屏 (也可以理解为 “将文本上翻整屏”) –·–> 在vim下弃用 (众所周知,vscode中Ctrl+f
为简单搜索快捷键,故同时弃用了–·–>vim中底线命令模式下的搜索功能)Ctrl+b
–·–> 光标上移整屏 (也可以理解为 “将文本下翻整屏”) –·–> 在vim下弃用 (众所周知,vscode中Ctrl+b
为 显示/隐藏 侧边栏)
- 其他
~
–.–> 大小写切换/
+搜索内容
–.–> 搜索内容(enter
后配合N/n
来上下选择)(其中搜索内容还可以是正则表达式):s/搜索内容/替换字符串/
–.–> 替换内容(其中搜索内容还可以是正则表达式)gh
–·–> 打开 代码注释标签页小窗口(代码小窗口无法通过快捷键来操作, 官方vscode也并无支持此功能的意愿, 暂时使用此方案平替)gd
–·–> 进入代码块 (相当于goto进去)ctrl+o
–.–> 从定义文件返回,关闭函数标签显示gt
–.–> 向右侧切换文件(gT
向左侧切换->我自定义了同样功能的tg
快捷键->因为我认为tg
使用起来比gT
方便的多)f
+需要跳转的字符
–.–> 光标定位至第一个匹配项(F
反向匹配跳跃)t
+需要跳转的字符
–.–> 光标定位至第一个匹配项的前一项(F
反向匹配跳跃)\\s
+需要跳转的字符
–.–> 进入跳转视图,会将匹配到的所有符合条件字符用其他字母高亮显示出来,输入对于位置的高亮字符,即可完成快速的光标定位ds
+现有符号
–.–> 删除光标所在区域两侧所能匹配到的一组现有符号di
+现有符号
–.–> 删除光标所在区域两侧所能匹配到的一组现有符号内的所有字符(不包括符号)da
+现有符号
–.–> 删除光标所在区域两侧所能匹配到的一组现有符号内的所有字符(包括这组符号)m
+小写数字或字母
–.–> 标记单文件书签 (如ms
)m
+大写数字或写字母
–.–> 标记可多文件间跳转的书签 (如mS
)单引号+所标记的-大/小写->数字或字母
–.–> 跳转到此书签所在行 (如's
、's
)反引号+所标记的-大/小写->数字或字母
–.–> 跳转到此书签所在列 (如's
、's
)>>
或<<
–.–> 对整行代码,缩进所缩退(多行时,前面+n
->n代表数字即可)(或在可视模式下,选择多行后,单个>
或<
即可)数字+两个等号
–.–> 对多行进行自动缩进,常用n==
(n代表数字)来局部排版gg+v+G+两个等号
–.–> 对整篇文档进行自动缩进,常用来整篇排版
- 单词
底线命令模式
esc
–.–> 进入命令模式在命令模式下使用
:
–.–> 进入底线命令模式w
–.–> 保存当前文件q
–.–> 退出当前文件wq
–.–> 保存并退出当前文件!q
–.–> 强制退出当前文件s/搜索内容/替换字符串/
–.–> 替换内容(其中搜索内容还可以是正则表达式)marks
–.–>查看当前文件我们可以跳转的标记书签,还可以选择对应书签进行跳转(不过这样跳转有bug,主要还是查看用)delmarks+所标记的-大/小写->数字或字母
–.–> 删除对应书签(删除多个书签时, 使用space
空格隔开即可)delmark或delmarks
都可以。
插入模式下:
esc
–.–> 进入命令模式在命令模式下,根据自身需求通过
i、o、a、I.....
进入插入模式此模式中提到的快捷键, 大多为vscode的原生配置
代码提示相关:
tap 或 enter
–·–> 确认选择此提示ctrl+p
–·–> 提示选择上移 (记忆技巧up/prev) (键绑定中搜索 showPrevParameterHint,然后添加 ctrl+P 快捷键 以达到代码提示向上切换)ctrl+n
–·–> 提示选择下移 (记忆技巧down/next) (键绑定中搜索 showNextParameterHint,然后添加 ctrl+n 快捷键 以达到代码提示向下切换)ctrl+"space"
–·–> 显示/隐藏 代码提示 (在windows中,此快捷键和系统快捷键冲突,故本人修改为 Alt+”/“, 搜索”触发建议”修改其键绑定)(之后又将其切换了回来、有两种实现方法:1.修改注册表、2.映射键绑定)
代码格式提示相关: (参数提示)
ctrl+Shift+"space"
–·–> 显示/隐藏 代码格式提示(参数提示)(搜索”触发参数提示”可修改其键绑定)ctrl+p
–·–> (键绑定中搜索 showPrevParameterHint, 然后添加 ctrl+p 快捷键 以达到参数提示上翻页)ctrl+n
–·–> (键绑定中搜索 showNextParameterHint, 然后添加 ctrl+n 快捷键 以达到参数提示下翻页)
代码书写优化,增加
Ctrl+space
作为接受代码建议的快捷键代码书写优化,增加
enter
关闭代码建议窗口(原作用为接受建议快捷键)
可视模式:
esc
–.–> 进入命令模式在命令模式下使用
v
–.–> 进入可视模式shift+s
+符号/任意字符
–.–> 对所选中部分的两侧, 添加符号/任意字符gb
–.–> 多光标,每操作一次都对相同的其他选项添加一个光标ctrl+v
–·–> 进入可视模式(列编辑)Shift+i/a/d
–·–> 在ctrl+v
下, 插入或删除操作, 注意加Shift
iw
–·–> 选中光标所在位置的单词(不包含两边空格)(相当与你在命令模式下 删除单词时使用的 diw, 相似的命令模式下命令 还有di
+'
/"
/)
/t
(代表html标签)/……所有对称的结构 )aw
–.–> 选中光标所在位置的单词(包含两边空格)
vim插件配置中英自动切换
安装
vim(vscodevim)
- 配置中英文切换(和vim中 xkbswitch插件一样的效果)
- 打开其配置设置,搜索:im-select
- 找到配置按官网文档操作即可
- 这里给出windows下的配置过程(仅供参考)
- 第一步,下载其提供的im-select.exe应用程序
- 第二步,在电脑上添加英语语言(这里国家选择美国)
- 第三步,在vscodevim的设置中,加入exe路径并使能自动输入法的切换,然后切换到1033(第二步选英语美国的话,这里是1033,其他的自行查阅文档)\
- 配置中英文切换(和vim中 xkbswitch插件一样的效果)
vim插件配置
tg
来代替gT
使用、 以及利用vim配置ge
快捷键(来代替vscode原生Alt+F8
显示错误提示的快捷键)通过
Ctrl+Shift+p
打开命令面版后, 搜索打开用户设置
,来打开用户配置文件sttings.json
在
sttings.json
中添加如下代码段即可:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23"vim.normalModeKeyBindings": [
// ( 将 gt 倒过来最有性价比)
// vim插件配置`tg`来代替`gT`使用
{
"before": [ "t", "g" ],
"commands": [ ":tabp" ]
},
//////////////////////////////////////////////////////////////////////////
// vim配置`ge`来用于显示错误提示
// // 增加查看错误提示快捷键(vscode默认为 Alt+F8)(我想将其设置为vim命令行和可视模式下的 ge)
{
"before": ["g", "e"],
"commands": ["testing.goToNextMessage"] // 测试: 转到“下一个测试失败”
},
{
"before": ["g", "e"],
"commands": ["editor.action.marker.next"] // 转到下一个问题 (错误、警告、信息)
}
],
vim插件配置: 用快捷键’gl’来完成代码块折叠状态的切换(vscode中此功能的默认快捷键为
Ctrl+k+l
, 操作比较繁琐)通过
Ctrl+Shift+p
打开命令面版后, 搜索打开用户设置
,来打开用户配置文件sttings.json
在
sttings.json
中添加如下代码段即可:1
2
3
4
5
6
7
8
9"vim.normalModeKeyBindings": [
// // 增加快捷键 gl 来切换本级的代码块折叠状态
{
"before":["g","l"],
"commands": ["editor.toggleFold"] // 切换本级的代码块折叠状态
},
],最后打开vscode_vim的设置, 搜索
vim:Foldfix
后,勾选所搜索到的选项, 避免通过键盘移动光标的过程中, 已折叠的代码块被自动展开。为避免大家勾选错误,下方提供所勾选的配置截图:
vim插件配置: 用键盘模拟鼠标悬停的快捷键’gh’
vscodevim虽然提供了这一快捷键,但是此快捷键的功能并不完善(最开始是合并自一个个人需求所提的pr)
目前发现
gh
悬停功能的问题:- 无法在调试代码的过程中较为方便的使用(存在容易快速消失的情况)
- 无法在可视模式下使用(仅提供了命令模式下的悬停操作, 但覆盖不了我的某些应用场景:比如需要利用翻译插件翻译一些选中的内容时,需要其悬停显示, 此时无法触发悬停)
至于为什么会存在这些问题,如下图所示:
此处源码链接:[点击进入](https://github.com/VSCodeVim/Vim/blob/c3dd400854b254a1528f29cbd97df934391cac56/src/actions/commands/actions.ts)
如何解决?
- 第一种解决方案: Fork源码, 维护自己的版本使用, 顺便提个pr。
不建议,毕竟这种根修改错别字一个级别的小事没必要提Pr,而且加上这只是小众需求,也不太可能被采纳。可是如果不提Pr, 避免不了之后遇到vscodevim更新时得自行合并手动更新的无奈行为, 无法一劳永逸
- 第二种解决方案: 直接利用vscodevim插件暴露出的配置快捷键功能映射的API来实现一切你想要的自定义功能。
推荐此种做法,这样一来,配合vscode的同步机制,直接一劳永逸
通过
Ctrl+Shift+p
打开命令面版后, 搜索打开用户设置
,来打开用户配置文件sttings.json
在
sttings.json
中添加如下代码段即可:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22// 在此处配置可以达到,不影响原有快捷键功能的情况下, 给快捷键绑定新功能
"vim.normalModeKeyBindingsNonRecursive": [
{
"before": ["leader", "g", "h"],
"commands": ["editor.debug.action.showDebugHover"] // 使得调试代码时,也可以正常使用gh触发悬停
},
],
// 绑定vim可视模式下的快捷键
"vim.visualModeKeyBindings": [
{
"before": ["g", "h"],
"commands": ["editor.action.showHover"] // 使得可以在可视模式下使用gh触发悬停
},
],
// 在此处配置可以达到,不影响原有快捷键功能的情况下, 给快捷键绑定新功能
"vim.visualModeKeyBindingsNonRecursive": [
{
"before": ["g", "h"],
"commands": ["editor.debug.action.showDebugHover"] // 使得调试代码时,可以进一步在可视模式下使用gh触发悬停
},
],
- 第一种解决方案: Fork源码, 维护自己的版本使用, 顺便提个pr。
加持vim插件后的markdown相关插件推荐
插件(Docs View),配合vim的实现全键盘
- 安装此插件
Docs View
- 设置
辅助侧边栏
打开/关闭的快捷键通过
Ctrl+Shift+p
打开命令面版后, 搜索打开键盘快捷方式
,来打开键盘快捷键配置文件keybindings.json
在
keybindings.json
文件中添加如下代码段即可1
2
3
4
5
6/////////////////////////////////////////////////////////////////////////////////////////
// 增加辅助侧边栏的打开快捷键
{
"key": "ctrl+k ctrl+k",
"command": "workbench.action.toggleAuxiliaryBar"
},配置完成并保存后, 即可通过刚刚设置的快捷键
ctrl+k ctrl+k
, 来打开辅助侧边栏
我们将
原有侧边栏->资源管理器
下,插件Docs view默认位置组件DOCUMENTATION
拖动至我们的辅助侧边栏
到此为止配置完成, 之后可通过
ctrl+k ctrl+k
, 来打开和关闭辅助侧边栏
, 此时辅助侧边栏的内容就是我们的卡片提示内容
看了以上插件的使用后, 其余插件都可有按此方法, 按自己的需求搜索, 通过翻阅其插件的介绍页,深入使用; 基于vscode强大的第三方插件库生态, 基本没有找不到的插件(没有时还可以自己写), 唯一缺点就是插件的性能参差不齐,有些消耗性能的插件甚至会拖慢vscode的启动和运行速度。
比如git相关就直接搜 git、ssh相关就直接搜ssh、docker相关…、mikefile相关…、cmake相关…、C/C++相关…、lua相关……等,然后先浏览下载量最高的插件的介绍页,然后下载使用即可。
……
……
vscode的ctrl+f
的正则搜索举例
1、vscode原生ctrl+f
搜索替换功能 结合正则表达式的捕获替换功能
准备如下例子, 现在的需求是将
路径
和作用介绍
之间的一个空格,替换为->
符号(注意:不能替换掉其他地方的空格)1
2
3
4
5/etc/passwd 存放账户信息
/etc/shadow 存放用户密码
/etc/sysconfig/network-scripts/ifcfg-ethx ethx网卡配置
/etc/resolv.conf 指定dns服务器ip
/etc/hosts 主机名和IP地址对应文件- 那么我们按下
ctrl+f
,并在搜索框中打开正则表达式模式 - 然后在搜索框输入
([a-z]+)(\s{1})
- 最后,在替换框输入
$1->
来完成我们的目的
- 那么我们按下
我们看下替换的结果:
1
2
3
4
5/etc/passwd -> 存放账户信息
/etc/shadow -> 存放用户密码
/etc/sysconfig/network-scripts/ifcfg-ethx -> ethx网卡配置
/etc/resolv.conf -> 指定dns服务器ip
/etc/hosts -> 主机名和IP地址对应文件不难看出,我们的目的已经实现了,同时,一定要注意,不用再vscode原生
ctrl+f
正则搜索替换框里使用(?<name>w+)
类的正则命名语法, 貌似支持的不完善(总之本人没摸索到这个场景下正则命名功能的正确用法)