331 lines
10 KiB
Markdown
331 lines
10 KiB
Markdown
# 快速鍵
|
||
## 顯示快速鍵列表
|
||
- Windows: `Ctrl + k` + `Ctrl + s`
|
||
- Mac: `⌘ + k` + `⌘ + s`
|
||
|
||
## 分割目前視窗
|
||
- Windows: `Ctrl + \`
|
||
- Mac: `⌘ + \`
|
||
|
||
## 程式格式化
|
||
### 格式化整個文件
|
||
`Shift + Alf + f`
|
||
|
||
### 格式化選取的範圍
|
||
`Ctrl + k` + `Ctrl + f`
|
||
|
||
### setting.json
|
||
- `"editor.formatOnType": true`:輸入一行後,自動格式化目前這一行。
|
||
- `"editor.formatOnSave": true`:儲存時格式化檔案。
|
||
- `"editor.formatOnPaste": true`:貼上程式碼時格式化貼上的內容。
|
||
|
||
```json
|
||
{
|
||
"python.terminal.activateEnvironment": true, // 自動啟動環境
|
||
"python.linting.pylintEnabled": true, // 需要 pip install pylint
|
||
"python.linting.enabled": true,
|
||
"python.autoComplete.addBrackets": true, // 自動為自動完成的function加上括號
|
||
"python.languageServer": "Pylance",
|
||
"python.analysis.completeFunctionParens": true,
|
||
"jupyter.sendSelectionToInteractiveWindow": true,
|
||
"jupyter.interactiveWindowMode": "perFile",
|
||
|
||
"terminal.integrated.fontFamily": "Fira Code", // For Windows
|
||
"terminal.integrated.profiles.windows": {
|
||
"Command Prompt": {
|
||
"path": [
|
||
"${env:windir}\\Sysnative\\cmd.exe",
|
||
"${env:windir}\\System32\\cmd.exe"
|
||
],
|
||
"args": [],
|
||
"icon": "terminal-cmd"
|
||
},
|
||
"Git Bash": {
|
||
"source": "Git Bash"
|
||
},
|
||
"PowerShell -NoProfile": {
|
||
"source": "PowerShell",
|
||
"args": ["-NoProfile"]
|
||
}
|
||
},
|
||
"terminal.integrated.defaultProfile.windows": "Command Prompt",
|
||
"terminal.integrated.cwd": "${fileDirname}",
|
||
|
||
// "editor.fontFamily": "Cascadia code Light",
|
||
// "editor.fontFamily": "PragmataPro Liga",
|
||
// "editor.fontFamily": "Fira Code Retina",
|
||
"editor.fontFamily": "Iosevka Expanded",
|
||
// "editor.fontFamily": "Hasklig Light",
|
||
"editor.fontSize": 14,
|
||
"editor.fontLigatures": true,
|
||
"editor.fontWeight": "normal",
|
||
"editor.minimap.renderCharacters": false,
|
||
"editor.renderWhitespace": "boundary",
|
||
"editor.renderIndentGuides": false,
|
||
"editor.insertSpaces": true,
|
||
"editor.tabSize": 4,
|
||
"editor.bracketPairColorization.enabled": true,
|
||
|
||
"outline.showVariables": false,
|
||
|
||
"sync.gist": "aaee0ee8733879ef2da2eb1b4bf8a993",
|
||
"sync.quietSync": false,
|
||
"sync.removeExtensions": true,
|
||
"sync.syncExtensions": true,
|
||
"sync.autoDownload": false,
|
||
"sync.autoUpload": false,
|
||
"sync.forceDownload": false,
|
||
|
||
"files.trimTrailingWhitespace": true,
|
||
"files.insertFinalNewline": true,
|
||
|
||
"explorer.confirmDelete": false,
|
||
|
||
"workbench.colorTheme": "One Dark Pro",
|
||
"workbench.iconTheme": "material-icon-theme",
|
||
"workbench.editorAssociations": {
|
||
"*.ipynb": "jupyter.notebook.ipynb"
|
||
},
|
||
|
||
"oneDarkPro.vivid": true,
|
||
"gitlens.advanced.messages": {
|
||
"suppressImproperWorkspaceCasingWarning": true
|
||
},
|
||
"workbench.colorCustomizations": {
|
||
"editor.lineHighlightBackground": "#1073cf2d",
|
||
"editor.lineHighlightBorder": "#9fced11f"
|
||
},
|
||
"editor.wordWrap": "off",
|
||
"diffEditor.wordWrap": "off",
|
||
"editor.guides.indentation": false,
|
||
"editor.guides.bracketPairs": false,
|
||
}
|
||
```
|
||
|
||
## 折疊程式碼
|
||
### 收起目前區塊
|
||
- Windows: `Ctrl + Shift + [`
|
||
- Mac: `⌥ + ⌘ + [`
|
||
|
||
### 打開目前區塊
|
||
- Windows: `Ctrl + Shift + ]`
|
||
- Mac: `⌥ + ⌘ + ]`
|
||
|
||
### 收起目前區塊(整個檔案)
|
||
- Windows: `Ctrl + (K => 0) (zero)`
|
||
- Mac: `⌘ + (K => 0) (zero)`
|
||
|
||
### 打開目前區塊(整個檔案)
|
||
- Windows: `Ctrl + (K => J) `
|
||
- Mac: `⌘ + (K => J)`
|
||
|
||
## 在「已開啟的檔案」間跳轉
|
||
`Ctrl + tab`
|
||
|
||
# Plugin
|
||
## Setting Sync
|
||
- 參考:[https://marketplace.visualstudio.com/items?itemName=Shan.code-settings-sync](https://marketplace.visualstudio.com/items?itemName=Shan.code-settings-sync)
|
||
~~- GIST Token: `e0f7c5233e3c6dafee77047f61ea74f0d01d24e1`~~
|
||
- GIST Token: `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`
|
||
- GIST ID: [`aaee0ee8733879ef2da2eb1b4bf8a993`](https://gist.github.com/AwinHuang/aaee0ee8733879ef2da2eb1b4bf8a993)
|
||
- GIST address: [https://gist.github.com/AwinHuang/aaee0ee8733879ef2da2eb1b4bf8a993](https://gist.github.com/AwinHuang/aaee0ee8733879ef2da2eb1b4bf8a993)
|
||
|
||
# Code snippets
|
||
## html.json
|
||
```json
|
||
{
|
||
"HTML template": {
|
||
"prefix": "HTML_template",
|
||
"body": [
|
||
"<!doctype html>",
|
||
"",
|
||
"<html lang=\"en\">",
|
||
"<head>",
|
||
" <meta charset=\"utf-8\">",
|
||
" <meta name=\"description\" content=\"Awin's HTML template\">",
|
||
" <meta name=\"author\" content=\"Awin Huang\">",
|
||
" <script src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js\"></script>",
|
||
" <title>A HTML template</title>",
|
||
"</head>",
|
||
"",
|
||
"<body>",
|
||
" <H1>Awin's HTML template</H1>",
|
||
" <p>Click to hide</p>",
|
||
"</body>",
|
||
"</html>",
|
||
"",
|
||
"<script>",
|
||
" $(document).ready(function(){",
|
||
" $(\"p\").click(function(){",
|
||
" $(this).hide();",
|
||
" });",
|
||
" });",
|
||
"</script>",
|
||
],
|
||
"description": "HTML template"
|
||
}
|
||
}
|
||
```
|
||
|
||
## python.json
|
||
```json
|
||
{
|
||
"Python template": {
|
||
"prefix": "Python_Template",
|
||
"body": [
|
||
"import sys",
|
||
"import argparse",
|
||
"",
|
||
"",
|
||
"def main(args=None):",
|
||
" ${1:pass}",
|
||
"",
|
||
"",
|
||
"if __name__ == '__main__':",
|
||
" parser = argparse.ArgumentParser()",
|
||
" parser.add_argument(\"first_file\", help=\"The first file\")",
|
||
" parser.add_argument(\"-s\", \"--sample_args\", default=\"sample_args\", help=\"Modify this arguments for you\")",
|
||
" args = parser.parse_args()",
|
||
" main(args)",
|
||
" sys.exit(0)"
|
||
],
|
||
"description": "Python script template"
|
||
},
|
||
|
||
"F Print": {
|
||
"prefix": "f-print",
|
||
"body": [
|
||
"print(f'$1 = {$1}')"
|
||
],
|
||
"description": "print() with f-string and default {}"
|
||
},
|
||
"Q Print": {
|
||
"prefix": "q-print",
|
||
"body": [
|
||
"print('$1 = {}, '.format($1))"
|
||
],
|
||
"description": "print() with f-string and default {}"
|
||
},
|
||
"Debug RobotRun": {
|
||
"prefix": "debug_robotrun",
|
||
"body": [
|
||
"import os",
|
||
"import sys",
|
||
"sys.path.insert(0, 'D:/codes/logitech/')",
|
||
"import RobotRun",
|
||
"print('+------------------------------------------------------------------------------+')",
|
||
"print('| |')",
|
||
"print('| RobotRun: {}'.format(RobotRun.__file__))",
|
||
"print('| |')",
|
||
"print('+------------------------------------------------------------------------------+')",
|
||
],
|
||
"description": "Change RobotRun to local version"
|
||
},
|
||
"Flask template": {
|
||
"prefix": "Flask_Template",
|
||
"body": [
|
||
"## Flask template",
|
||
"## Author: Awin Huang",
|
||
"## Date: 2020/04/09",
|
||
"",
|
||
"import os, sys",
|
||
"import datetime",
|
||
"import json",
|
||
"from flask import Flask, render_template, request",
|
||
"",
|
||
"",
|
||
"app = Flask(__name__)",
|
||
"",
|
||
"## Setup log",
|
||
"handler = logging.FileHandler('flask.log', delay=False)",
|
||
"handler.setLevel(logging.INFO)",
|
||
"app.logger.addHandler(handler)",
|
||
"app.logger.setLevel(logging.INFO)",
|
||
"",
|
||
"",
|
||
"def info_log(msg):",
|
||
" app.logger.info(msg)",
|
||
" # print(msg)",
|
||
"",
|
||
"",
|
||
"def error_log(msg):",
|
||
" app.logger.error(msg)",
|
||
"",
|
||
"",
|
||
"@app.route('/')",
|
||
"def index():",
|
||
" info_log('Return main page to user.')",
|
||
" return 'Hello, this is main page'",
|
||
"",
|
||
"",
|
||
"## Receive a GET request",
|
||
"@app.route('/get_get', methods=['GET'])",
|
||
"def run_testcase():",
|
||
" command = request.args.get('command')",
|
||
" value = 'This is value for GET'",
|
||
" return {",
|
||
" 'command': command,",
|
||
" 'value': value",
|
||
" }",
|
||
"",
|
||
"",
|
||
"## Receive a POST request",
|
||
"@app.route('/get_post', methods=['POST'])",
|
||
"def get_post():",
|
||
" command = request.form['command']",
|
||
" value = 'This is value for POST'",
|
||
" return {",
|
||
" 'command': command:",
|
||
" 'value': value",
|
||
" }",
|
||
"",
|
||
"",
|
||
"if __name__ == '__main__':",
|
||
" app.debug = True",
|
||
" app.run(host='0.0.0.0')",
|
||
],
|
||
"description": "Flask template"
|
||
},
|
||
"Datetime now": {
|
||
"prefix": "now_dt",
|
||
"body": [
|
||
"datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S:%f')"
|
||
],
|
||
"description": "Get datetime.now() with format '%Y-%m-%d %H:%M:%S:%f'"
|
||
},
|
||
"Run process": {
|
||
"prefix": "runprocess",
|
||
"body": [
|
||
"import multiprocessing as mp",
|
||
"",
|
||
"process = mp.Process(target=task_set.run, args=(self.task_sync, args))",
|
||
"process.start()",
|
||
"process.join()"
|
||
],
|
||
"description": "Run function in a process"
|
||
},
|
||
"Sleep with dots": {
|
||
"prefix": "sleepdots",
|
||
"body": [
|
||
"for i in range($1):",
|
||
" import time",
|
||
" print(\".\", end=\"\", flush=True)",
|
||
" time.sleep(1)",
|
||
],
|
||
"description": "Sleep and print \".\" every second"
|
||
},
|
||
"Sleep with numbers": {
|
||
"prefix": "sleepnum",
|
||
"body": [
|
||
"for i in range($1):",
|
||
" print(f\"{i+1} \", end=\"\", flush=True)",
|
||
" time.sleep(1)",
|
||
],
|
||
"description": "Sleep and print number every second"
|
||
},
|
||
}
|
||
|
||
```
|
||
|
||
## 參考
|
||
- [VSCode 是什么](https://geek-docs.com/vscode/vscode-tutorials/what-is-vscode.html) |