SpaceVim

一个模块化的 Vim/Neovim 配置集合


主页 | 关于我们 | 入门指南 | 使用文档 | 开发指南 | 用户社区 | 赞助 | English


开发者文档

SpaceVim 是每个志愿者的努力的结晶,我们鼓励你参与进来,SpaceVim 是由社区驱动的。 下面是关于每个贡献者都应当遵守的简单规则的引导。

你可以只阅读下面内容中的,你需要用到的部分:

贡献代码

SpaceVim 的源码托管在 Github 上,欢迎参与。

许可

SpaceVim 所有部分采用 GPLv3 许可。

额外的依赖文件,请参阅文件头许可信息,这些文件不应该使用空白文件头,我们也不会接受空白文件头的代码。

公约

提交代码时,需要遵循一些约定,主要包括函数的命名格式、文档的写法、 快捷键定义的规范等,具体内容可以查阅《格式规范》, 在您进行贡献前,请确认您已经了解了以上公约的内容。

Commit Message 格式规范

参考《conventional commits guidelines》,具体的格式如下:

<type>([optional scope]): <description>

[optional body]

[optional footer(s)]

types:

scopes:

除了以上列出的 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 NAMEYOUR 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:
"=============================================================================
" 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
  1. Add layer document docs/layers/foo.md for foo layer.
  2. Open docs/layers/index.md, run :call SpaceVim#dev#layers#update() to update layer list.
  3. send PR to SpaceVim.

改进现有的模块

现有的模块头文件中包含了作者等信息,这些信息通常不可修改。 对现有的模块进行改进时,需要尽量保持原先的默认行为。

贡献按键绑定

按键映射是 SpaceVim 中非常重要的一部分。

如果你只想要拥有自己的按键映射的话,你可以在启动函数文件中进行新增。

如果你认为贡献一个新的按键映射有必要,那么请首先阅读文档, 把自己的按键映射调整为最佳状态,然后用你更改后的按键映射进行提交 PR。

始终牢记,在相关文档中记录新的按键映射或者是按键映射更改。它应该是 layername.mddocumentation.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 开发

SpaceVim 提供了一套内置的公共函数库(API),可以基于这个公共函数开发兼容 Vim 和 Neovim 的插件。同时,也可以向插件的 README 中添加 SpaceVim 的图标:

markdown 语法如下:

[![](https://spacevim.org/img/build-with-SpaceVim.svg)](https://spacevim.org/cn/)

Newsletters

更新日志

由Jekyll强力驱动