在vscode中使用R时,用快捷键来快捷键入卡片内容
如何通过快捷键来在vscode中快捷输入内容(R, vscode)。
前言(废话)
近期刚刚入手M2的MacBook Air,想着从windows环境迁移到Mac环境又要配置一遍Rstudio和vscode。觉得很麻烦,于是就想着能不能在vscode中间把这两个语言的环境都配置上,省的到时候多语言操作麻烦。
稍微配置了一下遇到了一个问题,就是在Rstudio中可以直接通过alt+-
插入
_<-_
(用下划线_
代替空格)。虽然说在现在的版本使用R的_<-_
和=
并没有太大的差别,不过代码的可读性会变差,而且会被师兄吐槽。所以还是选择使用_<-_
作为赋值语句。
正文
在vscode中添加快捷键
在vscode中自带的快捷键文件Default keybindings
是只读文件,所以如果需要添加自定义快捷键需要新建一个keybindings.json
文件,在方括号中间加入所需的快捷键json文件
// Place your key bindings in this file to override the defaults
[]
每个快捷键必须有key
和command
两个参数,其他参数均为可选参数。另外两个可选参数是boolean格式的when
参数和一个command格式的参数args
。除此之外,这就是一个标准的json文件(Still, it can have when (a boolean clause that will be evaluated on the current context) and args (command arguments) keys. Other than that, it is a regular JSON object)
{
"key": "cmd+a",
"command": "editor.action.selectAll"
}
when
参数主要是为了限制快捷键的适用范围
{
"key": "cmd+a",
"command": "editor.action.selectAll",
"when": "editorTextFocus"
}
卡片(SNIPPET)
在百度上中文搜索快捷键入的结果主要都与这个功能相关。大致意思就是可以通过键入一个快捷短语加上tab就能输入一整段事先预设好的代码
"The snippet is a template that makes writing repeating code patterns easier."
在vscode中全局的使用快捷键Command+Shift+P
唤出搜索框,输入snippet,打开卡片的编辑界面
大概可以编辑一个这样子的快捷键
{
// object key `const` is a snippet name
"const": {
"prefix": "const", // object value `const` is a trigger
"body": ["const $1 = $2"],
"description": "Create a constant"
}
}
可以在输入const的时候自动键入方括号内的内容,$1位第一个参数,也就是光标所在地,单击tab可以切换到$2,单击shift+tab可以切换回来。
将二者结合起来!用快捷键触发卡片!
在keybinding.json
中加入了快捷键,同时在args
中添加了snippet的内容,就能够用快捷键来快速键入啦
{
"key": "cmd+shift+c",
"command": "editor.action.insertSnippet",
"when": "editorTextFocus",
"args": {
"snippet": "const $1 = $2"
}
}
在以上的情况下,单击cmd+shift+c
就能够直接插入卡片内容啦
PS: 在这个文章中它并没有把上面这个代码块加在keybinding.json
中,而是添加在了global-snippet.code-snippets
中挺奇怪的,因为这相当于在本来应该配置快捷键入卡片的地方配置了快捷键,也许会和keybinding.json中的配置相冲突,不过没试过不知道能不能行。也不知道它和keybinding.json的快捷键互相的覆盖关系是怎样的。不过总之我是像上面那样配置的,并且能用了。
进阶
在这个情况下只要在editorTextFocus的状态下就能够插入,可是这个情况仅限于在R语言中,故选择在editorTextFocus后加上&& editorLangId == r
这样就限制这个快捷键的作用范围仅仅在editor是r脚本的时候。更多的东西可以看vscode的官网描述when右边的格式conditional operators和available contexts
参考资料
How to insert a snippet after pressing a keyboard shortcut in VS Code | LukasPolak