diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 000000000..c080a004c
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,9 @@
+root = true
+
+[*.vim]
+indent_style = space
+indent_size = 2
+end_of_line = 1f
+insert_final_newline = true
+charset = utf_8
+
diff --git a/.gitignore b/.gitignore
index 759a81299..bfb1d49c7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,3 +24,4 @@ cscope.files
cscope.out
cscope.in.out
cscope.po.out
+build/
diff --git a/.travis.yml b/.travis.yml
index b9f5ea232..22aaa8cae 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -27,39 +27,36 @@ matrix:
install:
- |
+ set -e
if [ "${LINT#vimlint}" != "$LINT" ]; then
git clone --depth=1 https://github.com/syngan/vim-vimlint /tmp/vimlint
git clone --depth=1 https://github.com/ynkdir/vim-vimlparser /tmp/vimlparser
elif [ "${LINT#vint}" != "$LINT" ]; then
virtualenv /tmp/vint && source /tmp/vint/bin/activate && pip install vim-vint
elif [ "${LINT#vader}" != "$LINT" ]; then
- git clone https://github.com/junegunn/vader.vim.git /tmp/vader
C_OPTS="--prefix=$DEPS --with-features=huge --disable-gui --enable-pythoninterp"
- git clone --depth 1 https://github.com/vim/vim
- cd vim
- ./configure $C_OPTS
- make
- make install
- cd -
+ (git clone --depth 1 https://github.com/vim/vim /tmp/vim &&
+ cd /tmp/vim &&
+ ./configure $C_OPTS &&
+ make install)
fi
script:
- |
+ set -ex
if [ "$LINT" = "vimlint" ]; then
- sh /tmp/vimlint/bin/vimlint.sh -l /tmp/vimlint -p /tmp/vimlparser ./config
- sh /tmp/vimlint/bin/vimlint.sh -l /tmp/vimlint -p /tmp/vimlparser ./autoload
- sh /tmp/vimlint/bin/vimlint.sh -l /tmp/vimlint -p /tmp/vimlparser ./ftplugin
- sh /tmp/vimlint/bin/vimlint.sh -l /tmp/vimlint -p /tmp/vimlparser ./syntax
- sh /tmp/vimlint/bin/vimlint.sh -l /tmp/vimlint -p /tmp/vimlparser ./mode
+ for file in $(find . -name "*.vim");
+ do
+ sh /tmp/vimlint/bin/vimlint.sh -l /tmp/vimlint -p /tmp/vimlparser $file;
+ done
elif [ "$LINT" = "vimlint-errors" ]; then
- sh /tmp/vimlint/bin/vimlint.sh -E -l /tmp/vimlint -p /tmp/vimlparser ./config
- sh /tmp/vimlint/bin/vimlint.sh -E -l /tmp/vimlint -p /tmp/vimlparser ./autoload
- sh /tmp/vimlint/bin/vimlint.sh -E -l /tmp/vimlint -p /tmp/vimlparser ./ftplugin
- sh /tmp/vimlint/bin/vimlint.sh -E -l /tmp/vimlint -p /tmp/vimlparser ./syntax
- sh /tmp/vimlint/bin/vimlint.sh -E -l /tmp/vimlint -p /tmp/vimlparser ./mode
+ for file in $(find . -name "*.vim");
+ do
+ sh /tmp/vimlint/bin/vimlint.sh -E -l /tmp/vimlint -p /tmp/vimlparser $file;
+ done
elif [ "$LINT" = "vint" ]; then
vint .
elif [ "$LINT" = "vint-errors" ]; then
vint --error .
elif [ "$LINT" = "vader" ]; then
- vim -Nu test/test.vim -c 'Vader! test/**'
+ make test
fi
diff --git a/Makefile b/Makefile
new file mode 100644
index 000000000..30e38f308
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,13 @@
+test: build/vader | build
+ vim -Nu test/vimrc -c 'Vader! test/**'
+
+build/vader:
+ git clone --depth 1 https://github.com/junegunn/vader.vim.git $@
+
+build:
+ mkdir -p $@
+
+clean:
+ $(RM) -r build
+
+.PHONY: clean test
diff --git a/README.md b/README.md
index 01d9e8fbf..5c1a3e382 100644
--- a/README.md
+++ b/README.md
@@ -1,32 +1,33 @@
[![SpaceVim](https://spacevim.org/logo.png)](https://spacevim.org)
-[Wiki](https://github.com/SpaceVim/SpaceVim/wiki) |
-[Documentation](http://spacevim.org/documentation/) |
-[Twitter](https://twitter.com/SpaceVim) |
-[Community](https://spacevim.org/community/) |
-[Gitter **Chat**](https://gitter.im/SpaceVim/SpaceVim) |
+[Wiki](https://github.com/SpaceVim/SpaceVim/wiki) \|
+[Documentation](http://spacevim.org/documentation/) \|
+[Twitter](https://twitter.com/SpaceVim) \|
+[Community](https://spacevim.org/community/) \|
+[Gitter **Chat**](https://gitter.im/SpaceVim/SpaceVim) \|
[中文文档](http://spacevim.org/README_zh_cn/)
[![Build Status](https://travis-ci.org/SpaceVim/SpaceVim.svg?branch=dev)](https://travis-ci.org/SpaceVim/SpaceVim)
+[![codecov](https://codecov.io/gh/SpaceVim/SpaceVim/branch/master/graph/badge.svg)](https://codecov.io/gh/SpaceVim/SpaceVim)
![Version](https://img.shields.io/badge/version-0.5.0--dev-FF00CC.svg)
[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
[![Doc](https://img.shields.io/badge/doc-%3Ah%20SpaceVim-orange.svg)](doc/SpaceVim.txt)
[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/SpaceVim/SpaceVim.svg)](http://isitmaintained.com/project/SpaceVim/SpaceVim "Average time to resolve an issue")
[![Percentage of issues still open](http://isitmaintained.com/badge/open/SpaceVim/SpaceVim.svg)](http://isitmaintained.com/project/SpaceVim/SpaceVim "Percentage of issues still open")
-SpaceVim is a community-driven vim distribution that seeks to provide layer feature, especially for neovim. It offers a variety of layers to choose from. to create a suitable vim development environment, you just need to select the required layers. 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.
+SpaceVim is a community-driven vim distribution that seeks to provide layer feature, compatible with vim and neoVim. Layers help collect related plugins together to provide features. Also help keep configuration organized and reduces overhead for the user by keeping them from having to think about what plugins to install. star it on github is a great way of getting feedback and gives me the kick to put more time into development.
![welcome-page](https://cloud.githubusercontent.com/assets/13142418/26402270/28ad72b8-40bc-11e7-945e-003f41e057be.png)
-
See the [documentation](https://spacevim.org/documentation) or [the list of layers](http://spacevim.org/layers/) for more information.
Here is a throughput graph of the repository for the last few weeks:
[![Throughput Graph](https://graphs.waffle.io/SpaceVim/SpaceVim/throughput.svg)](https://waffle.io/SpaceVim/SpaceVim/metrics/throughput)
+### Requirements
+
+SpaceVim's basic mode only requests `git` comamnd in your `$PATH`, but if you want to get better user experience, you need to install [nerd-font](https://github.com/ryanoasis/nerd-fonts). And make sure your terminal support [true colors](https://gist.github.com/XVilka/8346728).
### Install
@@ -44,11 +45,11 @@ curl -sLf https://spacevim.org/install.sh | bash -s -- -h
### Features
-- **Great documentation:** access documentation in Vim with
- :h SpaceVim.
+- **Great documentation:** access documentation in Vim with :h SpaceVim.
- **Beautiful GUI:** you'll love the awesome UI and its useful features.
- **Mnemonic key bindings:** all key bindings have mnemonic prefixes.
- **Lazy load plugins:** Lazy-load 90% of plugins with [dein.vim](https://github.com/Shougo/dein.vim)
+ ![UI for dein](https://user-images.githubusercontent.com/13142418/31309093-36c01150-abb3-11e7-836c-3ad406bdd71a.gif)
- **Neovim centric:** Dark powered mode of SpaceVim
### Support SpaceVim
@@ -62,6 +63,7 @@ If you want to show your support financially you can buy a drink for the mainta
### Credits & Thanks
- [![GitHub contributors](https://img.shields.io/github/contributors/SpaceVim/SpaceVim.svg)](https://github.com/SpaceVim/SpaceVim/graphs/contributors)
+- [@Gabirel](https://github.com/Gabirel) and his [Hack-SpaceVim](https://github.com/Gabirel/Hack-SpaceVim)
- [vimdoc](https://github.com/google/vimdoc) generate doc file for SpaceVim
- [Rafael Bodill](https://github.com/rafi) and his vim-config
- [Bailey Ling](https://github.com/bling) and his dotvim
diff --git a/autoload/SpaceVim.vim b/autoload/SpaceVim.vim
index ce0e64108..987d98d49 100644
--- a/autoload/SpaceVim.vim
+++ b/autoload/SpaceVim.vim
@@ -200,6 +200,9 @@ let g:spacevim_vim_help_language = 'en'
" <
let g:spacevim_language = ''
""
+" Option for keep the spacevim server ailive
+let g:spacevim_keep_server_alive = 1
+""
" The colorscheme of SpaceVim. Default is 'gruvbox'.
let g:spacevim_colorscheme = 'gruvbox'
""
@@ -345,7 +348,7 @@ let g:spacevim_enable_vimfiler_gitstatus = 0
" Enable/Disable filetypeicon colum in vimfiler buffer, default is 0.
let g:spacevim_enable_vimfiler_filetypeicon = 0
let g:spacevim_smartcloseignorewin = ['__Tagbar__' , 'vimfiler:default']
-let g:spacevim_smartcloseignoreft = ['help', 'tagbar', 'vimfiler']
+let g:spacevim_smartcloseignoreft = ['help', 'tagbar', 'vimfiler', 'SpaceVimRunner']
let g:spacevim_altmoveignoreft = ['Tagbar' , 'vimfiler']
let g:spacevim_enable_javacomplete2_py = 0
let g:spacevim_src_root = 'E:\sources\'
@@ -467,6 +470,10 @@ endfunction
function! SpaceVim#end() abort
+
+ if g:spacevim_keep_server_alive
+ call SpaceVim#server#export_server()
+ endif
if !empty(g:spacevim_windows_leader)
call SpaceVim#mapping#leader#defindWindowsLeader(g:spacevim_windows_leader)
endif
diff --git a/autoload/SpaceVim/api/job.vim b/autoload/SpaceVim/api/job.vim
index 5376671f9..2bd8cb3bf 100644
--- a/autoload/SpaceVim/api/job.vim
+++ b/autoload/SpaceVim/api/job.vim
@@ -1,5 +1,5 @@
function! SpaceVim#api#job#get() abort
- return deepcopy(s:self)
+ return deepcopy(s:self)
endfunction
" make vim and neovim use same job func.
@@ -9,195 +9,220 @@ let s:self.nvim_job = has('nvim')
let s:self.vim_job = !has('nvim') && has('job') && has('patch-8.0.0027')
let s:self.vim_co = SpaceVim#api#import('vim#compatible')
+if !s:self.nvim_job && !s:self.vim_job
+ augroup SpaceVim_job
+ au!
+ au! User SpaceVim_job_stdout nested call call(s:self.opts.on_stdout, s:self.job_argv)
+ au! User SpaceVim_job_stderr nested call call(s:self.opts.on_stderr, s:self.job_argv)
+ au! User SpaceVim_job_exit nested call call(s:self.opts.on_exit, s:self.job_argv)
+ augroup ENd
+endif
+
function! s:self.warn(...) abort
- if len(a:000) == 0
- echohl WarningMsg | echom 'Current version do not support job feature, fallback to sync system()' | echohl None
- elseif len(a:000) == 1 && type(a:1) == type('')
- echohl WarningMsg | echom a:1| echohl None
- else
- endif
+ if len(a:000) == 0
+ echohl WarningMsg | echom 'Current version do not support job feature, fallback to sync system()' | echohl None
+ elseif len(a:000) == 1 && type(a:1) == type('')
+ echohl WarningMsg | echom a:1| echohl None
+ else
+ endif
endfunction
function! s:self.warp(argv, opts) abort
- let obj = {}
- let obj._argv = a:argv
- let obj._opts = a:opts
- let obj.in_io = get(a:opts, 'in_io', 'pipe')
- " @vimlint(EVL103, 1, a:job_id)
- function! obj._out_cb(job_id, data) abort
- if has_key(self._opts, 'on_stdout')
- call self._opts.on_stdout(self._opts.jobpid, [a:data], 'stdout')
- endif
- endfunction
-
- function! obj._err_cb(job_id, data) abort
- if has_key(self._opts, 'on_stderr')
- call self._opts.on_stderr(self._opts.jobpid, [a:data], 'stderr')
- endif
- endfunction
-
- function! obj._exit_cb(job_id, data) abort
- if has_key(self._opts, 'on_exit')
- call self._opts.on_exit(self._opts.jobpid, a:data, 'exit')
- endif
- endfunction
- " @vimlint(EVL103, 0, a:job_id)
-
- let obj = {
- \ 'argv': a:argv,
- \ 'opts': {
- \ 'mode': 'nl',
- \ 'in_io' : obj.in_io,
- \ 'out_cb': obj._out_cb,
- \ 'err_cb': obj._err_cb,
- \ 'exit_cb': obj._exit_cb,
- \ }
- \ }
- if has_key(a:opts, 'cwd')
- call extend(obj.opts, {'cwd' : a:opts.cwd})
+ let obj = {}
+ let obj._argv = a:argv
+ let obj._opts = a:opts
+ let obj.in_io = get(a:opts, 'in_io', 'pipe')
+ " @vimlint(EVL103, 1, a:job_id)
+ function! obj._out_cb(job_id, data) abort
+ if has_key(self._opts, 'on_stdout')
+ call self._opts.on_stdout(self._opts.jobpid, [a:data], 'stdout')
endif
- return obj
+ endfunction
+
+ function! obj._err_cb(job_id, data) abort
+ if has_key(self._opts, 'on_stderr')
+ call self._opts.on_stderr(self._opts.jobpid, [a:data], 'stderr')
+ endif
+ endfunction
+
+ function! obj._exit_cb(job_id, data) abort
+ if has_key(self._opts, 'on_exit')
+ call self._opts.on_exit(self._opts.jobpid, a:data, 'exit')
+ endif
+ endfunction
+ " @vimlint(EVL103, 0, a:job_id)
+
+ let obj = {
+ \ 'argv': a:argv,
+ \ 'opts': {
+ \ 'mode': 'nl',
+ \ 'in_io' : obj.in_io,
+ \ 'out_cb': obj._out_cb,
+ \ 'err_cb': obj._err_cb,
+ \ 'exit_cb': obj._exit_cb,
+ \ }
+ \ }
+ if has_key(a:opts, 'cwd')
+ call extend(obj.opts, {'cwd' : a:opts.cwd})
+ endif
+ return obj
endfunction
" start a job, and return the job_id.
function! s:self.start(argv, ...) abort
- if self.nvim_job
- if len(a:000) > 0
- let job = jobstart(a:argv, a:1)
- else
- let job = jobstart(a:argv)
- endi
- if job > 0
- let msg = ['process '. jobpid(job), ' run']
- call extend(self.jobs, {job : msg})
- endif
- return job
- elseif self.vim_job
- if len(a:000) > 0
- let opts = a:1
- else
- let opts = {}
- endif
- let id = len(self.jobs) + 1
- let opts.jobpid = id
- let wrapped = self.warp(a:argv, opts)
- if has_key(wrapped.opts, 'cwd')
- let old_wd = getcwd()
- let cwd = expand(wrapped.opts.cwd, 1)
- " Avoid error E475: Invalid argument: cwd
- call remove(wrapped.opts, 'cwd')
- exe 'cd' fnameescape(cwd)
- endif
- let job = job_start(wrapped.argv, wrapped.opts)
- if exists('old_wd')
- exe 'cd' fnameescape(old_wd)
- endif
- call extend(self.jobs, {id : job})
- return id
+ if self.nvim_job
+ if len(a:000) > 0
+ let job = jobstart(a:argv, a:1)
else
- if len(a:000) > 0
- let opts = a:1
- else
- let opts = {}
- endif
- if has_key(opts, 'cwd')
- let old_wd = getcwd()
- let cwd = expand(opts.cwd, 1)
- exe 'cd' fnameescape(cwd)
- endif
- let output = self.vim_co.systemlist(a:argv)
- if exists('old_wd')
- exe 'cd' fnameescape(old_wd)
- endif
- let id = -1
- if v:shell_error
- if has_key(opts,'on_stderr')
- call call(opts.on_stderr, [id, output, 'stderr'])
- endif
- else
- if has_key(opts,'on_stdout')
- call call(opts.on_stdout, [id, output, 'stdout'])
- endif
- endif
- if has_key(opts,'on_exit')
- call call(opts.on_exit, [id, v:shell_error, 'exit'])
- endif
- return id
+ let job = jobstart(a:argv)
+ endi
+ if job > 0
+ let msg = ['process '. jobpid(job), ' run']
+ call extend(self.jobs, {job : msg})
endif
+ return job
+ elseif self.vim_job
+ if len(a:000) > 0
+ let opts = a:1
+ else
+ let opts = {}
+ endif
+ let id = len(self.jobs) + 1
+ let opts.jobpid = id
+ let wrapped = self.warp(a:argv, opts)
+ if has_key(wrapped.opts, 'cwd')
+ let old_wd = getcwd()
+ let cwd = expand(wrapped.opts.cwd, 1)
+ " Avoid error E475: Invalid argument: cwd
+ call remove(wrapped.opts, 'cwd')
+ exe 'cd' fnameescape(cwd)
+ endif
+ let job = job_start(wrapped.argv, wrapped.opts)
+ if exists('old_wd')
+ exe 'cd' fnameescape(old_wd)
+ endif
+ call extend(self.jobs, {id : job})
+ return id
+ else
+ if len(a:000) > 0
+ let opts = a:1
+ else
+ let opts = {}
+ endif
+ if has_key(opts, 'cwd')
+ let old_wd = getcwd()
+ let cwd = expand(opts.cwd, 1)
+ exe 'cd' fnameescape(cwd)
+ endif
+ let output = self.vim_co.systemlist(a:argv)
+ if exists('old_wd')
+ exe 'cd' fnameescape(old_wd)
+ endif
+ let id = -1
+ let s:self.opts = opts
+ if v:shell_error
+ if has_key(opts,'on_stderr')
+ let s:self.job_argv = [id, output, 'stderr']
+ try
+ doautocmd User SpaceVim_job_stderr
+ catch
+ doautocmd User SpaceVim_job_stderr
+ endtry
+ endif
+ else
+ if has_key(opts,'on_stdout')
+ let s:self.job_argv = [id, output, 'stdout']
+ try
+ doautocmd User SpaceVim_job_stdout
+ catch
+ doautocmd User SpaceVim_job_stdout
+ endtry
+ endif
+ endif
+ if has_key(opts,'on_exit')
+ let s:self.job_argv = [id, v:shell_error, 'exit']
+ try
+ doautocmd User SpaceVim_job_exit
+ catch
+ doautocmd User SpaceVim_job_exit
+ endtry
+ endif
+ return id
+ endif
endfunction
function! s:self.stop(id) abort
- if self.nvim_job
- if has_key(self.jobs, a:id)
- call jobstop(a:id)
- call remove(self.jobs, a:id)
- else
- call self.warn('No job with such id')
- endif
- elseif self.vim_job
- if has_key(self.jobs, a:id)
- call job_stop(get(self.jobs, a:id))
- call remove(self.jobs, a:id)
- endif
+ if self.nvim_job
+ if has_key(self.jobs, a:id)
+ call jobstop(a:id)
+ call remove(self.jobs, a:id)
else
- call self.warn()
+ call self.warn('No job with such id')
endif
+ elseif self.vim_job
+ if has_key(self.jobs, a:id)
+ call job_stop(get(self.jobs, a:id))
+ call remove(self.jobs, a:id)
+ endif
+ else
+ call self.warn()
+ endif
endfunction
function! s:self.send(id, data) abort
- if self.nvim_job
- if has_key(self.jobs, a:id)
- if type(a:data) == type('')
- call jobsend(a:id, [a:data, ''])
- else
- call jobsend(a:id, a:data)
- endif
- else
- call self.warn('No job with such id')
- endif
- elseif self.vim_job
- if has_key(self.jobs, a:id)
- let job = get(self.jobs, a:id)
- let chanel = job_getchannel(job)
- call ch_sendraw(chanel, a:data . "\n")
- else
- call self.warn('No job with such id')
- endif
+ if self.nvim_job
+ if has_key(self.jobs, a:id)
+ if type(a:data) == type('')
+ call jobsend(a:id, [a:data, ''])
+ else
+ call jobsend(a:id, a:data)
+ endif
else
- call self.warn()
+ call self.warn('No job with such id')
endif
+ elseif self.vim_job
+ if has_key(self.jobs, a:id)
+ let job = get(self.jobs, a:id)
+ let chanel = job_getchannel(job)
+ call ch_sendraw(chanel, a:data . "\n")
+ else
+ call self.warn('No job with such id')
+ endif
+ else
+ call self.warn()
+ endif
endfunction
function! s:self.status(id) abort
- if self.nvim_job
- if has_key(self.jobs, a:id)
- return get(self.jobs, a:id)[1]
- endif
- elseif self.vim_job
- if has_key(self.jobs, a:id)
- return job_status(get(self.jobs, a:id))
- endif
- else
- call self.warn('No job with such id!')
+ if self.nvim_job
+ if has_key(self.jobs, a:id)
+ return get(self.jobs, a:id)[1]
endif
+ elseif self.vim_job
+ if has_key(self.jobs, a:id)
+ return job_status(get(self.jobs, a:id))
+ endif
+ else
+ call self.warn('No job with such id!')
+ endif
endfunction
function! s:self.list() abort
- return copy(self.jobs)
+ return copy(self.jobs)
endfunction
function! s:self.info(id) abort
- let info = {}
- if self.nvim_job
- let info.status = self.status(a:id)
- let info.job_id = a:id
- return info
- elseif self.vim_job
- if has_key(self.jobs, a:id)
- return job_info(get(self.jobs, a:id))
- else
- call self.warn('No job with such id!')
- endif
+ let info = {}
+ if self.nvim_job
+ let info.status = self.status(a:id)
+ let info.job_id = a:id
+ return info
+ elseif self.vim_job
+ if has_key(self.jobs, a:id)
+ return job_info(get(self.jobs, a:id))
else
- call self.warn()
+ call self.warn('No job with such id!')
endif
+ else
+ call self.warn()
+ endif
endfunction
diff --git a/autoload/SpaceVim/api/vim/buffer.vim b/autoload/SpaceVim/api/vim/buffer.vim
index 2642bdf79..4dcfbe5e9 100644
--- a/autoload/SpaceVim/api/vim/buffer.vim
+++ b/autoload/SpaceVim/api/vim/buffer.vim
@@ -12,46 +12,75 @@ else
endif
function! s:self.open(opts) abort
- let buf = get(a:opts, 'bufname', '')
- let mode = get(a:opts, 'mode', 'vertical topleft split')
- let Initfunc = get(a:opts, 'initfunc', '')
- let cmd = get(a:opts, 'cmd', '')
- if empty(buf)
- exe mode | enew
- else
- exe mode buf
- endif
- if !empty(Initfunc)
- call call(Initfunc, [])
- endif
+ let buf = get(a:opts, 'bufname', '')
+ let mode = get(a:opts, 'mode', 'vertical topleft split')
+ let Initfunc = get(a:opts, 'initfunc', '')
+ let cmd = get(a:opts, 'cmd', '')
+ if empty(buf)
+ exe mode | enew
+ else
+ exe mode buf
+ endif
+ if !empty(Initfunc)
+ call call(Initfunc, [])
+ endif
- if !empty(cmd)
- exe cmd
- endif
+ if !empty(cmd)
+ exe cmd
+ endif
endfunction
func! s:self.resize(size, ...) abort
- let cmd = get(a:000, 0, 'vertical')
- exe cmd 'resize' a:size
+ let cmd = get(a:000, 0, 'vertical')
+ exe cmd 'resize' a:size
endf
function! s:self.listed_buffers() abort
- return filter(range(1, bufnr('$')), 'buflisted(v:val)')
+ return filter(range(1, bufnr('$')), 'buflisted(v:val)')
endfunction
function! s:self.filter_do(expr) abort
- let buffers = range(1, bufnr('$'))
- for f_expr in a:expr.expr
- let buffers = filter(buffers, f_expr)
- endfor
- for b in buffers
- exe printf(a:expr.do, b)
- endfor
+ let buffers = range(1, bufnr('$'))
+ for f_expr in a:expr.expr
+ let buffers = filter(buffers, f_expr)
+ endfor
+ for b in buffers
+ exe printf(a:expr.do, b)
+ endfor
+endfunction
+
+
+" just same as nvim_buf_set_lines
+function! s:self.buf_set_lines(buffer, start, end, strict_indexing, replacement) abort
+ if exists('*nvim_buf_set_lines')
+ call nvim_buf_set_lines(a:buffer, a:start, a:end, a:strict_indexing, a:replacement)
+ elseif has('python')
+ py import vim
+ py import string
+ if bufexists(a:buffer)
+ py bufnr = string.atoi(vim.eval("a:buffer"))
+ py start_line = string.atoi(vim.eval("a:start"))
+ py end_line = string.atoi(vim.eval("a:end"))
+ py lines = vim.eval("a:replacement")
+ py vim.buffers[bufnr][start_line:end_line] = lines
+ endif
+ elseif has('python3')
+ py3 import vim
+ py3 import string
+ if bufexists(a:buffer)
+ py3 bufnr = string.atoi(vim.eval("a:buffer"))
+ py3 start_line = string.atoi(vim.eval("a:start"))
+ py3 end_line = string.atoi(vim.eval("a:end"))
+ py3 lines = vim.eval("a:replacement")
+ py3 vim.buffers[bufnr][start_line:end_line] = lines
+ endif
+ else
+ endif
endfunction
fu! SpaceVim#api#vim#buffer#get() abort
- return deepcopy(s:self)
+ return deepcopy(s:self)
endf
diff --git a/autoload/SpaceVim/api/vim/statusline.vim b/autoload/SpaceVim/api/vim/statusline.vim
index 47d8acb1f..019da8572 100644
--- a/autoload/SpaceVim/api/vim/statusline.vim
+++ b/autoload/SpaceVim/api/vim/statusline.vim
@@ -1,7 +1,7 @@
let s:self = {}
-function! s:self.build(left_sections, right_sections, lsep, rsep, hi_a, hi_b, hi_c, hi_z) abort
+function! s:self.build(left_sections, right_sections, lsep, rsep, fname, hi_a, hi_b, hi_c, hi_z) abort
let l = '%#' . a:hi_a . '#' . a:left_sections[0]
let l .= '%#' . a:hi_a . '_' . a:hi_b . '#' . a:lsep
let flag = 1
@@ -24,9 +24,9 @@ function! s:self.build(left_sections, right_sections, lsep, rsep, hi_a, hi_b, hi
endif
endif
if flag == 1
- let l .= '%#' . a:hi_c . '_' . a:hi_z . '#' . a:lsep . '%='
+ let l .= '%#' . a:hi_c . '_' . a:hi_z . '#' . a:lsep . a:fname . '%='
else
- let l .= '%#' . a:hi_b . '_' . a:hi_z . '#' . a:lsep . '%='
+ let l .= '%#' . a:hi_b . '_' . a:hi_z . '#' . a:lsep . a:fname . '%='
endif
let l .= '%#' . a:hi_b . '_' . a:hi_z . '#' . a:rsep
let flag = 1
diff --git a/autoload/SpaceVim/commands.vim b/autoload/SpaceVim/commands.vim
index 79fb6d82a..79fada09f 100644
--- a/autoload/SpaceVim/commands.vim
+++ b/autoload/SpaceVim/commands.vim
@@ -35,6 +35,13 @@ function! SpaceVim#commands#load() abort
command! -nargs=*
\ -complete=custom,SpaceVim#commands#complete_plugin
\ SPUpdate call SpaceVim#commands#update_plugin()
+
+ ""
+ " Command for reinstall plugin, support completion of plugin anme.
+ command! -nargs=+
+ \ -complete=custom,SpaceVim#commands#complete_plugin
+ \ SPReinstall call SpaceVim#commands#reinstall_plugin()
+
""
" Command for install plugins.
command! -nargs=* SPInstall call SpaceVim#commands#install_plugin()
@@ -80,6 +87,14 @@ function! SpaceVim#commands#update_plugin(...) abort
endif
endfunction
+function! SpaceVim#commands#reinstall_plugin(...)
+ if g:spacevim_plugin_manager ==# 'dein'
+ call SpaceVim#plugins#manager#reinstall(a:000)
+ elseif g:spacevim_plugin_manager ==# 'neobundle'
+ elseif g:spacevim_plugin_manager ==# 'vim-plug'
+ endif
+endfunction
+
function! SpaceVim#commands#install_plugin(...) abort
if g:spacevim_plugin_manager ==# 'neobundle'
elseif g:spacevim_plugin_manager ==# 'dein'
diff --git a/autoload/SpaceVim/layers/core.vim b/autoload/SpaceVim/layers/core.vim
index bccf68b5b..f2c7fc2e6 100644
--- a/autoload/SpaceVim/layers/core.vim
+++ b/autoload/SpaceVim/layers/core.vim
@@ -15,4 +15,9 @@ function! SpaceVim#layers#core#config() abort
call SpaceVim#mapping#space#def('nnoremap', ['p', 'k'], 'call SpaceVim#plugins#projectmanager#kill_project()', 'kill all project buffers', 1)
call SpaceVim#mapping#space#def('nnoremap', ['p', 'f'], 'CtrlP', 'find files in current project', 1)
call SpaceVim#mapping#space#def('nnoremap', ['p', '/'], 'Grepper', 'fuzzy search for text in current project', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['q', 'q'], 'qa', 'prompt-kill-vim', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['q', 'Q'], 'qa!', 'kill-vim', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['q', 'R'], '', 'restart-vim(TODO)', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['q', 'r'], '', 'restart-vim-resume-layouts(TODO)', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['q', 't'], 'tabclose!', 'kill current tab', 1)
endfunction
diff --git a/autoload/SpaceVim/layers/core/statusline.vim b/autoload/SpaceVim/layers/core/statusline.vim
index abc112325..7737d8aad 100644
--- a/autoload/SpaceVim/layers/core/statusline.vim
+++ b/autoload/SpaceVim/layers/core/statusline.vim
@@ -86,6 +86,15 @@ function! s:check_mode() abort
endif
endfunction
+" only when there are more than two buffers have same name.
+function! s:buffer_name() abort
+ if get(b:, '_spacevim_statusline_showbfname', 0) == 1
+ return ' ' . bufname('%')
+ else
+ return ''
+ endif
+endfunction
+
function! s:search_status() abort
let ct = 0
let tt = 0
@@ -242,6 +251,8 @@ function! SpaceVim#layers#core#statusline#get(...) abort
return '%#SpaceVim_statusline_a# Transient State %#SpaceVim_statusline_a_SpaceVim_statusline_b#'
elseif &filetype ==# 'HelpDescribe'
return '%#SpaceVim_statusline_a# HelpDescribe %#SpaceVim_statusline_a_SpaceVim_statusline_b#'
+ elseif &filetype ==# 'SpaceVimRunner'
+ return '%#SpaceVim_statusline_a# Runner %#SpaceVim_statusline_a_SpaceVim_statusline_b# %{SpaceVim#plugins#runner#status()}'
endif
if a:0 > 0
return s:active()
@@ -285,7 +296,8 @@ function! s:active() abort
if index(s:loaded_sections, 'whitespace') != -1
call add(rsec, s:whitespace())
endif
- return s:STATUSLINE.build(lsec, rsec, s:lsep, s:rsep,
+ let fname = s:buffer_name()
+ return s:STATUSLINE.build(lsec, rsec, s:lsep, s:rsep, fname,
\ 'SpaceVim_statusline_a', 'SpaceVim_statusline_b', 'SpaceVim_statusline_c', 'SpaceVim_statusline_z')
endfunction
@@ -386,7 +398,7 @@ function! SpaceVim#layers#core#statusline#config() abort
\ 'toggle the statuline itself', 1)
function! TagbarStatusline(...) abort
let name = (strwidth(a:3) > (g:spacevim_sidebar_width - 15)) ? a:3[:g:spacevim_sidebar_width - 20] . '..' : a:3
- return s:STATUSLINE.build([s:winnr(),' Tagbar ', ' ' . name . ' '], [], s:lsep, s:rsep,
+ return s:STATUSLINE.build([s:winnr(),' Tagbar ', ' ' . name . ' '], [], s:lsep, s:rsep, '',
\ 'SpaceVim_statusline_ia', 'SpaceVim_statusline_b', 'SpaceVim_statusline_c', 'SpaceVim_statusline_z')
endfunction
let g:tagbar_status_func = 'TagbarStatusline'
@@ -413,17 +425,22 @@ endfunction
" |
" +- a:marked : The number of marked files, or a comma separated list of
" the marked filenames.
+
+" @vimlint(EVL103, 1, a:regex)
+" @vimlint(EVL103, 1, a:marked)
function! SpaceVim#layers#core#statusline#ctrlp(focus, byfname, regex, prev, item, next, marked) abort
return s:STATUSLINE.build([' Ctrlp ', ' ' . a:prev . ' ', ' ' . a:item . ' ', ' ' . a:next . ' '],
- \ [' ' . a:focus . ' ', ' ' . a:byfname . ' ', ' ' . getcwd() . ' '], s:lsep, s:rsep,
+ \ [' ' . a:focus . ' ', ' ' . a:byfname . ' ', ' ' . getcwd() . ' '], s:lsep, s:rsep, '',
\ 'SpaceVim_statusline_a_bold', 'SpaceVim_statusline_b', 'SpaceVim_statusline_c', 'SpaceVim_statusline_z')
endfunction
+" @vimlint(EVL103, 0, a:regex)
+" @vimlint(EVL103, 0, a:marked)
" a:str : Either the number of files scanned so far, or a string indicating
" the current directory is being scanned with a user_command.
function! SpaceVim#layers#core#statusline#ctrlp_status(str) abort
return s:STATUSLINE.build([' Ctrlp ', ' ' . a:str . ' '],
- \ [' ' . getcwd() . ' '], s:lsep, s:rsep,
+ \ [' ' . getcwd() . ' '], s:lsep, s:rsep, '',
\ 'SpaceVim_statusline_a', 'SpaceVim_statusline_b', 'SpaceVim_statusline_c', 'SpaceVim_statusline_z')
endfunction
diff --git a/autoload/SpaceVim/layers/core/tabline.vim b/autoload/SpaceVim/layers/core/tabline.vim
index 6519e1827..04cfe0362 100644
--- a/autoload/SpaceVim/layers/core/tabline.vim
+++ b/autoload/SpaceVim/layers/core/tabline.vim
@@ -58,9 +58,20 @@ function! s:tabname(id) abort
endif
endfunction
+function! s:need_show_bfname(stack, nr) abort
+ let dupbufs = filter(a:stack, "fnamemodify(bufname(v:val), ':t') ==# fnamemodify(bufname(a:nr), ':t')")
+ if len(dupbufs) >= 2
+ for i in dupbufs
+ call setbufvar(i, '_spacevim_statusline_showbfname', 1)
+ endfor
+ endif
+endfunction
+
function! SpaceVim#layers#core#tabline#get() abort
let nr = tabpagenr('$')
let t = ''
+ " the stack should be the bufnr stack of tabline
+ let stack = []
if nr > 1
let ct = tabpagenr()
if ct == 1
@@ -78,6 +89,8 @@ function! SpaceVim#layers#core#tabline#get() abort
if empty(name)
let name = 'No Name'
endif
+ call add(stack, buflist[winnr - 1])
+ call s:need_show_bfname(stack, buflist[winnr - 1])
if g:spacevim_buffer_index_type == 3
let id = s:messletters.index_num(i)
elseif g:spacevim_buffer_index_type == 4
@@ -101,7 +114,7 @@ function! SpaceVim#layers#core#tabline#get() abort
endif
endfor
let t .= '%=%#SpaceVim_tabline_a_SpaceVim_tabline_b#' . s:rsep
- let t .= '%#SpaceVim_tabline_a# Tabs'
+ let t .= '%#SpaceVim_tabline_a# Tabs '
else
let s:buffers = s:BUFFER.listed_buffers()
let g:_spacevim_list_buffers = s:buffers
@@ -123,6 +136,8 @@ function! SpaceVim#layers#core#tabline#get() abort
if empty(name)
let name = 'No Name'
endif
+ call add(stack, i)
+ call s:need_show_bfname(stack, i)
if g:spacevim_buffer_index_type == 3
let id = s:messletters.index_num(index(s:buffers, i) + 1)
elseif g:spacevim_buffer_index_type == 4
@@ -146,7 +161,7 @@ function! SpaceVim#layers#core#tabline#get() abort
endif
endfor
let t .= '%=%#SpaceVim_tabline_a_SpaceVim_tabline_b#' . s:rsep
- let t .= '%#SpaceVim_tabline_a# Buffers'
+ let t .= '%#SpaceVim_tabline_a# Buffers '
endif
return t
endfunction
@@ -173,7 +188,7 @@ endfunction
function! SpaceVim#layers#core#tabline#jump(id) abort
if len(s:buffers) >= a:id
let bid = s:buffers[a:id - 1]
- exe 'b' . bid
+ exe 'silent b' . bid
endif
endfunction
diff --git a/autoload/SpaceVim/layers/edit.vim b/autoload/SpaceVim/layers/edit.vim
index 2914bfd2b..95c7a6570 100644
--- a/autoload/SpaceVim/layers/edit.vim
+++ b/autoload/SpaceVim/layers/edit.vim
@@ -19,7 +19,7 @@ function! SpaceVim#layers#edit#plugins() abort
\ ['gcmt/wildfire.vim',{'on_map' : '(wildfire-'}],
\ ['easymotion/vim-easymotion'],
\ ['haya14busa/vim-easyoperator-line'],
- \ ['editorconfig/editorconfig-vim', { 'on_cmd' : 'EditorConfigReload'}],
+ \ ['editorconfig/editorconfig-vim', { 'merged' : 0}],
\ ['floobits/floobits-neovim', { 'on_cmd' : ['FlooJoinWorkspace','FlooShareDirPublic','FlooShareDirPrivate']}],
\ ]
if executable('fcitx')
diff --git a/autoload/SpaceVim/layers/lang/java.vim b/autoload/SpaceVim/layers/lang/java.vim
index 632834a8f..95e4338dd 100644
--- a/autoload/SpaceVim/layers/lang/java.vim
+++ b/autoload/SpaceVim/layers/lang/java.vim
@@ -138,6 +138,9 @@ function! s:language_specified_mappings() abort
" debug
let g:_spacevim_mappings_space.l.d = {'name' : '+Debug'}
+ call SpaceVim#mapping#space#langSPC('nmap', ['l','d', 's'], ':VBGstartJDB', 'start jdb', 0)
+ call SpaceVim#mapping#space#langSPC('nmap', ['l','d', 't'], 'VBGtoggleBreakpointThisLine', 'toggle breakpoint at this line', 1)
+
" maven
let g:_spacevim_mappings_space.l.m = {'name' : '+Maven'}
call SpaceVim#mapping#space#langSPC('nnoremap', ['l','m', 'i'], 'call call('
diff --git a/autoload/SpaceVim/layers/lang/php.vim b/autoload/SpaceVim/layers/lang/php.vim
index 93bda2072..775120e03 100644
--- a/autoload/SpaceVim/layers/lang/php.vim
+++ b/autoload/SpaceVim/layers/lang/php.vim
@@ -1,3 +1,12 @@
+"=============================================================================
+" php.vim --- lang#php layer
+" Copyright (c) 2016-2017 Shidong Wang & Contributors
+" Author: Shidong Wang < wsdjeg at 163.com >
+" URL: https://spacevim.org
+" License: MIT license
+"=============================================================================
+
+
""
" @section lang#php, layer-lang-php
" @parentsection layers
diff --git a/autoload/SpaceVim/layers/lang/python.vim b/autoload/SpaceVim/layers/lang/python.vim
index 0709a578c..3cf3634b7 100644
--- a/autoload/SpaceVim/layers/lang/python.vim
+++ b/autoload/SpaceVim/layers/lang/python.vim
@@ -8,25 +8,33 @@
" <
function! SpaceVim#layers#lang#python#plugins() abort
- let plugins = []
- " python
- if has('nvim')
- call add(plugins, ['zchee/deoplete-jedi', { 'on_ft' : 'python'}])
- else
- call add(plugins, ['davidhalter/jedi-vim', { 'on_ft' : 'python',
- \ 'if' : has('python') || has('python3')}])
- endif
- call add(plugins, ['Vimjas/vim-python-pep8-indent',
- \ { 'on_ft' : 'python'}])
- return plugins
+ let plugins = []
+ " python
+ if has('nvim')
+ call add(plugins, ['zchee/deoplete-jedi', { 'on_ft' : 'python'}])
+ else
+ call add(plugins, ['davidhalter/jedi-vim', { 'on_ft' : 'python',
+ \ 'if' : has('python') || has('python3')}])
+ endif
+ call add(plugins, ['Vimjas/vim-python-pep8-indent',
+ \ { 'on_ft' : 'python'}])
+ return plugins
endfunction
function! SpaceVim#layers#lang#python#config() abort
-
- call SpaceVim#layers#edit#add_ft_head_tamplate('python',
- \ ['#!/usr/bin/env python',
- \ '# -*- coding: utf-8 -*-',
- \ '']
- \ )
+ call SpaceVim#plugins#runner#reg_runner('python', 'python %s')
+ call SpaceVim#mapping#space#regesit_lang_mappings('python', funcref('s:language_specified_mappings'))
+ call SpaceVim#layers#edit#add_ft_head_tamplate('python',
+ \ ['#!/usr/bin/env python',
+ \ '# -*- coding: utf-8 -*-',
+ \ '']
+ \ )
endfunction
+
+function! s:language_specified_mappings() abort
+
+ call SpaceVim#mapping#space#langSPC('nmap', ['l','r'],
+ \ 'call SpaceVim#plugins#runner#open()',
+ \ 'execute current file', 1)
+endfunction
diff --git a/autoload/SpaceVim/layers/lang/ruby.vim b/autoload/SpaceVim/layers/lang/ruby.vim
index ec832d5bc..13060223b 100644
--- a/autoload/SpaceVim/layers/lang/ruby.vim
+++ b/autoload/SpaceVim/layers/lang/ruby.vim
@@ -8,7 +8,7 @@
function! SpaceVim#layers#lang#ruby#plugins() abort
let plugins = []
-
+ call add(plugins, ['vim-ruby/vim-ruby', { 'on_ft' : 'ruby'}])
return plugins
endfunction
diff --git a/autoload/SpaceVim/layers/lang/vim.vim b/autoload/SpaceVim/layers/lang/vim.vim
index 81e6311eb..9dcaf8764 100644
--- a/autoload/SpaceVim/layers/lang/vim.vim
+++ b/autoload/SpaceVim/layers/lang/vim.vim
@@ -1,16 +1,37 @@
function! SpaceVim#layers#lang#vim#plugins() abort
- let plugins = [
- \ ['syngan/vim-vimlint', { 'on_ft' : 'vim'}],
- \ ['ynkdir/vim-vimlparser', { 'on_ft' : 'vim'}],
- \ ['todesking/vint-syntastic', { 'on_ft' : 'vim'}],
- \ ]
- call add(plugins,['tweekmonster/exception.vim'])
- call add(plugins,['mhinz/vim-lookup'])
- call add(plugins,['Shougo/neco-vim', { 'on_event' : 'InsertEnter', 'loadconf_before' : 1}])
- call add(plugins,['tweekmonster/helpful.vim', {'on_cmd': 'HelpfulVersion'}])
- return plugins
+ let plugins = [
+ \ ['syngan/vim-vimlint', { 'on_ft' : 'vim'}],
+ \ ['ynkdir/vim-vimlparser', { 'on_ft' : 'vim'}],
+ \ ['todesking/vint-syntastic', { 'on_ft' : 'vim'}],
+ \ ]
+ call add(plugins,['tweekmonster/exception.vim'])
+ call add(plugins,['mhinz/vim-lookup'])
+ call add(plugins,['Shougo/neco-vim', { 'on_event' : 'InsertEnter', 'loadconf_before' : 1}])
+ call add(plugins,['tweekmonster/helpful.vim', {'on_cmd': 'HelpfulVersion'}])
+ return plugins
endfunction
function! SpaceVim#layers#lang#vim#config() abort
- call SpaceVim#mapping#gd#add('vim','lookup#lookup')
+ call SpaceVim#mapping#gd#add('vim','lookup#lookup')
+ call SpaceVim#mapping#space#regesit_lang_mappings('vim', funcref('s:language_specified_mappings'))
+endfunction
+
+function! s:language_specified_mappings() abort
+ call SpaceVim#mapping#space#langSPC('nmap', ['l','e'], 'call call('
+ \ . string(function('s:eval_cursor')) . ', [])',
+ \ 'echo eval under cursor', 1)
+ call SpaceVim#mapping#space#langSPC('nmap', ['l','v'], 'call call('
+ \ . string(function('s:helpversion_cursor')) . ', [])',
+ \ 'echo helpversion under cursor', 1)
+endfunction
+
+function! s:eval_cursor() abort
+ let is_keyword = &iskeyword
+ set iskeyword+=:
+ echo expand('') 'is' eval(expand(''))
+ let &iskeyword = is_keyword
+endfunction
+
+function! s:helpversion_cursor() abort
+ exe 'HelpfulVersion' expand('')
endfunction
diff --git a/autoload/SpaceVim/layers/shell.vim b/autoload/SpaceVim/layers/shell.vim
index 387b01e94..914f7ec0f 100644
--- a/autoload/SpaceVim/layers/shell.vim
+++ b/autoload/SpaceVim/layers/shell.vim
@@ -11,9 +11,8 @@ function! SpaceVim#layers#shell#plugins() abort
let plugins = []
if has('nvim')
call add(plugins,['Shougo/deol.nvim'])
- else
- call add(plugins,['Shougo/vimshell.vim', { 'on_cmd':['VimShell']}])
endif
+ call add(plugins,['Shougo/vimshell.vim', { 'on_cmd':['VimShell']}])
return plugins
endfunction
@@ -33,7 +32,7 @@ function! SpaceVim#layers#shell#config() abort
endfunction
function! SpaceVim#layers#shell#set_variable(var) abort
- let s:default_shell = get(a:var, 'defaut_shell', 'terminal')
+ let s:default_shell = get(a:var, 'default_shell', 'terminal')
let s:default_position = get(a:var, 'default_position', 'top')
let s:default_height = get(a:var, 'default_height', 30)
endfunction
@@ -42,6 +41,7 @@ let s:shell_win_nr = 0
function! s:open_default_shell() abort
if s:shell_win_nr != 0 && getwinvar(s:shell_win_nr, '&buftype') ==# 'terminal' && &buftype !=# 'terminal'
exe s:shell_win_nr . 'wincmd w'
+ startinsert
return
endif
if &buftype ==# 'terminal'
@@ -60,14 +60,20 @@ function! s:open_default_shell() abort
exe 'resize ' . lines
endif
if s:default_shell ==# 'terminal'
- if exists(':te')
- exe 'te'
+ if exists(':terminal')
+ if has('nvim')
+ exe 'terminal'
+ else
+ call term_start('bash', {'curwin' : 1, 'term_finish' : 'close'})
+ endif
let s:shell_win_nr = winnr()
let w:shell_layer_win = 1
+ startinsert
else
echo ':terminal is not supported in this version'
endif
elseif s:default_shell ==# 'VimShell'
VimShell
+ imap exit(vimshell_enter)
endif
endfunction
diff --git a/autoload/SpaceVim/layers/ui.vim b/autoload/SpaceVim/layers/ui.vim
index 6cb538498..e37c263c7 100644
--- a/autoload/SpaceVim/layers/ui.vim
+++ b/autoload/SpaceVim/layers/ui.vim
@@ -30,7 +30,7 @@ function! SpaceVim#layers#ui#config() abort
let g:indentLine_fileTypeExclude = ['help', 'startify', 'vimfiler']
let g:signify_disable_by_default = 0
let g:signify_line_highlight = 0
- noremap :TagbarToggle
+ noremap :silent TagbarToggle
" Ui toggles
call SpaceVim#mapping#space#def('nnoremap', ['t', '8'], 'call call('
\ . string(s:_function('s:toggle_fill_column')) . ', [])',
@@ -76,7 +76,7 @@ function! SpaceVim#layers#ui#config() abort
\ 'toggle syntax checker', 1)
call SpaceVim#mapping#space#def('nnoremap', ['t', 'S'], 'call call('
\ . string(s:_function('s:toggle_spell_check')) . ', [])',
- \ 'toggle syntax checker', 1)
+ \ 'toggle spell checker', 1)
call SpaceVim#mapping#space#def('nnoremap', ['t', 'w'], 'call call('
\ . string(s:_function('s:toggle_whitespace')) . ', [])',
\ 'toggle the whitespace', 1)
@@ -202,9 +202,9 @@ function! s:toggle_syntax_checker() abort
call SpaceVim#layers#core#statusline#toggle_mode('syntax-checking')
let g:_spacevim_toggle_syntax_flag = g:_spacevim_toggle_syntax_flag * -1
if g:_spacevim_toggle_syntax_flag == 1
- echo "syntax-checking enabled."
+ echo 'syntax-checking enabled.'
else
- echo "syntax-checking disabled."
+ echo 'syntax-checking disabled.'
endif
endfunction
@@ -215,6 +215,11 @@ function! s:toggle_spell_check() abort
let &l:spell = 1
endif
call SpaceVim#layers#core#statusline#toggle_mode('spell-checking')
+ if &l:spell == 1
+ echo 'spell-checking enabled.'
+ else
+ echo 'spell-checking disabled.'
+ endif
endfunction
function! s:toggle_whitespace() abort
diff --git a/autoload/SpaceVim/mapping/guide.vim b/autoload/SpaceVim/mapping/guide.vim
index d41165901..d7eb9f634 100644
--- a/autoload/SpaceVim/mapping/guide.vim
+++ b/autoload/SpaceVim/mapping/guide.vim
@@ -401,6 +401,7 @@ function! s:winopen() " {{{
setlocal nocursorline nocursorcolumn colorcolumn=
setlocal winfixwidth winfixheight
call s:updateStatusline()
+ call s:toggle_hide_cursor()
endfunction " }}}
function! s:updateStatusline() abort
@@ -428,7 +429,16 @@ function! s:guide_help_msg() abort
return substitute(msg,' ', '\\ ', 'g')
endfunction
+let s:t_ve = ''
+function! s:toggle_hide_cursor() abort
+ let t_ve = &t_ve
+ let &t_ve = s:t_ve
+ let s:t_ve = t_ve
+endfunction
+
+
function! s:winclose() " {{{
+ call s:toggle_hide_cursor()
noautocmd execute s:gwin.'wincmd w'
if s:gwin == winnr()
noautocmd close
diff --git a/autoload/SpaceVim/mapping/space.vim b/autoload/SpaceVim/mapping/space.vim
index a20d90b26..82653fdca 100644
--- a/autoload/SpaceVim/mapping/space.vim
+++ b/autoload/SpaceVim/mapping/space.vim
@@ -1,15 +1,9 @@
let s:file = expand(':~')
function! SpaceVim#mapping#space#init() abort
- if s:has_map_to_spc()
- return
- endif
- nnoremap [SPC] :LeaderGuide " "
- vnoremap [SPC] :LeaderGuideVisual " "
- nmap [SPC]
- vmap [SPC]
let g:_spacevim_mappings_space = {}
let g:_spacevim_mappings_prefixs['[SPC]'] = {'name' : '+SPC prefix'}
- let g:_spacevim_mappings_space['?'] = ['Unite menu:CustomKeyMaps -input=[SPC]', 'show mappings']
+ let g:_spacevim_mappings_space['?'] =
+ \ ['Unite menu:CustomKeyMaps -input=[SPC]', 'show mappings']
let g:_spacevim_mappings_space.t = {'name' : '+Toggles'}
let g:_spacevim_mappings_space.t.h = {'name' : '+Toggles highlight'}
let g:_spacevim_mappings_space.t.m = {'name' : '+modeline'}
@@ -23,12 +17,22 @@ function! SpaceVim#mapping#space#init() abort
let g:_spacevim_mappings_space.w = {'name' : '+Windows'}
let g:_spacevim_mappings_space.p = {'name' : '+Projects'}
let g:_spacevim_mappings_space.h = {'name' : '+Help'}
+ let g:_spacevim_mappings_space.q = {'name' : '+Quit'}
let g:_spacevim_mappings_space.l = {'name' : '+Language Specified'}
let g:_spacevim_mappings_space.s = {'name' : '+Searching'}
let g:_spacevim_mappings_space.r = {'name' : '+Registers/rings/resume'}
+ if s:has_map_to_spc()
+ return
+ endif
+ nnoremap [SPC] :LeaderGuide " "
+ vnoremap [SPC] :LeaderGuideVisual " "
+ nmap [SPC]
+ vmap [SPC]
" Windows
for i in range(1, 9)
- exe "call SpaceVim#mapping#space#def('nnoremap', [" . i . "], 'call SpaceVim#layers#core#statusline#jump(" . i . ")', 'window " . i . "', 1)"
+ exe "call SpaceVim#mapping#space#def('nnoremap', ["
+ \ . i . "], 'call SpaceVim#layers#core#statusline#jump("
+ \ . i . ")', 'window " . i . "', 1)"
endfor
let g:_spacevim_mappings_space.w[''] = ['wincmd w', 'alternate-window']
nnoremap [SPC]w :wincmd w
@@ -37,33 +41,60 @@ function! SpaceVim#mapping#space#init() abort
\ 'call call('
\ . string(function('s:windows_layout_toggle'))
\ . ', [])', 'windows-layout-toggle', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', 'c'], 'Goyo', 'centered-buffer-mode', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', 'C'], 'ChooseWin | Goyo', 'centered-buffer-mode(other windows)', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', 'd'], 'close', 'delete window', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', 'D'], 'ChooseWin | close | wincmd w', 'delete window (other windows)', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', 'F'], 'tabnew', 'create new tab', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', 'h'], 'wincmd h', 'window-left', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', 'j'], 'wincmd j', 'window-down', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', 'k'], 'wincmd k', 'window-up', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', 'l'], 'wincmd l', 'window-right', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', 'H'], 'wincmd H', 'window-far-left', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', 'J'], 'wincmd J', 'window-far-down', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', 'K'], 'wincmd K', 'window-far-up', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', 'L'], 'wincmd L', 'window-far-right', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', 'm'], 'only', 'maximize/minimize window', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', 'M'], 'ChooseWinSwap', 'swap window', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', 'o'], 'tabnext', 'other tabs', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', '/'], 'bel vs | wincmd w', 'split-window-right', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', 'v'], 'bel vs | wincmd w', 'split-window-right', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', '-'], 'bel split | wincmd w', 'split-window-below', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', 's'], 'bel split | wincmd w', 'split-window-below', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', 'S'], 'bel split', 'split-focus-window-below', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', '2'], 'silent only | vs | wincmd w', 'layout-double-columns', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', '3'], 'silent only | vs | vs | wincmd H', 'split-window-below', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', 'V'], 'bel vs', 'split-window-right-focus', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', '='], 'wincmd =', 'balance-windows', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', 'w'], 'wincmd w', 'cycle and focus between windows', 1)
- call SpaceVim#mapping#space#def('nnoremap', ['w', 'W'], 'ChooseWin', 'select window', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', 'c'],
+ \ 'Goyo', 'centered-buffer-mode', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', 'C'],
+ \ 'ChooseWin | Goyo', 'centered-buffer-mode(other windows)', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', 'd'],
+ \ 'close', 'delete window', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', 'D'],
+ \ 'ChooseWin | close | wincmd w', 'delete window (other windows)', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', 'F'],
+ \ 'tabnew', 'create new tab', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', 'h'],
+ \ 'wincmd h', 'window-left', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', 'j'],
+ \ 'wincmd j', 'window-down', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', 'k'],
+ \ 'wincmd k', 'window-up', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', 'l'],
+ \ 'wincmd l', 'window-right', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', 'H'],
+ \ 'wincmd H', 'window-far-left', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', 'J'],
+ \ 'wincmd J', 'window-far-down', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', 'K'],
+ \ 'wincmd K', 'window-far-up', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', 'L'],
+ \ 'wincmd L', 'window-far-right', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', 'm'],
+ \ 'only', 'maximize/minimize window', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', 'M'],
+ \ 'ChooseWinSwap', 'swap window', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', 'o'],
+ \ 'tabnext', 'other tabs', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', '/'],
+ \ 'bel vs | wincmd w', 'split-window-right', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', 'v'],
+ \ 'bel vs | wincmd w', 'split-window-right', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', '-'],
+ \ 'bel split | wincmd w', 'split-window-below', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', 's'],
+ \ 'bel split | wincmd w', 'split-window-below', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', 'S'],
+ \ 'bel split', 'split-focus-window-below', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', '2'],
+ \ 'silent only | vs | wincmd w', 'layout-double-columns', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', '3'],
+ \ 'silent only | vs | vs | wincmd H', 'split-window-below', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', 'V'],
+ \ 'bel vs', 'split-window-right-focus', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', '='],
+ \ 'wincmd =', 'balance-windows', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', 'w'],
+ \ 'wincmd w', 'cycle and focus between windows', 1)
+ call SpaceVim#mapping#space#def('nnoremap', ['w', 'W'],
+ \ 'ChooseWin', 'select window', 1)
call SpaceVim#mapping#space#def('nnoremap', ['w', 'u'], 'call SpaceVim#plugins#windowsmanager#UndoQuitWin()', 'undo quieted window', 1)
call SpaceVim#mapping#space#def('nnoremap', ['w', 'U'], 'call SpaceVim#plugins#windowsmanager#RedoQuitWin()', 'redo quieted window', 1)
let s:lnum = expand('') + 3
@@ -416,4 +447,4 @@ function! s:comment_to_line(invert) abort
endif
endfunction
-" vim:set et sw=2 cc=80:
+" vim:set et nowrap sw=2 cc=80:
diff --git a/autoload/SpaceVim/plugins/manager.vim b/autoload/SpaceVim/plugins/manager.vim
index 9f49cce21..22c3b45cd 100644
--- a/autoload/SpaceVim/plugins/manager.vim
+++ b/autoload/SpaceVim/plugins/manager.vim
@@ -111,6 +111,12 @@ function! s:get_uninstalled_plugins() abort
return filter(values(dein#get()), '!isdirectory(v:val.path)')
endfunction
+
+function! SpaceVim#plugins#manager#reinstall(...)
+ call dein#reinstall(a:1)
+endfunction
+
+
" @vimlint(EVL102, 1, l:i)
function! SpaceVim#plugins#manager#install(...) abort
if !s:JOB.vim_job && !s:JOB.nvim_job
diff --git a/autoload/SpaceVim/plugins/runner.vim b/autoload/SpaceVim/plugins/runner.vim
new file mode 100644
index 000000000..c9d90eeca
--- /dev/null
+++ b/autoload/SpaceVim/plugins/runner.vim
@@ -0,0 +1,113 @@
+"=============================================================================
+" runner.vim --- code runner for SpaceVim
+" Copyright (c) 2016-2017 Shidong Wang & Contributors
+" Author: Shidong Wang < wsdjeg at 163.com >
+" URL: https://spacevim.org
+" License: MIT license
+"=============================================================================
+
+let s:JOB = SpaceVim#api#import('job')
+let s:BUFFER = SpaceVim#api#import('vim#buffer')
+let s:STRING = SpaceVim#api#import('data#string')
+
+let s:runners = {}
+
+let s:bufnr = 0
+
+function! s:open_win() abort
+ if s:bufnr != 0 && bufexists(s:bufnr)
+ exe 'bd ' . s:bufnr
+ endif
+ botright split __runner__
+ let lines = &lines * 30 / 100
+ exe 'resize ' . lines
+ setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline nospell nonu norelativenumber
+ set filetype=SpaceVimRunner
+ nnoremap q :call SpaceVim#plugins#runner#close()
+ let s:bufnr = bufnr('%')
+ wincmd p
+endfunction
+
+
+function! s:async_run(runner) abort
+ let cmd = printf(a:runner, bufname('%'))
+ let s:start_time = reltime()
+ let s:job_id = s:JOB.start(cmd,{
+ \ 'on_stdout' : function('s:on_stdout'),
+ \ 'on_stderr' : function('s:on_stderr'),
+ \ 'on_exit' : function('s:on_exit'),
+ \ })
+endfunction
+
+
+function! s:update_statusline() abort
+ redrawstatus!
+endfunction
+
+function! SpaceVim#plugins#runner#reg_runner(ft, runner) abort
+ let s:runners[a:ft] = a:runner
+endfunction
+
+function! SpaceVim#plugins#runner#open() abort
+ let s:lines = 0
+ let s:status = {
+ \ 'is_running' : 0,
+ \ 'is_exit' : 0,
+ \ 'has_errors' : 0,
+ \ 'exit_code' : 0
+ \ }
+ let runner = get(s:runners, &filetype, '')
+ if !empty(runner)
+ call s:open_win()
+ call s:async_run(runner)
+ call s:update_statusline()
+ endif
+endfunction
+
+" @vimlint(EVL103, 1, a:job_id)
+" @vimlint(EVL103, 1, a:data)
+" @vimlint(EVL103, 1, a:event)
+function! s:on_stdout(job_id, data, event) abort
+ call s:BUFFER.buf_set_lines(s:bufnr, s:lines , s:lines + 1, 0, a:data)
+ let s:lines += len(a:data)
+ call s:update_statusline()
+endfunction
+
+function! s:on_stderr(job_id, data, event) abort
+ let s:status.has_errors = 1
+ call s:BUFFER.buf_set_lines(s:bufnr, s:lines , s:lines + 1, 0, a:data)
+ let s:lines += len(a:data)
+ call s:update_statusline()
+endfunction
+
+function! s:on_exit(job_id, data, event) abort
+ let s:end_time = reltime(s:start_time)
+ let s:status.is_exit = 1
+ let s:status.exit_code = a:data
+ call s:update_statusline()
+
+endfunction
+" @vimlint(EVL103, 0, a:job_id)
+" @vimlint(EVL103, 0, a:data)
+" @vimlint(EVL103, 0, a:event)
+
+function! s:debug_info() abort
+ return []
+endfunction
+
+
+function! SpaceVim#plugins#runner#status() abort
+ if s:status.is_running == 1
+ elseif s:status.is_exit == 1
+ return 'exit code : ' . s:status.exit_code
+ \ . ' time: ' . s:STRING.trim(reltimestr(s:end_time))
+ endif
+ return ''
+endfunction
+
+function! SpaceVim#plugins#runner#close() abort
+ if s:status.is_exit == 0
+ call s:JOB.close(s:job_id)
+ endif
+ exe 'bd' s:bufnr
+endfunction
diff --git a/autoload/SpaceVim/server.vim b/autoload/SpaceVim/server.vim
new file mode 100644
index 000000000..7b15b0a73
--- /dev/null
+++ b/autoload/SpaceVim/server.vim
@@ -0,0 +1,41 @@
+"=============================================================================
+" server.vim --- server manager for SpaceVim
+" Copyright (c) 2016-2017 Shidong Wang & Contributors
+" Author: Shidong Wang < wsdjeg at 163.com >
+" URL: https://spacevim.org
+" License: MIT license
+"=============================================================================
+
+
+
+
+function! SpaceVim#server#connect()
+ if empty($SPACEVIM_SERVER_ADDRESS)
+ let $SPACEVIM_SERVER_ADDRESS = serverlist()[0]
+ return 0
+ else
+ call sockconnect('pipe', $SPACEVIM_SERVER_ADDRESS, {'rpc' : 1})
+ return 1
+ endif
+endfunction
+
+
+function! SpaceVim#server#export_server()
+
+ call system('export $TEST_SPACEVIM="test"')
+
+endfunction
+
+function! SpaceVim#server#terminate()
+
+endfunction
+
+function! SpaceVim#server#list()
+ if has('nvim')
+ return join(serverlist(), "\n")
+ else
+ endif
+endfunction
+
+
+
diff --git a/config/main.vim b/config/main.vim
index 6abcba9a0..947589258 100644
--- a/config/main.vim
+++ b/config/main.vim
@@ -1,3 +1,7 @@
+if SpaceVim#server#connect()
+ finish
+endif
+
let g:Config_Main_Home = fnamemodify(expand(''),
\ ':p:h:gs?\\?'.((has('win16') || has('win32')
\ || has('win64'))?'\':'/') . '?')
diff --git a/config/plugins/neocomplete.vim b/config/plugins/neocomplete.vim
index 345631a97..a69367d22 100644
--- a/config/plugins/neocomplete.vim
+++ b/config/plugins/neocomplete.vim
@@ -69,4 +69,13 @@ inoremap neocomplete#smart_close_popup()."\"
inoremap neocomplete#close_popup()
inoremap neocomplete#cancel_popup()
+" Called once right before you start selecting multiple cursors
+function! Multiple_cursors_before()
+ NeoCompleteLock
+endfunction
+
+" Called once only when the multiple selection is canceled (default )
+function! Multiple_cursors_after()
+ NeoCompleteUnlock
+endfunction
" vim:set et sw=2 cc=80:
diff --git a/doc/SpaceVim.txt b/doc/SpaceVim.txt
index 3666dcb49..a76a6c70f 100644
--- a/doc/SpaceVim.txt
+++ b/doc/SpaceVim.txt
@@ -234,6 +234,9 @@ Set the message language of vim. Default is 'en_US.UTF-8'.
let g:spacevim_language = 'en_CA.utf8'
<
+ *g:spacevim_keep_server_alive*
+Option for keep the spacevim server ailive
+
*g:spacevim_colorscheme*
The colorscheme of SpaceVim. Default is 'gruvbox'.
@@ -412,6 +415,9 @@ COMMANDS *SpaceVim-commands*
:SPUpdate vim-airline
<
+:SPReinstall *:SPReinstall*
+ Command for reinstall plugin, support completion of plugin anme.
+
:SPInstall *:SPInstall*
Command for install plugins.
diff --git a/docs/documentation.md b/docs/documentation.md
index 2073b851a..826448122 100644
--- a/docs/documentation.md
+++ b/docs/documentation.md
@@ -407,7 +407,7 @@ Reminder of the color codes for the states:
| Mode | Color |
| ------- | ------ |
| Normal | Grey |
-| Insert | Blus |
+| Insert | Blue |
| Visual | Orange |
| Replace | Aqua |
@@ -461,7 +461,7 @@ all the colors based on the current colorscheme
**Statusline separators:**
-It is possible to easily customize the statusline separator by setting the `g:spacevim_statusline_separator` variable in your custon configration file and then redraw the statusline. For instance if you want to set back the separator to the well-known arrow separator add the following snippet to your configuration file:
+It is possible to easily customize the statusline separator by setting the `g:spacevim_statusline_separator` variable in your custom configration file and then redraw the statusline. For instance if you want to set back the separator to the well-known arrow separator add the following snippet to your configuration file:
```vim
let g:spacevim_statusline_separator = 'arrow'
@@ -809,7 +809,7 @@ Buffer manipulation commands (start with `b`):
##### Special Buffers
-In SpaceVim, there are many special buffers, these buffers are created by plugins or SpaceVim isself. and all of this buffers are not listed.
+In SpaceVim, there are many special buffers, these buffers are created by plugins or SpaceVim itself. And these buffers are not listed.
##### Files manipulations key bindings
@@ -969,7 +969,7 @@ after pressing prefix `z` in normal mode, if you do not remember the mappings, y
| `zO` | open folds recursively |
| `zR` | set `foldlevel` to deepest fold |
| `zW` | mark wrong spelled |
-| `zX` | re-apply `foldleve` |
+| `zX` | re-apply `foldlevel` |
| `z^` | cursor to screen bottom line N |
| `za` | toggle a fold |
| `zb` | redraw, cursor line at bottom |
diff --git a/docs/layers/git.md b/docs/layers/git.md
new file mode 100644
index 000000000..06abb5061
--- /dev/null
+++ b/docs/layers/git.md
@@ -0,0 +1,37 @@
+---
+title: "SpaceVim git layer"
+---
+
+# [SpaceVim Layers:](https://spacevim.org/layers) git
+
+
+
+- [Description](#description)
+ - [Features](#features)
+- [Install](#install)
+ - [Layer](#layer)
+- [Key bindings](#key-bindings)
+
+
+
+## Description
+
+This layers adds extensive support for [git](http://git-scm.com/).
+
+### Features
+
+## Install
+
+### Layer
+
+To use this configuration layer, add `call SpaceVim#layers#load('git')` to your custom configuration file.
+
+## Key bindings
+
+| Key Binding | Description |
+| -------------- | ---------------------- |
+| ` g a` | git add current file |
+| ` g A` | git add All files |
+| ` g b` | open git blame window |
+| ` g s` | open git status window |
+| ` g c` | open git commit window |
diff --git a/docs/layers/lang/php.md b/docs/layers/lang/php.md
index 21f98403c..6a31233f6 100644
--- a/docs/layers/lang/php.md
+++ b/docs/layers/lang/php.md
@@ -1,15 +1,27 @@
-# [Layers](https://spacevim.org/layers) > lang#php
+---
+title: "SpaceVim lang#php layer"
+---
-This layer is for php development.
+# [SpaceVim Layers:](https://spacevim.org/layers) lang#php
-## Install
+
+* [Description](#description)
+* [Layer Installation](#layer-installation)
+ * [Requirement](#requirement)
-To include this layer, add `SPLayer 'lang#php'` to your custom configuration file.
+
+## Description
-## Requirement
+This layer adds PHP language support to SpaceVim.
- 1. [PHP 5.3+](http://php.net/)
- 2. [PCNTL](http://php.net/manual/en/book.pcntl.php) Extension
- 3. [Msgpack 0.5.7+(for NeoVim)](https://github.com/msgpack/msgpack-php) Extension or [JSON(for Vim 7.4+)](http://php.net/manual/en/intro.json.php) Extension
- 4. [Composer](https://getcomposer.org/) Project
+## Layer Installation
+
+To use this configuration layer, add `SPLayer 'lang#php'` to your custom configuration file.
+
+### Requirement
+
+1. [PHP 5.3+](http://php.net/)
+2. [PCNTL](http://php.net/manual/en/book.pcntl.php) Extension
+3. [Msgpack 0.5.7+(for NeoVim)](https://github.com/msgpack/msgpack-php) Extension or [JSON(for Vim 7.4+)](http://php.net/manual/en/intro.json.php) Extension
+4. [Composer](https://getcomposer.org/) Project
diff --git a/docs/layers/lang/vim.md b/docs/layers/lang/vim.md
new file mode 100644
index 000000000..fe5dda783
--- /dev/null
+++ b/docs/layers/lang/vim.md
@@ -0,0 +1,28 @@
+---
+title: "SpaceVim lang#vim layer"
+---
+
+# [SpaceVim Layers:](https://spacevim.org/layers) lang#vim
+
+
+
+- [Description](#description)
+- [Layer Installation](#layer-installation)
+- [Key bindings](#key-bindings)
+
+
+
+## Description
+
+This layer is for vim plugin development.
+
+## Layer Installation
+
+To use this configuration layer, add `call SpaceVim#layers#load('lang#vim')` to your custom configuration file.
+
+## Key bindings
+
+| Key Binding | Description |
+| ----------- | ----------------------------------------- |
+| `SPC l e` | print the eval under the cursor |
+| `SPC l v` | print the helpfulversion under the cursor |
diff --git a/test/api/vim/buffer.vader b/test/api/vim/buffer.vader
index c60f19aa2..5bd1cc405 100644
--- a/test/api/vim/buffer.vader
+++ b/test/api/vim/buffer.vader
@@ -1,6 +1,14 @@
-Execute ( SpaceVim api: vim#buffer ):
+Execute ( SpaceVim api: vim#buffer open ):
new
let buffer = SpaceVim#api#import('vim#buffer')
call buffer.open({'bufname':'foo', 'cmd' : 'setl buftype=nofile bufhidden=wipe'})
AssertEqual bufname('%'), 'foo'
AssertEqual &buftype, 'nofile'
+
+Execute ( SpaceVim api: vim#buffer buf_set_lines):
+ new
+ let buffer = SpaceVim#api#import('vim#buffer')
+ let nr = bufnr('%')
+ new
+ call buffer.buf_set_lines(nr, 0, 1, 0, ['line 1', 'line 2', 'line 3'])
+ AssertEqual getbufline(nr, 1, '$'), ['line 1', 'line 2', 'line 3']
diff --git a/test/test.sh b/test/test.sh
index fe81b8074..e69de29bb 100755
--- a/test/test.sh
+++ b/test/test.sh
@@ -1,4 +0,0 @@
-if [ ! -e /tmp/vader ]; then
- git clone https://github.com/junegunn/vader.vim.git /tmp/vader
-fi
-vim -Nu test/test.vim -c 'Vader! test/**'
diff --git a/test/test.vim b/test/vimrc
similarity index 79%
rename from test/test.vim
rename to test/vimrc
index 4922aee54..610ba93a3 100644
--- a/test/test.vim
+++ b/test/vimrc
@@ -1,5 +1,5 @@
filetype off
-set rtp+=/tmp/vader
+set rtp+=build/vader
set rtp+=.
set rtp+=after
filetype plugin indent on