SpaceVim - Like spacemacs, but for VIM
SpaceVim
SpaceVim is a Modular configuration, a bundle of custom settings and plugins, for Vim. It
got inspired by spacemacs.
For learning about Vim in general, read
vim-galore.
Install
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:
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 defalut, when open a cmd, the current dir is your Home directory, run this command in cmd.
make sure you have backup 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 defalut, 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
Features
- Neovim-centric
- Modular configuration
- Lazy-load 90% of plugins with [dein.vim]
- Robust, yet light weight
- Unite centric work-flow
- Awesome ui
- Language specific mode
- Extensive Neocomplete setup
- Central location for tags
- Lightweight simple status/tabline
- Premium color-schemes
Structure
- config/ - Configuration
- plugins/ - Plugin configurations
- mappings.vim - Key mappings
- autocmds.vim - autocmd group
- general.vim - General configuration
- init.vim -
runtimepath
initialization - neovim.vim - Neovim specific setup
- plugins.vim - Plugin bundles
- commands.vim - Commands
- functions.vim - Functions
- main.vim - Main config
- ftplugin/ - Language specific custom settings
- snippets/ - Code snippets
- filetype.vim - Custom filetype detection
- init.vim - Sources
config/main.vim
- vimrc - Sources
config/main.vim
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
let g:spacevim_cache_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 this 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
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
-
List all the mappings and description:
f<space>
-
List all the starred repos in github.com, fuzzy find and open the website of the repo. default key is
<leader>ls
Awesome ui
- outline + filemanager + checker
Language specific mode
- java
- viml
- rust
- php
- c/c++
- js
- python
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.
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 |
[tinycomment] | Robust but light-weight commenting |
[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, parens, 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 |
Normal/visual | Copy selection to X11 clipboard ("+y) |
<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 root directory(vim-rooter) |
<leader> +w |
Normal/visual | Write (:w) |
Ctrl +s |
All | Write (:w) |
W!! |
Command | Write as root |
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 |
---|---|---|
; +r |
Normal | Resumes Unite window |
; +f |
Normal | Opens Unite file recursive search |
; +i |
Normal | Opens Unite git file search |
; +g |
Normal | Opens Unite grep with ag (the_silver_searcher) |
; +u |
Normal | Opens Unite source |
; +t |
Normal | Opens Unite tag |
; +T |
Normal | Opens Unite tag/include |
; +l |
Normal | Opens Unite location list |
; +q |
Normal | Opens Unite quick fix |
; +e |
Normal | Opens Unite register |
; +j |
Normal | Opens Unite jump, change |
; +h |
Normal | Opens Unite history/yank |
; +s |
Normal | Opens Unite session |
; +o |
Normal | Opens Unite outline |
; +ma |
Normal | Opens Unite mapping |
; +me |
Normal | Opens Unite output messages |
<leader> +b |
Normal | Opens Unite buffers, mru, bookmark |
<leader> +ta |
Normal | Opens Unite tab |
<leader> +gf |
Normal | Opens Unite file with word at cursor |
<leader> +gt |
Normal/visual | Opens Unite tag with word at cursor |
<leader> +gg |
Visual | Opens Unite navigate 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 |
---|---|---|
; +e |
Normal | Toggle file explorer |
; +a |
Normal | Toggle file explorer on current file |
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 |
Ctrl +r |
Normal | Redraw |
Ctrl +q |
Normal | Quick look |
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: TinyComment
Key | Mode | Action |
---|---|---|
<leader> +v |
Normal/visual | Toggle single-line comments |
<leader> +V |
Normal/visual | Toggle comment block |
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> +gB |
Normal | Open in browser |
<leader> +gp |
Normal | Git push |
Plugin: GitGutter
Key | Mode | Action |
---|---|---|
<leader> +hj |
Normal | Jump to next hunk |
<leader> +hk |
Normal | Jump to previous hunk |
<leader> +hs |
Normal | Stage hunk |
<leader> +hr |
Normal | Revert hunk |
<leader> +hp |
Normal | Preview 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 |
其实相对于介于牛A和牛C之间的终端IDE宇宙级的emacs/vim魔改插件梦幻配置组合,作为一个纯user而言,更希望能有几款,配色基本ok,字符集靠谱,无外部python/lua/gnu语言依赖,windows/mac/linux通吃的精简单.vimrc或者.vim+.vimrc的一键解压即用的包来给我等小白使用,简单轻便,跨系统通吃即可,
啥多窗口,多tab,多panel,自带status_bar,自带调试,log,文件管理器etc.统统不需要,运维使用救火场景时,90%的功能用不到,说实话。
不过还是先赞为敬:D
@nickfan SpaceVim的目标当中也包含这个,初始的默认设置最终应该是极简单,无依赖的,感谢关注。
如果需要关注项目进展,可以看我们github仓库,或者加我们群。当然我也有twitter facebook gitter等交流平台。
@nickfan 时隔一年,再回这个论坛,找到了这个帖子,内容老旧太多了,SpaceVim 经过这一年的版本迭代,已经加了很多特新,我在考虑如何将这些内容更新到这个帖子内,或者说是重新开一个帖子来写。
@SpaceVim 目前最大难处是xshell客户端该如何设置才能让spacevim正常显示。
xterm256?
@SpaceVim https://spacevim.org/ 官网当了?