包含对于 VSCode 作为文本编辑器的配置,不包含对语言环境的配置.
About: Command Palette & Ctrl + Shift + P
关于 Ctrl + Shift + P: 首先在这里贴蒋炎岩老师的一场与VSCode相关的讲座,Ctrl+Shift+P:如果需要做某些事情,可以先尝试用 Ctrl+Shift+P 打开命令面板搜索(比如也许你想重新加载 VSCode 窗口,就可以 Ctrl+Shift+P 打开命令面板,然后搜索 “reload window” ),如果发现自己需要经常做这个动作,那么就 Ctrl+K Ctrl+S 进入 Keyboard Shortcuts 为这个操作绑定快捷键吧,配置快捷键的哲学在于:发现自己经常重复做某件事情,有一个瞬间发现自己不想用鼠标再次重复这个过程,于是去检索记忆 / 配置这个热键。
Layout
让 VSCode 的界面更简洁:隐藏 Activity Bar 和 Status Bar
其实并不是时时刻刻都需要看到 Activity Bar 和 Status Bar,如果你也觉得它们占用了宝贵的屏幕空间,那么可以绑定以下快捷键:
View: Toggle Activity Bar Visibility - Ctrl+Shift+9
View: Toggle Status Bar Visibility - Ctrl+Shift+8
为什么是 Ctrl+Shift+8/9:因为 Shift+9 对应的字符是左括号,和 Activity Bar 在形态上略有相似,顺手把 Status Bar 对应的快捷键设置为 Ctrl+Shift+8,键位近比较顺手,因为我总是同时关闭此二者的可见性;想快捷键还是一个不那么容易的事情,一方面这里的快捷键语义含量没有那么高,另一方面容易和已有的键位绑定冲突,设置完了一段时间不用又会忘记,然后发现 Ctrl+Shift+P 检索才是永远的家.
Terminal: Move Terminal to Editor Area
并置终端 tab 和代码 tab.
Ctrl+Shift+P → 在命令面板中检索 Terminal: Move Terminal to Editor Area
,即可将终端放置到 Editor Area,其他类似操作还有 Move Terminal to Panel
, Create New Terminal in Editor Area
…当然,可以为你经常使用的操作绑定快捷键。
一种适用的场景是:如果你在学习某种编程语言,而这种语言(比如 Haskell, Lisp, Python…)刚好有REPL,你就可以在 Editor Area 切分,一半放代码,一半放 Terminal REPL,如果需要,可以编辑文件,然后在 REPL 中导入代码文件(像Haskell ghci中的:l foo.hs
),这样就很方便,可以通过 Ctrl+1/Ctrl+2 在代码 tab 和终端 tab 之间做 Focus 的切换;视觉上我认为这样的体验也一些,比默认的上下分屏更好(毕竟更多情况下电脑的屏幕水平边比竖直边长,这也是为什么我喜欢竖直向的浏览器标签栏).
还有一种类似的实现:通过 Ctrl+Shift+B 打开 Secondary Side Bar,把终端拖到 Secondary Side Bar.

Editor Area
Rainbow Brackets
在Settings(GUI)中键入 @id:editor.bracketPairColorization.enabled @id:editor.guides.bracketPairs
,选择你需要的选项,editor.bracketPairColorization.enabled
是默认启用的,editor.guides.bracketPairs
是默认关闭(false
)的,可以选择 true
或者 active
启用, true
的效果是所有括号都有引导线, active
的效果是只有最接近光标的外层括号有引导线,我觉得 active
就足够了,效果如下:

顺便一个快捷键:Ctrl+Shift+\,可以在当前文本对应的左右括号之间跳转,可以用来检查表达式嵌套的层级,对应 Vim Normal Mode 下的%.(P.S. 此快捷键在 Terminal 中使用,可以用来在不同的 Terminal tab 中跳转)
起因是我最近在看 SICP ,这本书使用的语言是 lisp (scheme),这门语言的括号实在是多(,真的有其他语言的语言设计中具备比lisp更多的括号吗?) 于是我在 Extensions 中搜索 Rainbow Brackets ,对应插件表示项目已放弃维护,因为此特性已由 VSCode 内置,并为我指路至 Settings(GUI) 的配置具体位置。
HotKey
-
Baseline
将光标悬停在 GUI 的 button 上,如果该 button 有对应的快捷键,弹出的悬窗会呈现快捷键信息(很多程序都遵循这个设计哲学),所以如果发现自己经常点击某个键,不妨停下来看看它对应的热键是什么.
-
Ctrl-b:toggle side bar.
这里对应的一个故事是,有人给 VSCode 提了一个issue,希望 VSCode 提供一个类似
toggleExplorerVisibility
配置项,然后一个用户回复 “Ctrl-B to toggle side bar” 并关闭了此issue. 为什么我会知道这件事情,因为我也以为我的需求是toggleExplorerVisibility
,结论是:明确每个组件的称呼很重要。(但是,一个热键对应 toggle,两个热键分别对应 show / hide,前者应该更合理一些.) -
Alt-left/right Arrow:回退到上一光标位置/前进到下一光标位置
比较有用的一个情景是:和 F12 配合,在函数的调用链里导航.
-
Ctrl-[/]:对光标所在行左移/右移缩进。
同 Vim Visual Mode 下的
>/<
. Vim 的这个键位我用着一直不是很顺,因为选中之后只能进行一次操作,如果想再做一次缩进,那要再选一次,虽然是可以2 >
这样向右缩进两个tab,但是对我来说还是没有那么顺,自从发现在编辑中使用 Ctrl/Shift/Alt 可以做一些跳转/选中等操作,我就很少离开Vim Insert Mode了,当然这些热键在语义化的方面是比不过 Vim 的键位. -
Alt-up/down Arrow:上移/下移光标所在行.
-
Shift-Alt-f: format 代码,前提是配置好了 formatter.
于是我不再需要手动调空格/空行的数量,Ctrl + V 的时候也不必担心光标所在列,粘贴完一键 format 完事,很可惜像 Python 这样强制缩进的语言不太好 format.
-
Ctrl-(Shift-)Enter: 在当前光标所在行下(上)方新建一行,光标跳转到新行行首.
同 Vim Normal Mode 下的
o(O)
.
Extensions
-
Bluloco Light Theme (Author: Umut Topuzoğlu)
非常漂亮的主题,我的 Wezterm 使用的也是这个主题.
-
Remove empty lines (Author: Alexander)
删除选区内的所有空行. 可以通过 Ctrl + Shift + P 调用,也可以为其绑定快捷键.
Misc
一些写在 User Settings (JSON) 里的小配置,包含:
-
配置 VSCode-Vim 插件:
-
与 VSCode 默认键位冲突处理
-
使用系统剪切板
-
智能相对行号(只在 Insert Mode 使用绝对行号)
-
-
改变悬停窗口(如 Language Server 提供的函数描述)的背景色;
-
默认缩放等级,因为我之前打开 VSCode 做的第一件事总是 ^+ 调大一次 Zoom Level;
-
彩虹括号引导线设置.
{
"vim.smartRelativeLine": true,
"vim.useSystemClipboard": true,
"vim.handleKeys": { // 如你所见,我是一个非常不纯的 Vim 用户
"<C-c>": false,
"<C-x>": false,
"<C-a>": false,
"<C-s>": false, // save
"<C-z>": false, // undo
"<C-[>": false, // outdent line
"<C-]>": false, // indent line
"<C-b>": false, // toggle side bar
"<C-o>": false, // open files
"<C-k>": false, // leading key for ...
},
"workbench.colorCustomizations": {
"editorHoverWidget.background": "#edeeee", // 设置悬停提示的背景颜色
},
"window.zoomLevel": 1,
"editor.guides.bracketPairs": "active"
}