chore: init project.

This commit is contained in:
jaywcjlove 2022-09-26 09:52:59 +08:00
parent 88ed6ac8e1
commit 815383e849
8 changed files with 581 additions and 2 deletions

23
.gitignore vendored Normal file
View File

@ -0,0 +1,23 @@
build
dist
node_modules
package-lock.json
.DS_Store
.cache
.vscode
.idea
.snap
.env
*.bak
*.tem
*.temp
#.swp
*.*~
~*.*
# IDEA
*.iml
*.ipr
*.iws

View File

@ -1,2 +1,13 @@
# reference
为开发人员分享快速参考备忘单(主要是方便自己)。
Quick Reference
===
为开发人员分享快速参考备忘单(主要是方便自己),在看到 [Reference](https://github.com/Randy8080/reference) 快速参考备忘单,感觉非常简单,造轮子使命感突然来了,造个中文版本的,为了方便自己的技术栈查阅,立马撸起来 :)。
如果您发现此处的备忘单不合适,您可以通过提交 PR 来修复它或提供更好的备忘单,只针对【中文】用户。
以下是开源天使提供的一些备忘单和快速参考。:)
## License
MIT © Randy8080

193
docs/vscode.md Normal file
View File

@ -0,0 +1,193 @@
VSCode 备忘单
===
这个 VSCode (Visual Studio Code) 快速参考备忘单显示了它的键盘快捷键和命令。
## Windows
### 一般的
| - | - |
|-----------------------------|------------------------|
| `Ctrl` `Shift` `P` _/_ `F1` | 显示命令面板 |
| `Ctrl` `P` | 快速打开,转到文件 |
| `Ctrl` `Shift` `N` | 新窗户 |
| `Ctrl` `Shift` `W` | 关闭窗口 |
| `Ctrl` `,` | 用户设置 |
| `Ctrl` `K` `Ctrl` `S` | 键盘快捷键 |
<!--rehype:class=table-thead-hide-->
### 基本编辑
<!--rehype:data-warp-style=grid-row: span 2/span 2;-->
| - | - |
|---------------------------|------------------------------------|
| `Ctrl` `X` | 剪切行 |
| `Ctrl` `C` | 复制行 |
| `Alt` `↑` _/_ `↓` | 向上/向下移动行 |
| `Shift` `Alt` `↓` _/_ `↑` | 向上/向下复制行 |
| `Ctrl` `Shift` `K` | 删除行 |
| `Ctrl` `Enter` | 在下面插入行 |
| `Ctrl` `Shift` `Enter` | 在上面插入行 |
| `Ctrl` `Shift` `\` | 跳转到匹配的括号 |
| `Ctrl` `]` _/_ `[` | 缩进/突出行 |
| `Home` _/_ `End` | 转到行首/行尾 |
| `Ctrl` `Home` | 转到文件开头 |
| `Ctrl` `End` | 转到文件末尾 |
| `Ctrl` `↑` _/_ `↓` | 向上/向下滚动行 |
| `Alt` `PgUp` _/_ `PgDn` | 向上/向下滚动页面 |
| `Ctrl` `Shift` `[` | 折叠(折叠)区域 |
| `Ctrl` `Shift` `]` | 展开(展开)区域 |
| `Ctrl` `K` `Ctrl` `[` | 折叠(折叠)所有子区域 |
| `Ctrl` `K` `Ctrl` `]` | 展开(展开)所有子区域 |
| `Ctrl` `K` `Ctrl` `0` | 折叠(折叠)所有区域 |
| `Ctrl` `K` `Ctrl` `J` | 展开(展开)所有区域 |
| `Ctrl` `K` `Ctrl` `C` | 添加行注释 |
| `Ctrl` `K` `Ctrl` `U` | 删除行注释 |
| `Ctrl` `/` | 切换行注释 |
| `Shift` `Alt` `A` | 切换块评论 |
| `Alt` `Z` | 切换自动换行 |
<!--rehype:class=table-thead-hide-->
### 导航
| - | - |
|----------------------|--------------------|
| `Ctrl` `T` | 显示所有符号 |
| `Ctrl` `G` | 去线 |
| `Ctrl` `P` | 转到文件 |
| `Ctrl` `Shift` `O` | 转到符号 |
| `Ctrl` `Shift` `M` | 显示问题面板 |
| `F8` | 转到下一个错误 |
| `Shift` `F8` | 转到上一个错误 |
| `Ctrl` `Shift` `Tab` | 浏览编辑组历史 |
| `Alt` ` ←` _/_ `→` | 后退/前进 |
| `Ctrl` `M` | 切换 Tab 移动焦点 |
<!--rehype:class=table-thead-hide-->
### 搜索和替换
| - | - |
|---------------------------|---------------------------------|
| `Ctrl` `F` | 寻找 |
| `Ctrl` `H` | 代替 |
| `F3` _/_ `Shift` `F3` | 查找下一个/上一个 |
| `Alt` `Enter` | 选择所有出现的查找匹配项 |
| `Ctrl` `D` | 将选择添加到下一个查找匹配项 |
| `Ctrl` `K` `Ctrl` `D` | 将最后一个选择移动到下一个查找匹配项 |
| `Alt` `C` _/_ `R` _/_ `W` | 切换区分大小写/正则表达式/整个单词 |
<!--rehype:class=table-thead-hide-->
### 多光标和选择
| - | - |
|----------------------------------------|------------------------------|
| `Alt` `Click` | 插入光标 |
| `Ctrl` `Alt` `↑` _/_ `↓` | 在上方/下方插入光标 |
| `Ctrl` `U` | 撤消上一次光标操作 |
| `Shift` `Alt` `I` | 在选定的每一行的末尾插入光标 |
| `Ctrl` `I` | 选择当前行 |
| `Ctrl` `Shift` `L` | 选择当前选择的所有匹配项 |
| `Ctrl` `F2` | 选择当前单词的所有出现 |
| `Shift` `Alt` `→` | 展开选择 |
| `Shift` `Alt` `←` | 收缩选择 |
| `Shift` `Alt` `<Drag>` | 列(框)选择 |
| `Ctrl` `Shift` `Alt` `<Arrow>` | 列(框)选择 |
| `Ctrl` `Shift` `Alt` `PgUp` _/_ `PgDn` | 列(框)选择页上/下 |
<!--rehype:class=table-thead-hide-->
### 丰富的语言编辑
| - | - |
|-----------------------------|-----------------|
| `Ctrl` `<Space>` `Ctrl` `I` | 触发建议 |
| `Ctrl` `Shift` `<Space>` | 触发参数提示 |
| `Shift` `Alt` `F` | 格式化文档 |
| `Ctrl` `K` `Ctrl` `F` | 格式选择 |
| `F12` | 转到定义 |
| `Alt` `F12` | 窥视定义 |
| `Ctrl` `K` `F12` | 打开定义到一边 |
| `Ctrl` `.` | 快速解决 |
| `Shift` `F12` | 显示参考 |
| `F2` | 重命名符号 |
| `Ctrl` `K` `Ctrl` `X` | 修剪尾随空格 |
| `Ctrl` `K` `M` | 更改文件语言 |
<!--rehype:class=table-thead-hide-->
### 编辑管理
| - | - |
|----------------------------------|--------------------------|
| `Ctrl` `F4` `Ctrl` `W` | 关闭编辑器 |
| `Ctrl` `K` `F` | 关闭文件夹 |
| `Ctrl` `\` | 拆分编辑器 |
| `Ctrl` ` 1` _/_ `2` _/_ `3` | 专注于第一、第二或第三编辑组 |
| `Ctrl` `K` `Ctrl` `←` _/_ `→` | 专注于上一个/下一个编辑组 |
| `Ctrl` `Shift` `PgUp` _/_ `PgDn` | 向左/向右移动编辑器 |
| `Ctrl` `K` `←` _/_ `→` | 移动活动编辑器组 |
<!--rehype:class=table-thead-hide-->
### 文件管理
| - | - |
|-----------------------|-----------------------------|
| `Ctrl` `N` | 新建文件 |
| `Ctrl` `O` | 打开文件 |
| `Ctrl` `S` | 保存 |
| `Ctrl` `Shift` `S` | 另存为 |
| `Ctrl` `K` `S` | 保存所有 |
| `Ctrl` `F4` | 关闭 |
| `Ctrl` `K` `Ctrl` `W` | 关闭松油 |
| `Ctrl` `Shift` `T` | 重新打开关闭的编辑器 |
| `Ctrl` `K` `Enter` | 保持预览模式编辑器打开 |
| `Ctrl` `Tab` | Open next |
| `Ctrl` `Shift` `Tab` | Open previous |
| `Ctrl` `K` `P` | 复制活动文件的路径 |
| `Ctrl` `K` `R` | 在资源管理器中显示活动文件 |
| `Ctrl` `K` `O` | 在新窗口/实例中显示活动文件 |
<!--rehype:class=table-thead-hide-->
### 展示
| - | - |
|--------------------|--------------------------------------------|
| `F11` | 切换全屏 |
| `Shift` `Alt` `0` | 切换编辑器布局(水平/垂直) |
| `Ctrl` `=` _/_ `-` | 放大/缩小 |
| `Ctrl` `B` | 切换侧边栏可见性 |
| `Ctrl` `Shift` `E` | 显示资源管理器/切换焦点 |
| `Ctrl` `Shift` `F` | 显示搜索 |
| `Ctrl` `Shift` `G` | 显示源代码管理 |
| `Ctrl` `Shift` `D` | 显示调试 |
| `Ctrl` `Shift` `X` | 显示扩展 |
| `Ctrl` `Shift` `H` | 在文件中替换 |
| `Ctrl` `Shift` `J` | 切换搜索详细信息 |
| `Ctrl` `Shift` `U` | 显示输出面板 |
| `Ctrl` `Shift` `V` | 打开 Markdown 预览 |
| `Ctrl` `K` `V` | 打开 Markdown 预览到一边 |
| `Ctrl` `K` `Z` | Zen 模式Esc Esc 退出) |
<!--rehype:class=table-thead-hide-->
### 调试
| - | - |
|--------------------------------|-------------------------------|
| `F9` | 切换断点 |
| `F5` | 开始/继续 |
| `Shift` `F5` | 停止 |
| `Shift` `F11` _/_ `F11` | 进/出 |
| `F10` | 跨过去 |
| `Ctrl` `K` `Ctrl` `I` | 显示悬停 |
| `Ctrl` <code>\`</code> | 显示综合终端 |
| `Ctrl` `Shift` <code>\`</code> | 创建一个新终端 |
| `Ctrl` `C` | 复制选择 |
| `Ctrl` `V` | 粘贴到活动终端 |
| `Ctrl` `↑` _/_ `↓` | 向上/向下滚动 |
| `Shift` `PgUp` _/_ `PgDn` | 向上/向下滚动页面 |
| `Ctrl` `Home` _/_ `End` | 滚动到顶部/底部 |
<!--rehype:class=table-thead-hide-->

27
package.json Normal file
View File

@ -0,0 +1,27 @@
{
"name": "reference",
"version": "1.0.0",
"description": "为开发人员分享快速参考备忘单(主要是方便自己)。",
"private": false,
"scripts": {
"build": "node scripts/build.mjs"
},
"repository": {
"type": "git",
"url": "git+https://github.com/jaywcjlove/reference.git"
},
"keywords": [],
"author": "jaywcjlove",
"license": "MIT",
"bugs": {
"url": "https://github.com/jaywcjlove/reference/issues"
},
"homepage": "https://github.com/jaywcjlove/reference#readme",
"devDependencies": {
"@wcj/markdown-to-html": "^2.0.14",
"fs-extra": "^10.1.0",
"recursive-readdir-files": "^2.3.0",
"rehype-document": "^6.1.0",
"rehype-format": "^4.0.1"
}
}

43
scripts/build.mjs Normal file
View File

@ -0,0 +1,43 @@
import fs from 'fs-extra';
import path from 'path';
import recursiveReaddirFiles from 'recursive-readdir-files';
import { create } from './create.mjs';
const OUTOUT = path.resolve(process.cwd(), 'dist');
const DOCS = path.resolve(process.cwd(), 'docs');
const CSSPATH = path.resolve(process.cwd(), 'scripts/style.css');
const CSS_OUTPUT_PATH = path.resolve(OUTOUT, 'style/style.css');
async function createHTML(files = [], num = 0) {
const dataFile = files[num];
if (!dataFile) {
console.log('\ndone!')
return;
}
++num;
const mdstr = await fs.readFile(dataFile.path);
const htmlPath = path.relative(DOCS, dataFile.path);
const outputHTMLPath = path.resolve(OUTOUT, 'docs', htmlPath).replace(/README.md$/i, 'index.html').replace(/.md$/, '.html');
await fs.ensureDir(path.dirname(outputHTMLPath));
const html = create(mdstr.toString(), {
css: [path.relative(path.dirname(outputHTMLPath), CSS_OUTPUT_PATH)]
});
await fs.writeFile(outputHTMLPath, html);
console.log(`♻️ \x1b[32;1m ${path.relative(OUTOUT, outputHTMLPath)} \x1b[0m`)
createHTML(files, num)
}
;(async () => {
await fs.ensureDir(OUTOUT);
await fs.emptyDir(OUTOUT);
await fs.ensureDir(path.dirname(CSS_OUTPUT_PATH));
await fs.copyFile(CSSPATH, CSS_OUTPUT_PATH)
const files = await recursiveReaddirFiles(process.cwd(), {
ignored: /\/(node_modules|\.git)/,
exclude: /(\.json|mjs)$/,
filter: (item) => item.ext === 'md',
});
createHTML(files);
})();

130
scripts/create.mjs Normal file
View File

@ -0,0 +1,130 @@
import markdown from '@wcj/markdown-to-html';
import rehypeDocument from 'rehype-document';
import rehypeFormat from 'rehype-format';
/** 标记 Number */
function panelAddNumber(arr = [], result = []) {
let n = 0;
let level = -1;
while (n < arr.length) {
const toc = arr[n];
const titleNum = Number(toc?.tagName?.replace(/^h/, ''));
if (titleNum && titleNum > -1) {
level = titleNum;
}
if (toc) {
result.push({ ...toc, number: level })
}
n++;
}
return result
}
function getChilds(data = [], level, result = []) {
for (let i = 1; i <= data.length; i++) {
const titleNum = Number(data[i]?.tagName?.replace(/^h/, ''));
if (titleNum && titleNum === level) break;
result.push(data[i]);
}
return result;
}
/** 获取 Heading 到下一个 Heading 之间的内容*/
function getHeader(data = [], level, result = []) {
for (let i = 1; i <= data.length; i++) {
if (/^h\d$/.test(data[i]?.tagName) || data[i]?.number !== level) break;
result.push(data[i]);
}
return result;
}
/** Markdown 文档转成树形结构 */
export function getTocsTree(arr = [], result = []) {
const data = panelAddNumber(arr);
let n = 0;
let level = -1;
while (n < data.length) {
const toc = data[n];
if (level === -1) {
level = toc.number;
}
const titleNum = Number(toc.tagName?.replace(/^h/, ''));
if (toc.number === level && titleNum === level) {
const header = getHeader(data.slice(n), level);
const warpCls = ['warp'];
const headerCls = ['warp-header', `h${level}warp`];
if (level === 1) warpCls.push('max-container');
const warpStyle = toc.properties['data-warp-style'];
delete toc.properties['data-warp-style']
const panle = {
type: 'element',
tagName: 'div',
properties: { class: warpCls, style: warpStyle },
children: [
{
type: 'element',
tagName: level === 1 ? 'header' : 'div',
properties: { class: headerCls },
children: [
toc,
{
type: 'element',
tagName: 'div',
properties: { class: 'warp-body' },
children: [
...header
],
}
],
}
],
}
const childs = getChilds([...data.slice(n + 1)], level);
const resultChilds = getTocsTree(childs);
if (resultChilds.length > 0) {
panle.children = panle.children.concat({
type: 'element',
tagName: 'div',
properties: { class: `h${level}warp-body` },
children: [...resultChilds]
});
}
result.push(panle);
}
n++;
}
return result;
}
export function create(str = '', options = {}) {
const mdOptions = {
hastNode: false,
remarkPlugins: [],
rehypePlugins: [
rehypeFormat,
[rehypeDocument, {
title: "Quick Reference",
css: [ ...options.css ],
meta: [
{ description: '为开发人员分享快速参考备忘单。' },
{ keywords: 'Quick,Reference' }
]
}],
],
rewrite: (node, index, parent) => {
if (node.type === 'element' && node.tagName === 'body') {
node.children = getTocsTree([ ...node.children ]);
}
}
}
return markdown(str, mdOptions);
}

0
scripts/nodes/footer.mjs Normal file
View File

152
scripts/style.css Normal file
View File

@ -0,0 +1,152 @@
body {
-webkit-text-size-adjust: 100%;
tab-size: 4;
margin: 0;
line-height: inherit;
font-family: ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";
}
body {
background-color: rgb(15 23 42/1);
color: rgb(203 213 225/1);
}
*, ::before, ::after {
box-sizing: border-box;
border-width: 0;
border-style: solid;
border-color: #e5e7eb;
}
blockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, pre {
margin: 0;
}
.max-container {
max-width: 1320px;
margin-left: auto;
margin-right: auto;
padding: 0.75rem;
}
.warp-header.h1warp {
text-align: center;
margin-top: 2rem;
margin-bottom: 2rem;
}
.warp-header.h1warp h1 {
font-size: 3rem;
line-height: 1;
margin-bottom: 1rem;
}
.warp-header.h2warp h2 {
margin: 0;
padding: 0;
margin-bottom: 24px;
position: relative;
font-size: 30px;
line-height: 1.2;
font-weight: 200;
font-family: -apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;
margin-top: 0;
}
.warp-header.h3warp {
z-index: 0;
display: flex;
height: 100%;
width: 100%;
flex-direction: column;
}
.warp-header.h3warp h3 {
color: rgb(226 232 240/1);
position: absolute;
right: 0px;
top: 0px;
z-index: 10;
border-bottom-left-radius: 0.5rem;
background-color: rgb(16 185 129/1);
padding-left: 0.75rem;
padding-right: 0.75rem;
padding-top: 0.25rem;
padding-bottom: 0.25rem;
font-size: 0.75rem;
line-height: 1rem;
letter-spacing: 0.05em;
}
.warp-header.h3warp .warp-body {
z-index: 0;
display: flex;
height: 100%;
width: 100%;
flex-direction: column;
}
.h2warp-body {
display: grid;
gap: 1.75rem;
font-size: 0.925rem;
line-height: 1.325rem;
grid-template-columns: repeat(3,minmax(0,1fr));
flex-direction: column;
}
.h2warp-body .warp {
background-color: rgb(30 41 59/1);
color: rgb(203 213 225/1);
position: relative;
display: flex;
flex-direction: column;
overflow: hidden;
border-radius: 0.5rem;
padding-top: 1.5rem;
box-shadow: 0 0 #0000, 0 0 #0000, 0 6px 8px rgba(102,119,136,0.03),0 1px 2px rgba(102,119,136,0.3);
}
table {
text-indent: 0;
border-color: inherit;
border-collapse: collapse
}
table td:not(:last-child)>code, kbd {
background-color: rgb(51 65 85/0.5);
color: rgb(203 213 225/1);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000;
letter-spacing: 0.075rem;
padding: 0.1em 0.54em;
border: 1px solid rgb(204,204,204);
border-color: rgb(51 65 85/1);
line-height: 1.6;
font-family: Arial,Helvetica,sans-serif;
font-size: 12px;
display: inline-block;
border-radius: 3px;
}
table tr+tr {
border-top: solid 1px #ececec94;
border-color: rgb(51 65 85/0.5);
}
table td:first-child {
white-space: nowrap;
}
table td, table th {
padding: 9px 14px;
text-align: left;
}
table tr th:last-child, table tr td:last-child {
text-align: right;
}
.table-thead-hide thead {
display: none;
}