SpaceVim - 超级 vim 配置,支持多个语言开发,集成各种 IDE 常用功能, 发布 0.1.0 版本

9,433 阅读9分钟

SpaceVim

Build Status Version 0.1.0-dev MIT License Doc

Table of Contents

Introduction

2017-02-05_1359x721

SpaceVim is a Modular configuration, a bundle of custom settings and plugins for Vim, here we call them layers, each layer has different plugins and config, users just need to select the layers they need. It got inspired by spacemacs. If you use SpaceVim, please star it on github. It's a great way of getting feedback and gives me the kick to put more time into development.

If you encounter any bugs or have feature requests, just open an issue report on Github.

For learning about Vim in general, read vim-galore.

Throughput Graph

Community

Try these Neovim hangouts for any questions, problems or comments.

  • Ask
    • issue tracker for issue and feature requests
    • vi StackExchange for "how to" & configuration questions
    • Twitter Follow for hugs & pithy comments
  • Chat
    • Gitter
    • QQ
    • Facebook
  • Discuss

Install

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

before use SpaceVim, you should install the plugin by call dein#install()

Installation of neovim/vim with python support:

neovim installation

Building Vim from source

for more info about the install script, please check:

curl -sLf https://spacevim.org/install.sh | bash -s -- -h
windows support
  • For vim in windows, please just clone this repo as vimfiles in you Home directory. by default, when open a cmd, the current dir is your Home directory, run this command in cmd. make sure you have a backup of your own vimfiles.
git clone https://github.com/SpaceVim/SpaceVim.git vimfiles
  • For neovim in windows, please clone this repo as AppData\Local\nvim in your home directory. for more info, please check out neovim's wiki. by default, when open a cmd, the current dir is your Home directory, run this command in cmd.
git clone https://github.com/SpaceVim/SpaceVim.git AppData\Local\nvim

File Structure

Features

Awesome ui
  • outline + filemanager + checker 2017-02-01_1360x721
Language specific mode
c/c++ support
  1. code completion: autocompletion and fuzzy match. 2017-02-01_1359x720
  2. syntax check: Asynchronous linting and make framework. 2017-02-01_1359x722
go support
  1. code completion: 2017-02-01_1360x721
  2. syntax check: 2017-02-01_1359x720
python support
  1. code completion: 2017-02-02_1360x724
  2. syntax check: 2017-02-02_1358x720
Neovim centric - Dark powered mode of SpaceVim.

By default, SpaceVim use these dark powered plugins:

  1. deoplete.nvim - Dark powered asynchronous completion framework for neovim
  2. dein.vim - Dark powered Vim/Neovim plugin manager

TODO:

  1. defx.nvim - Dark powered file explorer
  2. deoppet.nvim - Dark powered snippet plugin
  3. denite.nvim - Dark powered asynchronous unite all interfaces for Neovim/Vim8
Modular configuration
  • SpaceVim will load custom configuration from ~/.local.vim and .local.vim in current directory.
  • SpaceVim support ~/.SpaceVim.d/init.vim and ./SpaceVim.d/init.vim.

Here is an example:

" Here are some basic customizations, please refer to the top of the vimrc
" file for all possible options:
let g:spacevim_default_indent = 3
let g:spacevim_max_column     = 80
let g:spacevim_colorscheme    = 'my_awesome_colorscheme'
let g:spacevim_plugin_manager = 'dein'  " neobundle or dein or vim-plug

" Change the default directory where all miscellaneous persistent files go.
" By default it is ~/.cache/vimfiles.
let g:spacevim_plugin_bundle_dir = "/some/place/else"

" By default, language specific plugins are not loaded. This can be changed
" with the following:
let g:spacevim_plugin_groups_exclude = ['ruby', 'python']

" If there are groups you want always loaded, you can use this:
let g:spacevim_plugin_groups_include = ['go']

" Alternatively, you can set this variable to load exactly what you want:
let g:spacevim_plugin_groups = ['core', 'web']

" If there is a particular plugin you don't like, you can define this
" variable to disable them entirely:
let g:spacevim_disabled_plugins=['vim-foo', 'vim-bar']
" If you want to add some custom plugins, use these options:
let g:spacevim_custom_plugins = [
 \ ['plasticboy/vim-markdown', {'on_ft' : 'markdown'}],
 \ ['wsdjeg/GitHub.vim'],
 \ ]

" Anything defined here are simply overrides
set wildignore+=\*/node_modules/\*
set guifont=Wingdings:h10

Multiple leader mode

Global origin vim leader, default : \

Vim's origin global leader can be used in all modes.

Local origin vim leader, default : ,

Vim's origin local leader can be used in all the mode.

Windows function leader, default : s

Windows function leader can only be used in normal mode. For the list of mappings see the link

Unite work flow leader, default : f

Unite work flow leader can only be used in normal mode. Unite leader need unite groups.

Unite centric work-flow

  • List all the plugins has been installed, fuzzy find what you want, default action is open the github website of current plugin. default key is <leader>lp 2017-01-21_1358x725

  • List all the mappings and description: f<space> 2017-02-01_1359x723

  • List all the starred repos in github.com, fuzzy find and open the website of the repo. default key is <leader>ls 2017-02-01_1359x722

Plugin Highlights

  • Package management with caching enabled and lazy loading
  • Project-aware tabs and label
  • Vimfiler as file-manager + SSH connections
  • Go completion via vim-go and gocode
  • Javascript completion via Tern
  • PHP completion, indent, folds, syntax
  • Python jedi completion, pep8 convention
  • Languages: Ansible, css3, csv, json, less, markdown, mustache
  • Helpers: Undo tree, bookmarks, git, tmux navigation, hex editor, sessions, and much more.

    Note that 90% of the plugins are [lazy-loaded]. [lazy-loaded]: ./config/plugins.vim

Non Lazy-Loaded Plugins

Name Description
dein.vim Dark powered Vim/Neovim plugin manager
vimproc Interactive command execution
colorschemes Awesome color-schemes
file-line Allow opening a file in a given line
neomru MRU source for Unite
cursorword Underlines word under cursor
gitbranch Lightweight git branch detection
gitgutter Shows git diffs in the gutter
tinyline Tiny great looking statusline
tagabana Central location for all tags
bookmarks Bookmarks, works independently from vim marks
tmux-navigator Seamless navigation between tmux panes and vim splits

Lazy-Loaded Plugins

Language
Name Description
html5 HTML5 omnicomplete and syntax
mustache Mustache and handlebars syntax
markdown Markdown syntax highlighting
ansible-yaml Additional support for Ansible
jinja Jinja support in vim
less Syntax for LESS
css3-syntax CSS3 syntax support to vim's built-in syntax/css.vim
csv Handling column separated data
pep8-indent Nicer Python indentation
logstash Highlights logstash configuration files
tmux vim plugin for tmux.conf
json Better JSON support
toml Syntax for TOML
i3 i3 window manager config syntax
Dockerfile syntax and snippets for Dockerfile
go Go development
jedi-vim Python jedi autocompletion library
ruby Ruby configuration files
portfile Macports portfile configuration files
javascript Enhanced Javascript syntax
javascript-indent Javascript indent script
tern Provides Tern-based JavaScript editing support
php Up-to-date PHP syntax file
phpfold PHP folding
phpcomplete Improved PHP omnicompletion
phpindent PHP official indenting
phpspec PhpSpec integration
Commands
Name Description
vimfiler Powerful file explorer
[NERD Commenter] Comment tool - no comment necessary
vinarise Hex editor
syntastic Syntax checking hacks
gita An awesome git handling plugin
gista Manipulate gists in Vim
undotree Ultimate undo history visualizer
incsearch Improved incremental searching
expand-region Visually select increasingly larger regions of text
open-browser Open URI with your favorite browser
prettyprint Pretty-print vim variables
quickrun Run commands quickly
ref Integrated reference viewer
dictionary Dictionary.app interface
vimwiki Personal Wiki for Vim
thesaurus Look up words in an online thesaurus
Commands
Name Description
goyo Distraction-free writing
limelight Hyperfocus-writing
matchit Intelligent pair matching
indentline Display vertical indention lines
choosewin Choose window to use, like tmux's 'display-pane'
Completion
Name Description
delimitmate Insert mode auto-completion for quotes, parenthesis, brackets
echodoc Print objects' documentation in echo area
deoplete Neovim: Dark powered asynchronous completion framework
neocomplete Next generation completion framework
neosnippet Contains neocomplete snippets source
Unite
Name Description
unite Unite and create user interfaces
unite-colorscheme Browse colorschemes
unite-filetype Select file type
unite-history Browse history of command/search
unite-build Build with Unite interface
unite-outline File "outline" source for unite
unite-tag Tags source for Unite
unite-quickfix Quickfix source for Unite
neossh SSH interface for plugins
unite-pull-request GitHub pull-request source for Unite
junkfile Create temporary files for memo and testing
unite-issue Issue manager for JIRA and GitHub
Operators & Text Objects
Name Description
operator-user Define your own operator easily
operator-replace Operator to replace text with register content
operator-surround Operator to enclose text objects
textobj-user Create your own text objects
textobj-multiblock Handle multiple brackets objects

Custom Key bindings

Key Mode Action
<leader>+y visual Copy selection to X11 clipboard ("+y)
Ctrl+c Normal Copy full path of current buffer to X11 clipboard
<leader>+Ctrl+c Normal Copy github.com url of current buffer to X11 clipboard(if it is a github repo)
<leader>+Ctrl+l Normal/visual Copy github.com url of current lines to X11 clipboard(if it is a github repo)
<leader>+p Normal/visual Paste selection from X11 clipboard ("+p)
Ctrl+f Normal Smart page forward (C-f/C-d)
Ctrl+b Normal Smart page backwards (C-b/C-u)
Ctrl+e Normal Smart scroll down (3C-e/j)
Ctrl+y Normal Smart scroll up (3C-y/k)
Ctrl+q Normal Ctrl+w
Ctrl+x Normal Switch buffer and placement
Up,Down Normal Smart up and down
} Normal After paragraph motion go to first non-blank char (}^)
< Visual/Normal Indent to left and re-select
> Visual/Normal Indent to right and re-select
Tab Visual Indent to right and re-select
Shift+Tab Visual Indent to left and re-select
gp Normal Select last paste
Q/gQ Normal Disable EX-mode ()
Ctrl+a Command Navigation in command line
Ctrl+b Command Move cursor backward in command line
Ctrl+f Command Move cursor forward in command line
File Operations
Key Mode Action
<leader>+cd Normal Switch to the directory of the open buffer
<leader>+w Normal/visual Write (:w)
Ctrl+s Normal/visual/Command Write (:w)
:w!! Command Write as root (%!sudo tee > /dev/null %)
Editor UI
Key Mode Action
F2 All Toggle tagbar
F3 All Toggle Vimfiler
<leader>+ts Normal Toggle spell-checker (:setlocal spell!)
<leader>+tn Normal Toggle line numbers (:setlocal nonumber!)
<leader>+tl Normal Toggle hidden characters (:setlocal nolist!)
<leader>+th Normal Toggle highlighted search (:set hlsearch!)
<leader>+tw Normal Toggle wrap (:setlocal wrap! breakindent!)
g0 Normal Go to first tab (:tabfirst)
g$ Normal Go to last tab (:tablast)
gr Normal Go to previous tab (:tabprevious)
Ctrl+<Dow> Normal Move to split below (j)
Ctrl+<Up> Normal Move to upper split (k)
Ctrl+<Left> Normal Move to left split (h)
Ctrl+<Right> Normal Move to right split (l)
* Visual Search selection forwards
# Visual Search selection backwards
,+Space Normal Remove all spaces at EOL
Ctrl+r Visual Replace selection
<leader>+lj Normal Next on location list
<leader>+lk Normal Previous on location list
<leader>+S Normal/visual Source selection
Window Management
Key Mode Action
q Normal Smart buffer close
s+p Normal Split nicely
s+v Normal :split
s+g Normal :vsplit
s+t Normal Open new tab (:tabnew)
s+o Normal Close other windows (:only)
s+x Normal Remove buffer, leave blank window
s+q Normal Closes current buffer (:close)
s+Q Normal Removes current buffer (:bdelete)
Tab Normal Next window or tab
Shift+Tab Normal Previous window or tab
<leader>+sv Normal Split with previous buffer
<leader>+sg Normal Vertical split with previous buffer
Plugin: Unite
Key Mode Action
[unite] Normal unite leader, default is f, :h g:spacevim_unite_leader
[unite]+r Normal Resumes Unite window
[unite]+f Normal Opens Unite file recursive search
[unite]+i Normal Opens Unite git file search
[unite]+g Normal Opens Unite grep with ag (the_silver_searcher)
[unite]+u Normal Opens Unite source
[unite]+t Normal Opens Unite tag
[unite]+T Normal Opens Unite tag/include
[unite]+l Normal Opens Unite location list
[unite]+q Normal Opens Unite quick fix
[unite]+e Normal Opens Unite register
[unite]+j Normal Opens Unite jump, change
[unite]+h Normal Opens Unite history/yank
[unite]+s Normal Opens Unite session
[unite]+n Normal Opens Unite session/new
[unite]+o Normal Opens Unite outline
[unite]+c Normal Opens Unite buffer bookmark file in current directory
[unite]+b Normal Opens Unite buffer bookmark file in buffer directory
[unite]+ma Normal Opens Unite mapping
[unite]+<space> Normal Opens Unite menu:CustomKeyMaps
[unite]+me Normal Opens Unite output messages
<leader>+bl Normal Opens Unite buffers, mru, bookmark
<leader>+ta Normal Opens Unite tab
<leader>+ugf Normal Opens Unite file with word at cursor
<leader>+ugt Normal/visual Opens Unite tag with word at cursor
Within Unite buffers
Ctrl+h/k/l/r Normal Un-map
Ctrl+r Normal Redraw
Ctrl+j Insert Select next line
Ctrl+k Insert Select previous line
' Normal Toggle mark current candidate, up
e Normal Run default action
Ctrl+v Normal Open in a split
Ctrl+s Normal Open in a vertical split
Ctrl+t Normal Open in a new tab
Tab Normal Ctrl+w+w
Escape Normal Exit unite
jj Insert Leave Insert mode
r Normal Replace ('search' profile) or rename
Tab Insert Unite autocompletion
Ctrl+z Normal/insert Toggle transpose window
Ctrl+w Insert Delete backward path
Plugin: VimFiler
Key Mode Action
<F3> Normal Toggle file explorer
Within VimFiler buffers
Ctrl+j Normal Un-map
Ctrl+l Normal Un-map
E Normal Un-map
sv Normal Split edit
sg Normal Vertical split edit
p Normal Preview
i Normal Switch to directory history
v Normal Quick look
gx Normal Execute with vimfiler associated
' Normal Toggle mark current line
V Normal Clear all marks
Ctrl+r Normal Redraw
Plugin: neocomplete
Key Mode Action
Enter Insert Smart snippet expansion
Ctrl+space Insert Autocomplete with Unite
Tab Insert/select Smart tab movement or completion
Ctrl+j/k/f/b Insert Movement in popup
Ctrl+g Insert Undo completion
Ctrl+l Insert Complete common string
Ctrl+o Insert Expand snippet
Ctrl+y Insert Close pop-up
Ctrl+e Insert Close pop-up
Ctrl+l Insert Complete common string
Ctrl+d Insert Scroll down
Ctrl+u Insert Scroll up
Plugin: NERD Commenter
Key Mode Action
<leader>+cc Normal/visual Comment out the current line or text selected in visual mode.
<leader>+cn Normal/visual Same as cc but forces nesting.
<leader>+cu Normal/visual Uncomments the selected line(s).
<leader>+cs Normal/visual Comments out the selected lines with a pretty block formatted layout.
<leader>+cy Normal/visual Same as cc except that the commented line(s) are yanked first.
Plugin: Goyo and Limelight
Key Mode Action
<leader>+G Normal Toggle distraction-free writing
Plugin: ChooseWin
Key Mode Action
- Normal Choose a window to edit
<leader>+- Normal Switch editing window with selected
Plugin: Bookmarks
Key Mode Action
m+a Normal Show list of all bookmarks
m+m Normal Toggle bookmark in current line
m+n Normal Jump to next bookmark
m+p Normal Jump to previous bookmark
m+i Normal Annotate bookmark
Plugin: Gita
Key Mode Action
<leader>+gs Normal Git status
<leader>+gd Normal Git diff
<leader>+gc Normal Git commit
<leader>+gb Normal Git blame
<leader>+gp Normal Git push
Plugin: vim-signify
Key Mode Action
<leader>+hj / ]c Normal Jump to next hunk
<leader>+hk / [c Normal Jump to previous hunk
<leader>+hJ / ]C Normal Jump to last hunk
<leader>+hK / [C Normal Jump to first hunk
Misc Plugins
Key Mode Action
<leader>+gu Normal Open undo tree
<leader>+i Normal Toggle indentation lines
<leader>+j Normal Start smalls
<leader>+r Normal Quickrun
<leader>+? Normal Dictionary
<leader>+W Normal Wiki
<leader>+K Normal Thesaurus

Custom configuration

SpaceVim use ~/.SpaceVim.d/init.vim as default global init file. you can set SpaceVim-options or config layers in it. SpaceVim also will add ~/.SpaceVim.d/ into runtimepath. so you can write your own vim script in it.

SpaceVim also support local config file for project, the init file is .SpaceVim.d/init.vim in the root of your project. .SpaceVim.d/ will also be added into runtimepath.

here is an example config file for SpaceVim:

" set the options of SpaceVim
let g:spacevim_colorscheme = 'solarized'

" setting layers, load 'lang#java' layer.
call SpaceVim#layers#load('lang#java')

" add custom plugins.
let g:spacevim_custom_plugins = [
 \ ['plasticboy/vim-markdown', {'on_ft' : 'markdown'}],
 \ ['wsdjeg/GitHub.vim'],
 \ ]

 " custom mappings:
 nnoremap <c-l> :Ydc<cr>

Support SpaceVim

report bugs

If you get any issues, please open an issue with the ISSUE_TEMPLATE. It is useful for me to debug for this issue.

contribute to SpaceVim

Credits & Thanks