1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-03 07:20:05 +08:00
SpaceVim/docs/cn/development.md

276 lines
9.4 KiB
Markdown
Raw Normal View History

---
title: "开发者文档"
description: "本文档是 SpaceVim 开发者文档描述了1. 如何提交问题 2. 如何贡献代码 3. 代码格式规则 4. 版本迭代信息"
2019-10-04 14:13:51 +08:00
lang: zh
---
2021-08-23 22:14:58 +08:00
# 开发者文档
SpaceVim 是每个志愿者的努力的结晶我们鼓励你参与进来SpaceVim 是由社区驱动的。
下面是关于每个贡献者都应当遵守的简单规则的引导。
你可以只阅读下面内容中的,你需要用到的部分:
<!-- vim-markdown-toc GFM -->
2018-01-30 20:33:04 +08:00
- [贡献代码](#贡献代码)
2024-02-19 19:36:11 +08:00
- [许可](#许可)
2018-01-30 20:33:04 +08:00
- [公约](#公约)
- [Commit Message 格式规范](#commit-message-格式规范)
2018-02-15 22:25:03 +08:00
- [贡献一个模块](#贡献一个模块)
2018-01-30 20:33:04 +08:00
- [文件头](#文件头)
- [新 layer 的作者](#新-layer-的作者)
2019-04-13 14:48:24 +08:00
- [改进现有的模块](#改进现有的模块)
2018-01-30 20:33:04 +08:00
- [贡献按键绑定](#贡献按键绑定)
- [特定语言的按键绑定](#特定语言的按键绑定)
2020-05-23 22:36:01 +08:00
- [欢迎界面LOGO](#欢迎界面logo)
- [基于 SpaceVim 开发](#基于-spacevim-开发)
- [Newsletters](#newsletters)
- [更新日志](#更新日志)
<!-- vim-markdown-toc -->
2018-01-29 15:20:12 +08:00
## 贡献代码
SpaceVim 的源码托管在 [Github](https://github.com/SpaceVim/SpaceVim) 上,欢迎参与。
2020-05-23 22:36:01 +08:00
2024-02-19 19:36:11 +08:00
### 许可
2019-02-03 20:51:01 +08:00
SpaceVim 所有部分采用 GPLv3 许可。
2018-01-31 14:59:53 +08:00
- 初始化及核心代码
- 所有模块相关文件
2018-09-19 12:27:49 +08:00
额外的依赖文件,请参阅文件头许可信息,这些文件不应该使用空白文件头,我们也不会接受空白文件头的代码。
2018-01-29 15:20:12 +08:00
### 公约
2020-05-23 22:36:01 +08:00
提交代码时,需要遵循一些约定,主要包括函数的命名格式、文档的写法、
快捷键定义的规范等,具体内容可以查阅[《格式规范》](../conventions/),
在您进行贡献前,请确认您已经了解了以上公约的内容。
### Commit Message 格式规范
2018-06-26 22:09:17 +08:00
参考《[conventional commits guidelines](https://www.conventionalcommits.org/)》,具体的格式如下:
2018-06-26 22:09:17 +08:00
```
<type>([optional scope]): <description>
[optional body]
[optional footer(s)]
```
**types:**
- `feat`: 增加新特性
- `fix`: 修复某个问题
- `docs`: 文档相关的修改
- `style`: 代码格式的修改,不涉及逻辑变更
- `refactor`: 代码重构
- `pref`: 提升已有特性使用体验
- `test`: 增加或者修正测试文件
- `ci`: ci 集成配置相关修改
- `chore`: 源码或者测试文件以外的修改
- `revert`: 撤销过往提交
**scopes:**
- `api`: 包含文件夹 `autoload/SpaceVim/api/``docs/api/` 内的所有文件
- `layer`: 包含文件夹 `autoload/SpaceVim/layers/``docs/layers/` 内的所有文件
- `plugin`: 包含文件夹 `autoload/SpaceVim/plugins/` 内的所有文件
- `bundle`: 包含文件夹 `bundle/` 内的所有文件
- `core`: 其他文件
除了以上列出的 scopes 之外,还可以使用模块的名称或者插件的名称作为 scope。
**subject:**
主题subject应当小于50个字符不应该以大写字母开头也不应该以句号结尾。
并且需要使用祈使句来描述具体在做什么。
**body:**
并不是每一个提交信息都需要写这部分内容,通常只有比较复杂的 commit message 才需要。
**footer**
`footer` 也是可选的内容,通常用于列出相关的 issue IDs。
**Breaking change**
非兼容性的提交必须在 `type/scope` 之后添加 `!` 符号。并且在 `footer` 内添加 `BREAKING CHANGE` 以描述具体变更的内容。例如:
```
refactor(tools#mpv)!: change default musics_directory
BREAKING CHANGE: `~/Music` is standard on macOS and
also on FreeDesktop's XDG.
```
2018-01-31 14:59:53 +08:00
### 贡献一个模块
首先需要阅读模块文档,了解什么是模块,以及模块应包括那些内容。
未关联配置的模块将会被拒绝。举个例子一个只有包和钩子的模块,就能被很简单地替换为变量 `g:spacevim_custom_plugins`
2018-01-31 14:59:53 +08:00
2018-01-29 15:20:12 +08:00
#### 文件头
Vim 脚本的文件头,应该采用下面的格式:
```vim
"=============================================================================
" FILENAME --- NAME layer file for SpaceVim
2022-06-12 15:37:35 +08:00
" Copyright (c) 2012-2022 Shidong Wang & Contributors
" Author: YOUR NAME <YOUR EMAIL>
" URL: https://spacevim.org
2018-02-15 22:25:03 +08:00
" License: GPLv3
"=============================================================================
```
你应该用文件比如foo.vim来替换掉 FILENAME把 NAME 用你编写的 layer 的名字来代替,同时不要忘了替换 **YOUR NAME****YOUR EMAIL**
#### 新 layer 的作者
把文件头中的默认作者名字Shidong Wang改为你自己的名字。
下面是一个创建一个名字为 `foo` 的新 layer 的示例
1. fork SpaceVim repo
2. add a layer file `autoload/SpaceVim/layers/foo.vim` for `foo` layer.
3. edit layer file, check out the example below:
```vim
"=============================================================================
" foo.vim --- foo Layer file for SpaceVim
2022-06-12 15:37:35 +08:00
" Copyright (c) 2012-2022 Shidong Wang & Contributors
2022-03-27 13:38:54 +08:00
" Author: Shidong Wang < wsdjeg@outlook.com >
" URL: https://spacevim.org
2018-02-15 22:25:03 +08:00
" License: GPLv3
"=============================================================================
""
2021-09-20 22:16:14 +08:00
" @section foo, layers-foo
" @parentsection layers
" This the doc for this layer:
"
" @subsection Key Bindings
" >
" Modes Keys Functions
" -------------------------------------------------------------
" normal <leader> j A generate accessors
" normal <leader> j s generate setter accessor
" <
" @subsection Layer options
" >
" Names Descriptions Default
" -------------------------------------------------------------
" option1 Set option1 for foo layer ''
" option2 Set option2 for foo layer []
" option3 Set option3 for foo layer {}
" <
" @subsection Global options
" >
" Names Descriptions Default
" -------------------------------------------------------------
" g:pluginA_opt1 Set opt1 for plugin A ''
" g:pluginB_opt2 Set opt2 for plugin B []
" <
function! SpaceVim#layers#foo#plugins() abort
let plugins = []
call add(plugins, ['Shougo/foo.vim', {'option' : 'value'}])
call add(plugins, ['Shougo/foo_test.vim', {'option' : 'value'}])
return plugins
endfunction
function! SpaceVim#layers#foo#config() abort
let g:foo_option1 = get(g:, 'foo_option1', 1)
let g:foo_option2 = get(g:, 'foo_option2', 2)
let g:foo_option3 = get(g:, 'foo_option3', 3)
" ...
endfunction
```
2019-04-13 14:48:24 +08:00
4. Add layer document `docs/layers/foo.md` for `foo` layer.
5. Open `docs/layers/index.md`, run `:call SpaceVim#dev#layers#update()` to update layer list.
6. send PR to SpaceVim.
2019-04-13 14:48:24 +08:00
#### 改进现有的模块
2019-04-13 14:48:24 +08:00
现有的模块头文件中包含了作者等信息,这些信息通常不可修改。
对现有的模块进行改进时,需要尽量保持原先的默认行为。
2018-01-29 15:20:12 +08:00
#### 贡献按键绑定
按键映射是 SpaceVim 中非常重要的一部分。
2020-05-23 22:36:01 +08:00
如果你只想要拥有自己的按键映射的话,你可以在启动函数文件中进行新增。
2020-05-23 22:36:01 +08:00
如果你认为贡献一个新的按键映射有必要,那么请首先阅读文档,
把自己的按键映射调整为最佳状态,然后用你更改后的按键映射进行提交 PR。
始终牢记,在相关文档中记录新的按键映射或者是按键映射更改。它应该是 `layername.md` 和 [documentation.md](https://spacevim.org/cn/documentation)。
2018-01-29 15:20:12 +08:00
##### 特定语言的按键绑定
所有语言的专属按键绑定都是以 `SPC l` 前缀开始的。
2019-02-03 20:51:01 +08:00
| 快捷键 | 功能描述 |
| ----------- | ---------------------------- |
| `SPC l r` | 为当前文件打开一个 runner |
| `SPC l e` | rename symbol |
| `SPC l d` | 显示文档 |
| `SPC l i r` | 删除未使用的导包 |
| `SPC l i s` | 排序导包 |
| `SPC l s i` | 开启一个语言专属的 REPL 进程 |
| `SPC l s b` | 后台发送当前缓冲区 |
| `SPC l s l` | 后台发送当前行 |
| `SPC l s s` | 后台发送选中文本 |
上面所有的按键绑定都是默认的建议,但是它同样是基于自身的语言层的。
2018-01-29 15:20:12 +08:00
2020-05-23 22:36:01 +08:00
#### 欢迎界面LOGO
2020-05-23 22:36:01 +08:00
启动界面的LOGO默认是SpaceVim内置的一些ASCII码绘制的图形存储于 `core/banner` 模块,
LOGO需要选择合适的高度宽度限定90个字符宽度以内高度限定在10以内。
2018-10-02 21:04:30 +08:00
## 基于 SpaceVim 开发
2019-01-21 09:51:53 +08:00
SpaceVim 提供了一套内置的公共函数库[API](../api/),可以基于这个公共函数开发兼容 Vim 和 Neovim 的插件。同时,也可以向插件的 README 中添加 SpaceVim 的图标:
![](https://img.shields.io/badge/build%20with-SpaceVim-ff69b4.svg)
2018-10-02 21:04:30 +08:00
markdown 语法如下:
```md
2018-10-02 21:04:30 +08:00
[![](https://spacevim.org/img/build-with-SpaceVim.svg)](https://spacevim.org/cn/)
```
## Newsletters
<ul>
{% for post in site.categories.newsletter_cn %}
<li>
<h3><a href="{{ post.url }}">{{ post.title }}</a></h3>
<span class="post-date">{{ post.date | date_to_string }}</span>
<p>{{ post.description | truncatewords: 100 }}</p>
</li>
{% endfor %}
</ul>
2018-10-02 21:04:30 +08:00
## 更新日志
<ul>
2018-05-27 20:54:33 +08:00
{% for post in site.categories.changelog_cn %}
<li>
2018-05-27 20:54:33 +08:00
<h3><a href="{{ post.url }}">{{ post.title }}</a></h3>
<span class="post-date">{{ post.date | date_to_string }}</span>
2020-05-10 14:05:04 +08:00
<p>{{ post.description | truncatewords: 100 }}</p>
</li>
{% endfor %}
</ul>