在vscode中使用快捷键来快捷键入卡片内容

  • 在vscode中使用快捷键来快捷键入卡片内容已关闭评论
  • 174 次浏览
  • A+
所属分类:.NET技术
摘要

近期刚刚入手M2的MacBook Air,想着从windows环境迁移到Mac环境又要配置一遍Rstudio和vscode。觉得很麻烦,于是就想着能不能在vscode中间把这两个语言的环境都配置上,省的到时候多语言操作麻烦。
稍微配置了一下遇到了一个问题,就是在Rstudio中可以直接通过alt+- 插入
_<-_(用下划线_代替空格)。虽然说在现在的版本使用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 [] 

每个快捷键必须有keycommand两个参数,其他参数均为可选参数。另外两个可选参数是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,打开卡片的编辑界面
在vscode中使用快捷键来快捷键入卡片内容

大概可以编辑一个这样子的快捷键

{   // 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 operatorsavailable contexts

参考资料

How to insert a snippet after pressing a keyboard shortcut in VS Code | LukasPolak

vscode 快捷键设置_w3cschool