LOADING...

加载过慢请开启缓存(浏览器默认开启)

loading

SpaceVim

SpaceVim 同时支持 Vim 和 Neovim,但是 Neovim 在很多 Linux 发行版有更好的扩展,像 Debian 默认的 Vim 包是缺少 lua 的编译支持,很多插件就没法用上。所以这里以 Neovim 来使用作为 SpaceVim 的编辑器。

安装

curl -sLf https://spacevim.org/install.sh | bash

命令执行完后,首次打开会自动下载依赖。

配置

SpaceVim 的配置在 ~/.SpaceVim.d 目录里,大部分的设置都可以通过 init.toml 来配。

通用配置

主题

[options]
colorscheme = "SpaceVim"
colorscheme_bg = "light"

[[layers]]
name = "colorscheme"

文件搜索

[[layers]]
name = "fzf"

SpaceVim 常用配置

[options]
......
statusline_separator = "arrow"
statusline_unicode_symbols = true
filemanager = "defx"
filetree_direction = "left"
relativenumber = false

Vim 常用配置

假如是之前有些 vimscript 的配置,刚好没有对应的 SpaceVim 配置选项,那么可以在 ~/.SpaceVim.d/autoload/ 目录里头创建脚本,封装为启动 SpaceVim 之前和之后两个时期的函数,如创建 myspacevim.vim 脚本:

function! myspacevim#before() abort
  ......
  " set nu
  " set si
  set autoread
  set termguicolors

  " auto refresh file
  au FocusGained,BufEnter * :checktime

  " code style
  au FileType * setlocal et sta sw=2 sts=2
  au FileType python setlocal et sta sw=4 sts=4
  au FileType java setlocal et sta sw=4 sts=4
  au FileType php setlocal et sta sw=4 sts=4
  au FileType javascript setlocal et sta sw=4 sts=4
  au FileType perl setlocal et sta sw=4 sts=4 equalprg=perltidy\ -st
endfunction

function! myspacevim#after() abort
  ......
endfunction

然后在 init.toml 里头加上:

[options]
......
bootstrap_before = "myspacevim#before"
bootstrap_after = "myspacevim#after"

常用插件

历时变化,一直在做优胜劣汰,插件最后沒剩下多少,可能是 Vim 开箱即用就已经有不错体验了(打勾的为 SpaceVim 已有的):

  • auto-pairs:括号补全
  • rainbow:让嵌套括号有不同的颜色
  • ctrlp.vim:文件快速搜索,支持模糊查询
  • BufClose.vim:彻底删除关闭文件的 buffer,SpaceVim 通过 Space b 触发 buffer 相关的
  • nerdtree:文件目录树,SpaceVim 带上更好的 defx
  • vim-easymotion:以键盘字符快速定位到代码的某个位置,SpaceVim 通过 Space j 触发

以 rainbow 为例安装配置:

[[custom_plugins]]
name = 'luochen1990/rainbow'
merged = false

在 myspacevim.vim 里头进行配置:

function! myspacevim#before() abort
  ......
  let lightcolors =  ['lightblue', 'lightyellow', 'red', 'darkgreen', 'darkyellow', 'lightred', 'yellow', 'cyan', 'magenta', 'white']
  let darkcolors = ['DarkBlue', 'Magenta', 'Black', 'Red', 'DarkGray', 'DarkGreen', 'DarkYellow']
  let g:rainbow_conf = {
        \'ctermfgs': (&background=="dark"? darkcolors : lightcolors)
        \}
  let g:rainbow_active=1
endfunction

Lsp

Vim/Neovim 有很多 Lsp 插件,coc 是相对成熟的,SpaceVim 默认并不是 coc,所以需要:

[options]
......
autocomplete_method = "coc"

在 myspacevim.vim 文件加上 coc 的快捷键设定:

function! myspacevim#after() abort
  ......
  nmap <silent> gd <Plug>(coc-definition)
  nmap <silent> gy <Plug>(coc-type-definition)
  nmap <silent> gi <Plug>(coc-implementation)
  nmap <silent> gr <Plug>(coc-references)
  nmap <silent> [g <Plug>(coc-diagnostic-prev)
  nmap <silent> ]g <Plug>(coc-diagnostic-next)
  nnoremap <silent> K :call <SID>show_documentation()<CR>
endfunction

function! s:show_documentation()
  if (index(['vim','help'], &filetype) >= 0)
    execute 'h '.expand('<cword>')
  else
    call CocAction('doHover')
  endif
endfunction

因为 lsp 主要还是对语言服务器的调用,所以对于每种语言都需要安装对应的服务器,在 Vim/Neovim 里头命令模式下执行诸如 CocInstall coc-java 来安装,更详细可以参考:

同样,每加上一种,就在 init.toml 加上对应语言的 layer:

[[layers]]
name = "lang#php"

[[layers]]
name = "lang#java"

coc.nvim 是作为一个独立于 SpaceVim 的项目存在,配置在 ~/.config/coc/ 文件夹内。但是 SpaceVim 对于 coc 单独的配置是落在 ~/.SpaceVim/coc-settings.json 中。

问题

Java 项目缓存报错

因为 SpaceVim 默认是使用 neomake 做代码的 linter,但是假如项目是 java 的话,因为生成在主项目目录下的 class,导致各种 classpath 不对,所以我们要把 neomake 换掉:

[options]
......
enable_neomake = false
enable_ale = true

[[layers]]
name = "checkers"
enable = false

刷新缓存,在命令行模式执行 CocCommand java.clean.workspace

Java 项目 Getter 和 Setter 报错

下载 lombok.jar, coc-settings.json 加上:

{
  "java.jdt.ls.vmargs": "-javaagent:${lombok.jar_path} -Xbootclasspath/a:${lombok.jar_path}"
}

FreeBSD 下无法安装 coc 插件

使用 CocInstall 安装插件在 FreeBSD 却会出现各种权限错误,官方说是 rimraf 的问题,只能手动安装语言服务:

npm i -g yarn
cd ~/.config/coc/extensions
yarn add coc-java