SpaceVim
SpaceVim 是每个志愿者的努力的结晶,我们鼓励你参与进来,SpaceVim 是由社区驱动的。 下面是关于每个贡献者都应当遵守的简单规则的引导。
你可以只阅读下面内容中的,你需要用到的部分:
SpaceVim 的源码托管在 Github 上,欢迎参与。
SpaceVim 所有部分采用 GPLv3 许可。
额外的依赖文件,请参阅文件头许可信息,这些文件不应该使用空白文件头,我们也不会接受空白文件头的代码。
提交代码时,需要遵循一些约定,主要包括函数的命名格式、文档的写法、 快捷键定义的规范等,具体内容可以查阅《格式规范》, 在您进行贡献前,请确认您已经了解了以上公约的内容。
参考《conventional commits guidelines》,具体的格式如下:
<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.
首先需要阅读模块文档,了解什么是模块,以及模块应包括那些内容。
未关联配置的模块将会被拒绝。举个例子一个只有包和钩子的模块,就能被很简单地替换为变量 g:spacevim_custom_plugins
。
Vim 脚本的文件头,应该采用下面的格式:
"=============================================================================
" FILENAME --- NAME layer file for SpaceVim
" Copyright (c) 2012-2022 Shidong Wang & Contributors
" Author: YOUR NAME <YOUR EMAIL>
" URL: https://spacevim.org
" License: GPLv3
"=============================================================================
你应该用文件(比如:foo.vim)来替换掉 FILENAME,把 NAME 用你编写的 layer 的名字来代替,同时不要忘了替换 YOUR NAME 和 YOUR EMAIL。
把文件头中的默认作者名字(Shidong Wang)改为你自己的名字。
下面是一个创建一个名字为 foo
的新 layer 的示例
autoload/SpaceVim/layers/foo.vim
for foo
layer."=============================================================================
" foo.vim --- foo Layer file for SpaceVim
" Copyright (c) 2012-2022 Shidong Wang & Contributors
" Author: Shidong Wang < [email protected] >
" URL: https://spacevim.org
" License: GPLv3
"=============================================================================
""
" @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
docs/layers/foo.md
for foo
layer.docs/layers/index.md
, run :call SpaceVim#dev#layers#update()
to update layer list.现有的模块头文件中包含了作者等信息,这些信息通常不可修改。 对现有的模块进行改进时,需要尽量保持原先的默认行为。
按键映射是 SpaceVim 中非常重要的一部分。
如果你只想要拥有自己的按键映射的话,你可以在启动函数文件中进行新增。
如果你认为贡献一个新的按键映射有必要,那么请首先阅读文档, 把自己的按键映射调整为最佳状态,然后用你更改后的按键映射进行提交 PR。
始终牢记,在相关文档中记录新的按键映射或者是按键映射更改。它应该是 layername.md
和 documentation.md。
所有语言的专属按键绑定都是以 SPC l
前缀开始的。
快捷键 | 功能描述 |
---|---|
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 |
后台发送选中文本 |
上面所有的按键绑定都是默认的建议,但是它同样是基于自身的语言层的。
启动界面的LOGO默认是SpaceVim内置的一些ASCII码绘制的图形,存储于 core/banner
模块,
LOGO需要选择合适的高度,宽度限定90个字符宽度以内,高度限定在10以内。
SpaceVim 提供了一套内置的公共函数库(API),可以基于这个公共函数开发兼容 Vim 和 Neovim 的插件。同时,也可以向插件的 README 中添加 SpaceVim 的图标:
markdown 语法如下:
[![](https://spacevim.org/img/build-with-SpaceVim.svg)](https://spacevim.org/cn/)
SpaceVim 发布 v2.3.0,使用 Lua 重写了大部分内置插件
由Jekyll强力驱动