code --help
code -r
code -r -g package.json:128
code -r -d a.txt b.txt
ls | code -
光标挪动至
Ctrl + Left/Right
,Cmd + Shift + \
Ctrl + Home/End
文本
Ctrl A/X/C/V/S
Shift + 上述光标操纵
Alt + Shift + F
Ctrl + K
+ Ctrl + F
行
Ctrl + Shift + K
Ctrl + X/C/V
Ctrl ( + Shift) + Enter
Alt + 上/下
文档
Ctrl + F/H/T
Ctrl + G
Ctrl + P
Ctrl + Shift + O
Ctrl + Shift + P
窗体
Ctrl + W
Ctrl + B
toggle side bar pos
Ctrl + K V
Ctrl + 1/2/3
Shift + Alt + 0
2x2
Ctrl + Pagedown/Pageup
Ctrl + /-
(reset zoom 恢复)Ctrl + K
+ Ctrl + S
鼠标操纵
双击
三击/单击行号
Alt + 单击
编码
Ctrl + 空格
Ctrl + Shift + [/]
Ctrl + Shift + Space
Ctrl + .
Ctrl + Shift + `
Ctrl + J
go to last edit
Ctrl + R
用户设置
其他用户设置
editor font, 字体
连字字体
"editor.fontFamily": "Fira Code",
"editor.fontLigatures": true
https://docs.emmet.io/abbrevi…
编辑实行使命 tasks敕令面板输入conf task
{
"version": "2.0.0",
"tasks": [
{
"label": "echo",
"type": "shell",
"command": "echo Hello"
}
]
}
{
"version": "2.0.0",
"tasks": [
{
"label": "echo",
"type": "shell",
"command": "echo",
"args": [
{
"value": "Hello World",
"quoting": "escape"
}
]
}
]
}
{
"version": "2.0.0",
"tasks": [
{
"label": "chrome",
"type": "process",
"command": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
"windows": {
"command": "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"
},
"linux": {
"command": "/usr/bin/google-chrome"
}
}
]
}
{
"version": "2.0.0",
"tasks": [
{
"label": "test shell",
"type": "shell",
"command": "./scripts/test.sh",
"windows": {
"command": ".\\scripts\\test.cmd"
},
"group": "test",
"presentation": {
"reveal": "always",
"panel": "new"
},
"options": {
"cwd": "",
"env": {},
"shell": {
"executable": "bash"
}
}
}
]
}
装置 quick task插件便于可视化
{
"version": "2.0.0",
"tasks": [
{
"label": "echo",
"type": "shell",
"command": "echo",
"args": [
{
"value": "index.js:5:3: warning: unused variable",
"quoting": "escape"
}
],
"problemMatcher": {
"owner": "echo",
"fileLocation": ["relative", "${workspaceFolder}"],
"pattern": {
"regexp": "^(.*):(\\d + ):(\\d + ):\\s + (warning|error):\\s + (.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
}
]
}
{
"taskName": "compile",
"dependsOn": [
"frontend",
"backend"
],
"group": {
"kind": "build",
"isDefault": true
}
}
https://code.visualstudio.com…
调试VS Code 为插件作者供应了一套一致的接口,叫做Debug Adapter Protocol(DAP),插件终究完成调试功用。
自带node调试插件Node Debug
需装置chrome调试插件Debugger for Chrome
Visual Studio Code / Egret Wing 手艺架构
基于Electron(Chromium + node) electron运用构造
vscode源码构造
VSCode 源码浏览
3个重要历程:
另有两种特别的历程:
- 调试历程(Debug Adapter),衬着历程会经由过程 VS Code Debug Protocol 跟 Debug Adapter 历程通信。
开辟插件
- 言语支撑(Language Server)
VSCode插件开辟急速入门
确保装置了Node.js和Git
然后装置Yeoman和VS Code Extension Generator和VSCE:
npm install -g yo@latest generator-code vsce
注册账号 https://aka.ms/SignupAzureDevOps
登录后User settings挑选Security,增加token,注重备份,以后要用
yo code myextension
建立一个 VS Code 的插件模板,挑选范例cd myextension && code .
最先编辑
重要文件
- package.json 记录了node运用和插件的信息
- extension.js 当前插件的悉数代码
- .vscode 官方供应的调试设置、使命设置等
extension.js
const vscode = require('vscode');
//激活扩大顺序时会挪用此要领
//您的扩大顺序在第一次实行敕令时被激活
function activate(context) {
//运用掌握台输出诊断信息(console.log)和毛病(console.error)
//此代码行仅在激活扩大顺序时实行一次
console.log('Congratulations, your extension "mdf" is now active!');
//该敕令已在package.json文件中定义
//如今运用registerCommand供应敕令的完成
//commandId参数必需与package.json中的敕令字段婚配
let disposable = vscode.commands.registerCommand('extension.helloWorld', function () {
//每次实行敕令时,都邑实行此处安排的代码
vscode.window.showInformationMessage('Hello World!');//向用户显现音讯框
});
context.subscriptions.push(disposable);
}
exports.activate = activate;
//停用扩大顺序时会挪用此要领
function deactivate() {}
module.exports = {
activate,
deactivate
}
package.json
engines 指定了运转这个插件须要的 VS Code 版本
"vscode": "^1.29.0"
activationEvents 指定了什么情况下这个插件应当被加载而且激活
"activationEvents": [
"onCommand:extension.sayHello"
]
contributes VS Code 会把这个command敕令注册到敕令面板中
"contributes": {
"commands": [
{
"command": "extension.sayHello",
"title": "Hello World"
}
]
},
调试 F5
(会再开一个vscode,请确保电脑内存足够)
查询 API vscode.languages
定义文件 vscode.d.ts
只需编写package.json
"contributes": {
"commands": [
{
"command": "extension.sayHello",
"title": "Hello World"
}
],
"keybindings": [
{
"key": "ctrl + t",
"command": "extension.sayHello",
"when": "editorTextFocus"
}
]
},
示例:Notepad + + 源码
注重事项:"activationEvents": ["*"]
永久激活插件能够影响机能,慎用。
只需编写 snippets/snippets.json
(若不分享插件则当地敕令面板输入snippets
即可编写)
snippets.json
{
"Print to console": {
"prefix": "log",
"body": [
"console.log(${1:i});",
"console.log(${1:i} + 1); // ${1:i} + 1",
"$2"
],
"description": "Log output to console"
}
}
package.json
"contributes": {
"snippets": [
{
"language": "Javascript",
"path": "./snippets/snippets.json"
}
]
}
snippet-官网材料
编写themes/mytheme-color-theme.json
以及package.json
"contributes": {
"themes": [
{
"label": "mytheme",
"uiTheme": "vs-dark",
"path": "./themes/mytheme-color-theme.json"
}
]
}
package.json
configurations:./ language-configuration.json
言语的设置信息地点文件的相对地点 language-configuration.json
言语相干信息的模板{
"comments": {
"lineComment": "//",// 单行解释
"blockComment": [ "/*", "*/" ]//多行解释
},
"brackets": [// 支撑的括号范例
["{", "}"],
["[", "]"],
["(", ")"]
],
"autoClosingPairs": [// 键入时自动封闭的标记
["{", "}"],
["[", "]"],
["(", ")"],
["\"", "\""],
["'", "'"]
],
"surroundingPairs": [// 可用于围困选区的标记
["{", "}"],
["[", "]"],
["(", ")"],
["\"", "\""],
["'", "'"]
],
"folding": {//可被摺叠的代码段的开首和末端
"markers": {
"start": "^\\s*//#region",
"end": "^\\s*//#endregion"
}
},
"wordPattern": "(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\-\\=\\ + \\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s] + )",//一个单词
"indentationRules": {//怎样依据一行的内容来掌握缩进
"increaseIndentPattern": "^\\s*((begin|class|(private|protected)\\s + def|def|else|elsif|ensure|for|if|module|rescue|unless|until|when|while|case)|([^#]*\\sdo\\b)|([^#]*=\\s*(case|if|unless)))\\b([^#\\{;]|(\"|'|\/).*\\4)*(#.*)?$",
"decreaseIndentPattern": "^\\s*(}\\]]?\\s*(#|$)|\\.[a-zA-Z_]\\w*\\b)|(end|rescue|ensure|else|elsif|when)\\b)"
}
}
插件市场
运用vsce东西敕令建立宣布账号vsce create-publisher your-publisher-name
登录账号vsce login your-publisher-name
宣布vsce publish
宣布-官方文档
https://github.com/Microsoft/&#8230;
VSCode插件开辟全攻略
API运用vscode.window.showInformationMessage('Hello World', 'Yes', 'No').then(value => {
value=='Yes'&&vscode.window.showWarningMessage('User press ' + value);
value=='No'&&vscode.window.showErrorMessage('User press ' + value);
})
给用户供应了一系列选项,然后依据用户挑选的选项举行下一步的操纵。
vscode.window.showQuickPick(['first', 'second', 'third']).then(value => {
vscode.window.showInformationMessage('User choose ' + value);
})
vscode.commands.registerCommand('extension.sayHello', () => {
vscode.window.showQuickPick([{
label: 'first',
description: 'first item',
detail: 'first item details'
}, {
label: 'second',
description: 'second item',
detail: 'second item details'
}]).then(value => {
vscode.window.showInformationMessage('User choose ' + value.label);
})
});
let collection = vscode.languages.createDiagnosticCollection('myextension');
let uri = vscode.window.activeTextEditor.document.uri;
collection.set(uri, [
{
range: new vscode.Range(0, 0, 0, 1),
message: 'We found an error'
}
]);
let channel =vscode.window.createOutputChannel('MyExtension');
channel.appendLine('Hello World');
调试面板
终端面板
vscode.window.registerTreeDataProvider('myextension', {
getChildren: (element) => {
if (element) {
return null;
}
return ['first', 'second', 'third'];
},
getTreeItem: (element) => {
return {
label: element,
tooltip: 'my ' + element + ' item'
}
}
})
package.json的contributes
"contributes": {
"views": {
"explorer": [
{
"id": "myextension",
"name": "My Extension"
}
]
}
}
WebView API 来天生恣意的编辑器内容
FileSystemProvider 或许 TextDocumentContentProvider 来为 VS Code 供应类似于当地文件的文本内容
let decoratiOnType= vscode.window.createTextEditorDecorationType({
backgroundColor: '#fff',
border: '1px solid red;',
fontStyle: 'italic',
letterSpacing: '3px'
});
let editor = vscode.window.activeTextEditor;
editor.setDecorations(decorationType, [new vscode.Range(0, 0, 0, 1)]);
createTextEditorDecorationType(DecorationRenderOptions)
DecoratiOnRenderOptions={
//色彩和背景相干
backgroundColor?: string | ThemeColor;
color?: string | ThemeColor;
overviewRulerColor?: string | ThemeColor;
//边框
border?: string;
borderColor?: string | ThemeColor;
borderRadius?: string;
borderSpacing?: string;
borderStyle?: string;
borderWidth?: string;
//表面
outline?: string;
outlineColor?: string | ThemeColor;
outlineStyle?: string;
outlineWidth?: string;
//字体
fontStyle?: string;
fontWeight?: string;
opacity?: string;
letterSpacing?: string;
//其他
gutterIconPath?: string | Uri;
gutterIconSize?: string;
before?: ThemableDecorationAttachmentRenderOptions;
after?: ThemableDecorationAttachmentRenderOptions;
}
ThemeColor
new vscode.ThemeColor('editorWarning.foreground')
插件参考:Rainbow Brackets 和 Indent Rainbow
插件 API 设想形式宣布流程:
保护团队review,要点:
Node.js 模块运用:
极客时候-玩转vscode
your-first-extension