1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-09 12:50:05 +08:00

Merge branch 'dev' into custom

This commit is contained in:
wsdjeg 2017-12-16 15:48:52 +08:00
commit cfa6a071e7
93 changed files with 3325 additions and 1766 deletions

View File

@ -0,0 +1,44 @@
function! SpaceVim#dev#layers#update() abort
let [start, end] = s:find_position()
if start != 0 && end != 0
if end - start > 1
exe (start + 1) . ',' . (end - 1) . 'delete'
endif
call append(start, s:generate_content())
silent! Neoformat
endif
endfunction
function! s:find_position() abort
let start = search('^<!-- SpaceVim layer list start -->$','bwnc')
let end = search('^<!-- SpaceVim layer list end -->$','bnwc')
return sort([start, end])
endfunction
function! s:generate_content() abort
let content = ['', '## Available layers', '']
let content += s:layer_list()
return content
endfunction
function! s:layer_list() abort
let layers = SpaceVim#util#globpath('~/.SpaceVim/', "docs/layers/**/*.md")
let list = [
\ '| Name | Description |',
\ '| ---------- | ------------ |'
\ ]
for layer in layers
let name = split(layer, '/docs/layers')[1][:-4] . '/'
let url = 'https://spacevim.org/layers' . name
let content = readfile(layer)
if len(content) > 3
let line = '| [' . join(split(name, '/'), '#') . '](' . url . ') | ' . content[2][14:-2] . ' | '
else
let line = '| [' . join(split(name, '/'), '#') . '](' . url . ') | can not find Description |'
endif
call add(list, line)
endfor
return list
endfunction

View File

@ -11,8 +11,10 @@ if [ "$TRAVIS_PULL_REQUEST" != "false" ] ; then
git clone https://github.com/wsdjeg/GitHub.vim.git build/GitHub.vim git clone https://github.com/wsdjeg/GitHub.vim.git build/GitHub.vim
docker run -it --rm \ docker run -it --rm \
-v $PWD/.ci:/.ci \ -v $PWD/.ci:/.ci \
-v $PWD/autoload/SpaceVim/api:/API/autoload/SpaceVim/api \
-v $PWD/autoload/SpaceVim/api.vim:/API/autoload/SpaceVim/api.vim \
-v $PWD/build:/build \ -v $PWD/build:/build \
spacevim/vims neovim-stable -u .ci/common/github_commenter.vim spacevim/vims neovim-stable -u /.ci/common/github_commenter.vim
rm build_log rm build_log
fi fi
elif [ "$LINT" = "vint-errors" ] ; then elif [ "$LINT" = "vint-errors" ] ; then
@ -25,8 +27,10 @@ if [ "$TRAVIS_PULL_REQUEST" != "false" ] ; then
git clone https://github.com/wsdjeg/GitHub.vim.git build/GitHub.vim git clone https://github.com/wsdjeg/GitHub.vim.git build/GitHub.vim
docker run -it --rm \ docker run -it --rm \
-v $PWD/.ci:/.ci \ -v $PWD/.ci:/.ci \
-v $PWD/autoload/SpaceVim/api:/API/autoload/SpaceVim/api \
-v $PWD/autoload/SpaceVim/api.vim:/API/autoload/SpaceVim/api.vim \
-v $PWD/build:/build \ -v $PWD/build:/build \
spacevim/vims neovim-stable -u .ci/common/github_commenter.vim spacevim/vims neovim-stable -u /.ci/common/github_commenter.vim
rm build_log rm build_log
fi fi
elif [ "$LINT" = "vader" ] ; then elif [ "$LINT" = "vader" ] ; then

View File

@ -0,0 +1,25 @@
#!/usr/bin/env bash
if [ "$TRAVIS_PULL_REQUEST" != "false" ] ; then
if [ "$LINT" = "vimlint-errors" ] ; then
VIMLINT_LOG=""
git clone https://github.com/wsdjeg/GitHub.vim.git build/GitHub.vim
docker run -it --rm \
-v $PWD/.ci:/.ci \
-v $PWD/autoload/SpaceVim/api:/API/autoload/SpaceVim/api \
-v $PWD/autoload/SpaceVim/api.vim:/API/autoload/SpaceVim/api.vim \
-v $PWD/build:/build \
spacevim/vims neovim-stable -u /.ci/common/github_commenter.vim
elif [ "$LINT" = "vint-errors" ] ; then
VIMLINT_LOG=""
git clone https://github.com/wsdjeg/GitHub.vim.git build/GitHub.vim
docker run -it --rm \
-v $PWD/.ci:/.ci \
-v $PWD/autoload/SpaceVim/api:/API/autoload/SpaceVim/api \
-v $PWD/autoload/SpaceVim/api.vim:/API/autoload/SpaceVim/api.vim \
-v $PWD/build:/build \
spacevim/vims neovim-stable -u /.ci/common/github_commenter.vim
elif [ "$LINT" = "vader" ] ; then
echo ""
fi
fi

View File

@ -1,8 +1,8 @@
exe 'set nocp' exe 'set nocp'
set rtp+=build/GitHub.vim set rtp+=/build/GitHub.vim
so build/GitHub.vim/plugin/github.vim set rtp+=/API
so build/GitHub.vim/autoload/github/api/issues.vim so /build/GitHub.vim/plugin/github.vim
so build/GitHub.vim/autoload/github/api/util.vim let s:LIST = SpaceVim#api#import('data#list')
let s:log = filereadable('build_log') ? system('cat build_log') : '' let s:log = filereadable('build_log') ? system('cat build_log') : ''
function! s:update_log(log, summary, new_log) abort function! s:update_log(log, summary, new_log) abort
let log = split(a:log, "\n") let log = split(a:log, "\n")
@ -16,8 +16,12 @@ function! s:update_log(log, summary, new_log) abort
let end = i let end = i
endif endif
endfor endfor
return a:log . "\n" . a:new_log if begin != -1 && end != -1
return s:LIST.replace(log, begin, end, split(a:new_log, "\n"))
else
return a:log . "\n" . a:new_log
endif
endfunction endfunction
if !empty(s:log) if !empty(s:log)
if $LINT == 'vader' if $LINT == 'vader'
@ -44,5 +48,26 @@ if !empty(s:log)
\ {'body': s:update_log(s:comment.body, s:summary, s:log)}, 'SpaceVimBot', $BOTSECRET) \ {'body': s:update_log(s:comment.body, s:summary, s:log)}, 'SpaceVimBot', $BOTSECRET)
endif endif
endif endif
else
if $LINT == 'vader'
let s:summary = $VIM . ' ' . $LINT . ' build log'
else
let s:summary = $LINT . ' build log'
endif
let s:log = '<details><summary>' . s:summary . "</summary>\n" . s:log . "\n</details>"
let s:comments = github#api#issues#List_comments('SpaceVim', 'SpaceVim',$TRAVIS_PULL_REQUEST ,'')
if !empty(s:comments)
let s:nr = 0
for s:comment in s:comments
if s:comment.user.login ==# 'SpaceVimBot'
let s:nr = s:comment.id
break
endif
endfor
if s:nr != 0
call github#api#issues#Edit_comment('SpaceVim','SpaceVim', s:nr,
\ {'body': s:update_log(s:comment.body, s:summary, s:log)}, 'SpaceVimBot', $BOTSECRET)
endif
endif
endif endif
quit quit

View File

@ -12,9 +12,9 @@ elif [ "$LINT" = "vimlint-errors" ]; then
fi fi
for file in $(git diff --name-only HEAD dev | grep .vim$); for file in $(git diff --name-only HEAD dev | grep .vim$);
do do
/tmp/vimlint/bin/vimlint.sh -E -l /tmp/vimlint -p /tmp/vimlparser $file >> build_log; /tmp/vimlint/bin/vimlint.sh -E -l /tmp/vimlint -p /tmp/vimlparser $file >> build_log 2>&1;
done done
if [[ -f build_log ]]; then if [[ -s build_log ]]; then
cat build_log cat build_log
exit 2 exit 2
fi fi

View File

@ -20,7 +20,7 @@ SpaceVim is a community-driven vim distribution that supports vim and Neovim. S
Please star the project on github - it is a great way to show your appreciation while providing us motivation to continue working on this project. The extra visibility for the project doesn't hurt either! Please star the project on github - it is a great way to show your appreciation while providing us motivation to continue working on this project. The extra visibility for the project doesn't hurt either!
![welcome-page](https://cloud.githubusercontent.com/assets/13142418/26402270/28ad72b8-40bc-11e7-945e-003f41e057be.png) ![welcome-page](https://user-images.githubusercontent.com/13142418/33793078-3446cb6e-dc76-11e7-9998-376a355557a4.png)
See the [documentation](https://spacevim.org/documentation) or [the list of layers](http://spacevim.org/layers/) for more information. See the [documentation](https://spacevim.org/documentation) or [the list of layers](http://spacevim.org/layers/) for more information.
@ -28,6 +28,20 @@ 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) [![Throughput Graph](https://graphs.waffle.io/SpaceVim/SpaceVim/throughput.svg)](https://waffle.io/SpaceVim/SpaceVim/metrics/throughput)
<!-- vim-markdown-toc GFM -->
- [Requirements](#requirements)
- [Install](#install)
- [Linux and macOS](#linux-and-macos)
- [Windows](#windows)
- [Project layout](#project-layout)
- [Features](#features)
- [Blogs](#blogs)
- [Support SpaceVim](#support-spacevim)
- [Credits & Thanks](#credits--thanks)
<!-- vim-markdown-toc -->
### Requirements ### Requirements
At a minimum, SpaceVim requires `git` to be installed. For a better graphical experience, install [nerd-font](https://github.com/ryanoasis/nerd-fonts) and make sure your terminal supports [true colors](https://gist.github.com/XVilka/8346728). At a minimum, SpaceVim requires `git` to be installed. For a better graphical experience, install [nerd-font](https://github.com/ryanoasis/nerd-fonts) and make sure your terminal supports [true colors](https://gist.github.com/XVilka/8346728).
@ -68,15 +82,25 @@ The easist way is to download [install.cmd](https://spacevim.org/install.cmd) an
- **Great documentation:** access documentation in Vim with <kbd>SPC h SPC</kbd>. - **Great documentation:** access documentation in Vim with <kbd>SPC h SPC</kbd>.
![SPC h SPC](https://user-images.githubusercontent.com/13142418/31620230-48b53eea-b2c9-11e7-90d0-b717878875d4.gif) ![SPC h SPC](https://user-images.githubusercontent.com/13142418/31620230-48b53eea-b2c9-11e7-90d0-b717878875d4.gif)
- **Beautiful GUI:** you'll love the awesome UI and its useful features. - **Beautiful UI:** you'll love the awesome UI and its useful features.
![beautiful UI](https://user-images.githubusercontent.com/13142418/33804722-bc241f50-dd70-11e7-8dd8-b45827c0019c.png)
- **Mnemonic key bindings:** all key bindings have mnemonic prefixes. - **Mnemonic key bindings:** all key bindings have mnemonic prefixes.
![mapping guide](https://user-images.githubusercontent.com/13142418/31550099-c8173ff8-b062-11e7-967e-6378a9c3b467.gif) ![mapping guide](https://user-images.githubusercontent.com/13142418/31550099-c8173ff8-b062-11e7-967e-6378a9c3b467.gif)
- **Describe key bindings:** use <kbd>SPC h d k</kbd> to describe key bindings. - **Describe key bindings:** use <kbd>SPC h d k</kbd> to describe key bindings, and find definition of key bindings.
![describe key](https://user-images.githubusercontent.com/13142418/32134986-060a3b8a-bc2a-11e7-89a2-3ee4e616bf06.gif) ![describe key](https://user-images.githubusercontent.com/13142418/33804739-52dbc498-dd71-11e7-97e5-ed0fa6ec1719.gif)
- **Lazy load plugins:** Lazy-load 90% of plugins with [dein.vim](https://github.com/Shougo/dein.vim) - **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) ![UI for dein](https://user-images.githubusercontent.com/13142418/31309093-36c01150-abb3-11e7-836c-3ad406bdd71a.gif)
- **Awesome statusline:** a heavily customized modular statusline.
![statusline](https://user-images.githubusercontent.com/13142418/33804880-b9177142-dd73-11e7-82d5-1780dc27e7e3.png)
- **Neovim centric:** Dark powered mode of SpaceVim - **Neovim centric:** Dark powered mode of SpaceVim
### Blogs
- [Use Vim as a Java IDE](http://spacevim.org/use-vim-as-a-java-ide/)
- [An async code runner in SpaceVim](http://spacevim.org/async-code-runner-in-SpaceVim/)
More posts are in the [SpaceVim's Blog](https://spacevim.org/blog/)
### Support SpaceVim ### Support SpaceVim
The best way to support SpaceVim is to contribute to it either by reporting bugs, helping the community on the Gitter Chat or sending pull requests. The best way to support SpaceVim is to contribute to it either by reporting bugs, helping the community on the Gitter Chat or sending pull requests.

View File

@ -98,7 +98,7 @@ let g:spacevim_realtime_leader_guide = 1
" let g:spacevim_enable_key_frequency = 1 " let g:spacevim_enable_key_frequency = 1
" < " <
let g:spacevim_enable_key_frequency = 0 let g:spacevim_enable_key_frequency = 0
if has('python3') if has('python3') && SpaceVim#util#haspyxlib('neovim')
"" ""
" Set the autocomplete engine of spacevim, the default logic is: " Set the autocomplete engine of spacevim, the default logic is:
" > " >
@ -195,7 +195,7 @@ let g:spacevim_statusline_inactive_separator = 'arrow'
" \ 'version control info' " \ 'version control info'
" \ ] " \ ]
" < " <
let g:spacevim_statusline_left_sections = ['winnr', 'filename', 'major mode', 'syntax checking', 'minor mode lighters', 'version control info'] let g:spacevim_statusline_left_sections = ['winnr', 'filename', 'major mode', 'syntax checking', 'minor mode lighters', 'version control info', 'hunks']
"" ""
" Define the right section of statusline in active windows. By default: " Define the right section of statusline in active windows. By default:
" > " >
@ -254,11 +254,13 @@ let g:spacevim_warning_symbol = '⚠'
" < " <
let g:spacevim_info_symbol = '🛈' let g:spacevim_info_symbol = '🛈'
"" ""
" Set the SpaceVim cursor shape in the terminal. Set to 0 to prevent Nvim from " Set the SpaceVim cursor shape in the terminal.
" changing the cursor shape. Set to 1 to enable non-blinking mode-sensitive " >
" cursor (this is the default). Set to 2 to enable blinking mode-sensitive " 0 : to prevent Nvim from changing the cursor shape.
" cursor. Host terminal must support the DECSCUSR CSI escape sequence. " 1 : to enable non-blinking mode-sensitive cursor.
" " 2 : to enable blinking mode-sensitive cursor (default).
" >
" Host terminal must support the DECSCUSR CSI escape sequence.
" Depending on the terminal emulator, using this option with nvim under " Depending on the terminal emulator, using this option with nvim under
" tmux might require adding the following to ~/.tmux.conf: " tmux might require adding the following to ~/.tmux.conf:
" > " >
@ -428,7 +430,17 @@ let g:spacevim_enable_vimfiler_gitstatus = 0
" Enable/Disable filetypeicon column in vimfiler buffer, default is 0. " Enable/Disable filetypeicon column in vimfiler buffer, default is 0.
let g:spacevim_enable_vimfiler_filetypeicon = 0 let g:spacevim_enable_vimfiler_filetypeicon = 0
let g:spacevim_smartcloseignorewin = ['__Tagbar__' , 'vimfiler:default'] let g:spacevim_smartcloseignorewin = ['__Tagbar__' , 'vimfiler:default']
let g:spacevim_smartcloseignoreft = ['help', 'tagbar', 'vimfiler', 'SpaceVimRunner', 'SpaceVimQuickFix', 'HelpDescribe'] let g:spacevim_smartcloseignoreft = [
\ 'help',
\ 'tagbar',
\ 'vimfiler',
\ 'SpaceVimRunner',
\ 'SpaceVimREPL',
\ 'SpaceVimQuickFix',
\ 'HelpDescribe',
\ 'VebuggerShell',
\ 'VebuggerTerminal',
\ ]
let g:spacevim_altmoveignoreft = ['Tagbar' , 'vimfiler'] let g:spacevim_altmoveignoreft = ['Tagbar' , 'vimfiler']
let g:spacevim_enable_javacomplete2_py = 0 let g:spacevim_enable_javacomplete2_py = 0
let g:spacevim_src_root = 'E:\sources\' let g:spacevim_src_root = 'E:\sources\'
@ -637,6 +649,8 @@ function! SpaceVim#end() abort
set norelativenumber set norelativenumber
endif endif
let &shiftwidth = g:spacevim_default_indent
if g:spacevim_realtime_leader_guide if g:spacevim_realtime_leader_guide
nnoremap <silent><nowait> <leader> :<c-u>LeaderGuide get(g:, 'mapleader', '\')<CR> nnoremap <silent><nowait> <leader> :<c-u>LeaderGuide get(g:, 'mapleader', '\')<CR>
vnoremap <silent> <leader> :<c-u>LeaderGuideVisual get(g:, 'mapleader', '\')<CR> vnoremap <silent> <leader> :<c-u>LeaderGuideVisual get(g:, 'mapleader', '\')<CR>

View File

@ -7,7 +7,7 @@ let s:COP = SpaceVim#api#import('vim#compatible')
" this is for vim command completion " this is for vim command completion
function! s:self.complete(ArgLead, CmdLine, CursorPos) abort function! s:self.complete(ArgLead, CmdLine, CursorPos) abort
if a:CmdLine =~ '^[^ ]*$' if a:CmdLine =~ '^\s\{0,\}\w\+$'
return s:COP.systemlist('compgen -c ' . a:CmdLine) return s:COP.systemlist('compgen -c ' . a:CmdLine)
endif endif
let result = s:COP.systemlist([s:completer, a:CmdLine]) let result = s:COP.systemlist([s:completer, a:CmdLine])
@ -18,7 +18,7 @@ endfunction
" this is for vim input() " this is for vim input()
function! s:self.complete_input(ArgLead, CmdLine, CursorPos) abort function! s:self.complete_input(ArgLead, CmdLine, CursorPos) abort
if a:CmdLine =~ '^[^ ]*$' if a:CmdLine =~ '^\s\{0,\}\w\+$'
return s:COP.systemlist('compgen -c ' . a:CmdLine) return s:COP.systemlist('compgen -c ' . a:CmdLine)
endif endif
let result = s:COP.systemlist([s:completer, a:CmdLine]) let result = s:COP.systemlist([s:completer, a:CmdLine])

View File

@ -10,6 +10,7 @@ function! SpaceVim#api#data#list#get() abort
\ 'has' : '', \ 'has' : '',
\ 'has_index' : '', \ 'has_index' : '',
\ 'listpart' : '', \ 'listpart' : '',
\ 'replace' : '',
\ }, \ },
\ "function('s:' . v:key)" \ "function('s:' . v:key)"
\ ) \ )
@ -101,4 +102,12 @@ function! s:has_index(list, index) abort
return 0 <= a:index && a:index < len(a:list) return 0 <= a:index && a:index < len(a:list)
endfunction endfunction
function! s:replace(list, begin, end, re_list)
if a:begin <= a:end && a:begin >= 0 && a:end < len(a:list)
return a:list[:a:begin - 1] + a:re_list + a:list[a:end + 1:]
else
return a:list
endif
endf
" vim:set et sw=2 cc=80: " vim:set et sw=2 cc=80:

View File

@ -28,7 +28,7 @@ let s:file_node_extensions = {
\ 'json' : '', \ 'json' : '',
\ 'js' : '', \ 'js' : '',
\ 'jsx' : '', \ 'jsx' : '',
\ 'rb' : '', \ 'rb' : '',
\ 'php' : '', \ 'php' : '',
\ 'py' : '', \ 'py' : '',
\ 'pyc' : '', \ 'pyc' : '',

View File

@ -190,7 +190,11 @@ function! s:self.send(id, data) abort
if has_key(self.jobs, a:id) if has_key(self.jobs, a:id)
let job = get(self.jobs, a:id) let job = get(self.jobs, a:id)
let chanel = job_getchannel(job) let chanel = job_getchannel(job)
call ch_sendraw(chanel, a:data . "\n") if type(a:data) == type('')
call ch_sendraw(chanel, a:data . "\n")
else
call ch_sendraw(chanel, join(a:data, "\n"))
endif
else else
call self.warn('No job with such id') call self.warn('No job with such id')
endif endif

View File

@ -4,217 +4,239 @@ let s:self._keys = {}
let s:self._on_syntax = '' let s:self._on_syntax = ''
let s:self._title = 'Transient State' let s:self._title = 'Transient State'
let s:self._handle_inputs = {} let s:self._handle_inputs = {}
let s:self._is_quit = []
function! s:self.open() abort function! s:self.open() abort
noautocmd botright split __transient_state__ noautocmd botright split __transient_state__
let self._bufid = bufnr('%') let self._bufid = bufnr('%')
setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline nospell nonu norelativenumber setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline nospell nonu norelativenumber
set filetype=TransientState set filetype=TransientState
" let save_tve = &t_ve " let save_tve = &t_ve
" setlocal t_ve= " setlocal t_ve=
" setlocal nomodifiable " setlocal nomodifiable
" setf SpaceVimFlyGrep " setf SpaceVimFlyGrep
" let &t_ve = save_tve " let &t_ve = save_tve
if !empty(self._on_syntax) && type(self._on_syntax) ==# 2 if !empty(self._on_syntax) && type(self._on_syntax) ==# 2
call call(self._on_syntax, []) call call(self._on_syntax, [])
else
hi def link SpaceVim_Transient_State_Exit Keyword
hi def link SpaceVim_Transient_State_Notexit Number
hi def link SpaceVim_Transient_State_Title Title
endif
call setline(1, self._title)
let b:transient_state_title = self._title
call append(line('$'), '')
call self.highlight_title()
call self._update_content()
call append(line('$'), '')
call append(line('$'), '[KEY] exits state [KEY] will not exit')
call self.highlight_keys(1, line('$') - 1, 1, 4)
call self.highlight_keys(0, line('$') - 1, 21, 24)
if winheight(0) > line('$')
exe 'resize ' . line('$')
endif
" move to prvious window
wincmd p
while 1
redraw!
let char = self._getchar()
if char ==# "\<FocusLost>" || char ==# "\<FocusGained>" || char2nr(char) == 128
continue
endif
if !has_key(self._handle_inputs, char)
break
else else
hi def link SpaceVim_Transient_State_Exit Keyword if type(self._handle_inputs[char]) == 2
hi def link SpaceVim_Transient_State_Notexit Number call call(self._handle_inputs[char], [])
hi def link SpaceVim_Transient_State_Title Title elseif type(self._handle_inputs[char]) == 1
exe self._handle_inputs[char]
endif
endif endif
call setline(1, self._title) if index(self._is_quit, char) != -1
let b:transient_state_title = self._title break
call append(line('$'), '')
call self.highlight_title()
call self._update_content()
call append(line('$'), '')
call append(line('$'), '[KEY] exits state [KEY] will not exit')
call self.highlight_keys(1, line('$') - 1, 1, 4)
call self.highlight_keys(0, line('$') - 1, 21, 24)
if winheight(0) > line('$')
exe 'resize ' . line('$')
endif endif
" move to prvious window endwhile
wincmd p exe 'bd ' . self._bufid
while 1 doautocmd WinEnter
redraw!
let char = self._getchar()
if char ==# "\<FocusLost>" || char ==# "\<FocusGained>" || char2nr(char) == 128
continue
endif
if !has_key(self._handle_inputs, char)
break
else
if type(self._handle_inputs[char]) == 2
call call(self._handle_inputs[char], [])
elseif type(self._handle_inputs[char]) == 1
exe self._handle_inputs[char]
endif
endif
endwhile
exe 'bd ' . self._bufid
doautocmd WinEnter
endfunction endfunction
function! s:self._getchar(...) abort function! s:self._getchar(...) abort
let ret = call('getchar', a:000) let ret = call('getchar', a:000)
return (type(ret) == type(0) ? nr2char(ret) : ret) return (type(ret) == type(0) ? nr2char(ret) : ret)
endfunction endfunction
function! s:self.defind_keys(dict) abort function! s:self.defind_keys(dict) abort
let self._keys = a:dict let self._keys = a:dict
endfunction endfunction
function! s:self.set_syntax(func) abort function! s:self.set_syntax(func) abort
let self._on_syntax = a:func let self._on_syntax = a:func
endfunction endfunction
function! s:self.set_title(title) abort function! s:self.set_title(title) abort
let self._title = a:title let self._title = a:title
endfunction endfunction
if has('nvim') if has('nvim')
function! s:self.highlight_keys(exit, line, begin, end) abort function! s:self.highlight_keys(exit, line, begin, end) abort
if a:exit if a:exit
call nvim_buf_add_highlight(self._bufid, 0, 'SpaceVim_Transient_State_Exit', a:line, a:begin, a:end) call nvim_buf_add_highlight(self._bufid, 0, 'SpaceVim_Transient_State_Exit', a:line, a:begin, a:end)
else else
call nvim_buf_add_highlight(self._bufid, 0, 'SpaceVim_Transient_State_Notexit', a:line, a:begin, a:end) call nvim_buf_add_highlight(self._bufid, 0, 'SpaceVim_Transient_State_Notexit', a:line, a:begin, a:end)
endif endif
endfunction endfunction
else else
function! s:self.highlight_keys(exit, line, begin, end) abort function! s:self.highlight_keys(exit, line, begin, end) abort
if a:exit if a:exit
call matchaddpos('SpaceVim_Transient_State_Exit', [[a:line + 1, a:begin + 1, a:end - a:begin]]) call matchaddpos('SpaceVim_Transient_State_Exit', [[a:line + 1, a:begin + 1, a:end - a:begin]])
else else
call matchaddpos('SpaceVim_Transient_State_Notexit', [[a:line + 1, a:begin + 1, a:end - a:begin]]) call matchaddpos('SpaceVim_Transient_State_Notexit', [[a:line + 1, a:begin + 1, a:end - a:begin]])
endif endif
endfunction endfunction
endif endif
if has('nvim') if has('nvim')
function! s:self.highlight_title() abort function! s:self.highlight_title() abort
call nvim_buf_add_highlight(self._bufid, 0, 'SpaceVim_Transient_State_Title', 0, 0, len(self._title)) call nvim_buf_add_highlight(self._bufid, 0, 'SpaceVim_Transient_State_Title', 0, 0, len(self._title))
endfunction endfunction
else else
function! s:self.highlight_title() abort function! s:self.highlight_title() abort
call matchaddpos('SpaceVim_Transient_State_Title', [1]) call matchaddpos('SpaceVim_Transient_State_Title', [1])
endfunction endfunction
endif endif
function! s:self._update_content() abort function! s:self._update_content() abort
if get(self._keys, 'layout', '') == 'vertical split' if get(self._keys, 'layout', '') == 'vertical split'
let linenum = max([len(self._keys.right), len(self._keys.left)]) let linenum = max([len(self._keys.right), len(self._keys.left)])
let left_max_key_len = 0 let left_max_key_len = 0
for key in self._keys.left for key in self._keys.left
if type(key.key) == 1 " is a string if type(key.key) == 1 " is a string
let left_max_key_len = max([len(key.key), left_max_key_len]) let left_max_key_len = max([len(key.key), left_max_key_len])
elseif type(key.key) == 3 " is a list elseif type(key.key) == 3 " is a list
let left_max_key_len = max([len(join(key.key, '/')), left_max_key_len]) let left_max_key_len = max([len(join(key.key, '/')), left_max_key_len])
elseif type(key.key) == 4 " is a dict elseif type(key.key) == 4 " is a dict
let left_max_key_len = max([len(key.key.name), left_max_key_len]) let left_max_key_len = max([len(key.key.name), left_max_key_len])
endif endif
endfor endfor
let right_max_key_len = 0 let right_max_key_len = 0
for key in self._keys.right for key in self._keys.right
if type(key.key) == 1 " is a string if type(key.key) == 1 " is a string
let right_max_key_len = max([len(key.key), right_max_key_len]) let right_max_key_len = max([len(key.key), right_max_key_len])
elseif type(key.key) == 3 " is a list elseif type(key.key) == 3 " is a list
let g:wsd = key.key let right_max_key_len = max([len(join(key.key, '/')), right_max_key_len])
let right_max_key_len = max([len(join(key.key, '/')), right_max_key_len]) elseif type(key.key) == 4 " is a dict
elseif type(key.key) == 4 " is a dict let right_max_key_len = max([len(key.key.name), right_max_key_len])
let right_max_key_len = max([len(key.key.name), right_max_key_len]) endif
endif endfor
endfor for i in range(linenum)
for i in range(linenum) let left = get(self._keys.left, i)
let left = get(self._keys.left, i) let right = get(self._keys.right, i)
let right = get(self._keys.right, i) let line = ''
let line = '' if !empty(left)
if !empty(left) if type(left.key) == 1
if type(left.key) == 1 let line .= '[' . left.key . '] ' . repeat(' ', left_max_key_len - len(left.key)) . left.desc
let line .= '[' . left.key . '] ' . repeat(' ', left_max_key_len - len(left.key)) . left.desc call self.highlight_keys(left.exit, i + 2, 1, 1 + len(left.key))
call self.highlight_keys(left.exit, i + 2, 1, 1 + len(left.key)) if !empty(left.cmd)
if !empty(left.cmd) call extend(self._handle_inputs, {left.key : left.cmd})
call extend(self._handle_inputs, {left.key : left.cmd}) elseif !empty(left.func)
elseif !empty(left.func) call extend(self._handle_inputs, {left.key : left.func})
call extend(self._handle_inputs, {left.key : left.func}) endif
endif if left.exit
elseif type(left.key) == 3 call add(self._is_quit, left.key)
let line .= '[' . join(left.key, '/') . '] ' endif
let line .= repeat(' ', left_max_key_len - len(join(left.key, '/'))) elseif type(left.key) == 3
let line .= left.desc let line .= '[' . join(left.key, '/') . '] '
let begin = 1 let line .= repeat(' ', left_max_key_len - len(join(left.key, '/')))
for key in left.key let line .= left.desc
call self.highlight_keys(left.exit, i + 2, begin, begin + len(key)) let begin = 1
let begin = begin + len(key) + 1 for key in left.key
endfor call self.highlight_keys(left.exit, i + 2, begin, begin + len(key))
if !empty(left.cmd) let begin = begin + len(key) + 1
for key in left.key endfor
call extend(self._handle_inputs, {key : left.cmd}) if !empty(left.cmd)
endfor for key in left.key
elseif !empty(left.func) call extend(self._handle_inputs, {key : left.cmd})
for key in left.key endfor
call extend(self._handle_inputs, {key : left.func}) elseif !empty(left.func)
endfor for key in left.key
endif call extend(self._handle_inputs, {key : left.func})
elseif type(left.key) == 4 endfor
let line .= '[' . left.key.name . '] ' endif
let line .= repeat(' ', left_max_key_len - len(left.key.name)) if left.exit
let line .= left.desc call extend(self._is_quit, left.key)
for pos in left.key.pos endif
call self.highlight_keys(left.exit, i + 2, pos[0], pos[1]) elseif type(left.key) == 4
endfor let line .= '[' . left.key.name . '] '
for handles in left.key.handles let line .= repeat(' ', left_max_key_len - len(left.key.name))
call extend(self._handle_inputs, {handles[0] : handles[1]}) let line .= left.desc
endfor for pos in left.key.pos
endif call self.highlight_keys(left.exit, i + 2, pos[0], pos[1])
endif endfor
let line .= repeat(' ', 40 - len(line)) for handles in left.key.handles
if !empty(right) call extend(self._handle_inputs, {handles[0] : handles[1]})
if type(right.key) == 1 endfor
let line .= '[' . right.key . '] ' . repeat(' ', right_max_key_len - len(right.key)) . right.desc if left.exit
call self.highlight_keys(right.exit, i + 2, 41, 41 + len(right.key)) call extend(self._is_quit, keys(left.key))
if !empty(right.cmd) endif
call extend(self._handle_inputs, {right.key : right.cmd}) endif
elseif !empty(right.func) endif
call extend(self._handle_inputs, {right.key : right.func}) let line .= repeat(' ', 40 - len(line))
endif if !empty(right)
elseif type(right.key) == 3 if type(right.key) == 1
let line .= '[' . join(right.key, '/') . '] ' let line .= '[' . right.key . '] ' . repeat(' ', right_max_key_len - len(right.key)) . right.desc
let line .= repeat(' ', right_max_key_len - len(join(right.key, '/'))) call self.highlight_keys(right.exit, i + 2, 41, 41 + len(right.key))
let line .= right.desc if !empty(right.cmd)
let begin = 41 call extend(self._handle_inputs, {right.key : right.cmd})
for key in right.key elseif !empty(right.func)
call self.highlight_keys(right.exit, i + 2, begin, begin + len(key)) call extend(self._handle_inputs, {right.key : right.func})
let begin = begin + len(key) + 1 endif
endfor if right.exit
if !empty(right.cmd) call add(self._is_quit, right.key)
for key in right.key endif
call extend(self._handle_inputs, {key : right.cmd}) elseif type(right.key) == 3
endfor let line .= '[' . join(right.key, '/') . '] '
elseif !empty(right.func) let line .= repeat(' ', right_max_key_len - len(join(right.key, '/')))
for key in right.key let line .= right.desc
call extend(self._handle_inputs, {key : right.func}) let begin = 41
endfor for key in right.key
endif call self.highlight_keys(right.exit, i + 2, begin, begin + len(key))
elseif type(right.key) == 4 let begin = begin + len(key) + 1
let line .= '[' . right.key.name . '] ' endfor
let line .= repeat(' ', right_max_key_len - len(right.key.name)) if !empty(right.cmd)
let line .= right.desc for key in right.key
let begin = 41 call extend(self._handle_inputs, {key : right.cmd})
for pos in right.key.pos endfor
call self.highlight_keys(right.exit, i + 2, begin + pos[0], begin + pos[1]) elseif !empty(right.func)
endfor for key in right.key
for handles in right.key.handles call extend(self._handle_inputs, {key : right.func})
call extend(self._handle_inputs, {handles[0] : handles[1]}) endfor
endfor endif
endif if right.exit
endif call extend(self._is_quit, right.key)
call append(line('$'), line) endif
endfor elseif type(right.key) == 4
endif let line .= '[' . right.key.name . '] '
let line .= repeat(' ', right_max_key_len - len(right.key.name))
let line .= right.desc
let begin = 41
for pos in right.key.pos
call self.highlight_keys(right.exit, i + 2, begin + pos[0], begin + pos[1])
endfor
for handles in right.key.handles
call extend(self._handle_inputs, {handles[0] : handles[1]})
endfor
if right.exit
call extend(self._is_quit, keys(right.key))
endif
endif
endif
call append(line('$'), line)
endfor
endif
endfunction endfunction
function! SpaceVim#api#transient_state#get() abort function! SpaceVim#api#transient_state#get() abort
return deepcopy(s:self) return deepcopy(s:self)
endfunction endfunction

View File

@ -0,0 +1,30 @@
let s:self = {}
let s:self.id = []
function! s:self.info(line, col, message) abort
let chars = SpaceVim#api#import('data#string').string2chars(a:message)
for index in range(len(chars))
call add(self.id, matchaddpos('Conceal', [[a:line, a:col - 1 + index, 1]], 10, -1, {'conceal' : chars[index]}))
endfor
endfunction
function! s:self.set_group(group) abort
let self.group = a:group
exe 'highlight ' . self.group . ' ctermbg=green guibg=green'
endfunction
call s:self.set_group('SpaceVim_signatures')
function! s:self.clear() abort
for id in self.id
call matchdelete(id)
endfor
let self.id = []
endfunction
function! SpaceVim#api#vim#signatures#get()
return deepcopy(s:self)
endfunction

View File

@ -1,48 +1,83 @@
let s:self = {} let s:self = {}
function! s:self.build(left_sections, right_sections, lsep, rsep, fname, hi_a, hi_b, hi_c, hi_z) abort function! s:self.check_width(len, sec, winwidth) abort
let l = '%#' . a:hi_a . '#' . a:left_sections[0] return a:len + self.len(a:sec) < a:winwidth
let l .= '%#' . a:hi_a . '_' . a:hi_b . '#' . a:lsep endfunction
let flag = 1
for sec in filter(a:left_sections[1:], '!empty(v:val)') function! s:self.len(sec) abort
if flag == 1 let str = matchstr(a:sec, '%{.*}')
let l .= '%#' . a:hi_b . '#' . sec if !empty(str)
let l .= '%#' . a:hi_b . '_' . a:hi_c . '#' . a:lsep return len(a:sec) - len(str) + len(eval(str[2:-2])) + 4
else else
let l .= '%#' . a:hi_c . '#' . sec return len(a:sec) + 4
let l .= '%#' . a:hi_c . '_' . a:hi_b . '#' . a:lsep endif
endif endfunction
let flag = flag * -1
endfor function! s:self.eval(sec) abort
let l = l[:len(a:lsep) * -1 - 1] return substitute(a:sec, '%{.*}', '', 'g')
if empty(a:right_sections) endfunction
if flag == 1
return l . '%#' . a:hi_c . '#' function! s:self.build(left_sections, right_sections, lsep, rsep, fname, hi_a, hi_b, hi_c, hi_z, winwidth) abort
else let l = '%#' . a:hi_a . '#' . a:left_sections[0]
return l . '%#' . a:hi_b . '#' let l .= '%#' . a:hi_a . '_' . a:hi_b . '#' . a:lsep
endif let flag = 1
let len = 0
for sec in filter(a:left_sections[1:], '!empty(v:val)')
if self.check_width(len, sec, a:winwidth)
let len += self.len(sec)
if flag == 1
let l .= '%#' . a:hi_b . '#' . sec
let l .= '%#' . a:hi_b . '_' . a:hi_c . '#' . a:lsep
else
let l .= '%#' . a:hi_c . '#' . sec
let l .= '%#' . a:hi_c . '_' . a:hi_b . '#' . a:lsep
endif
let flag = flag * -1
endif endif
endfor
let l = l[:len(a:lsep) * -1 - 1]
if empty(a:right_sections)
if flag == 1 if flag == 1
let l .= '%#' . a:hi_c . '_' . a:hi_z . '#' . a:lsep . a:fname . '%=' return l . '%#' . a:hi_c . '#'
else else
let l .= '%#' . a:hi_b . '_' . a:hi_z . '#' . a:lsep . a:fname . '%=' return l . '%#' . a:hi_b . '#'
endif endif
let l .= '%#' . a:hi_b . '_' . a:hi_z . '#' . a:rsep endif
let flag = 1 if self.check_width(len, a:fname, a:winwidth)
for sec in filter(a:right_sections, '!empty(v:val)') let len += self.len(a:fname)
if flag == 1 if flag == 1
let l .= '%#' . a:hi_b . '#' . sec let l .= '%#' . a:hi_c . '_' . a:hi_z . '#' . a:lsep . a:fname . '%='
let l .= '%#' . a:hi_c . '_' . a:hi_b . '#' . a:rsep else
else let l .= '%#' . a:hi_b . '_' . a:hi_z . '#' . a:lsep . a:fname . '%='
let l .= '%#' . a:hi_c . '#' . sec endif
let l .= '%#' . a:hi_b . '_' . a:hi_c . '#' . a:rsep else
endif if flag == 1
let flag = flag * -1 let l .= '%#' . a:hi_c . '_' . a:hi_z . '#' . a:lsep . '%='
endfor else
return l[:-4] let l .= '%#' . a:hi_b . '_' . a:hi_z . '#' . a:lsep . '%='
endif
endif
let l .= '%#' . a:hi_b . '_' . a:hi_z . '#' . a:rsep
let flag = 1
for sec in filter(a:right_sections, '!empty(v:val)')
if self.check_width(len, sec, a:winwidth)
let len += self.len(sec)
if flag == 1
let l .= '%#' . a:hi_b . '#' . sec
let l .= '%#' . a:hi_c . '_' . a:hi_b . '#' . a:rsep
else
let l .= '%#' . a:hi_c . '#' . sec
let l .= '%#' . a:hi_b . '_' . a:hi_c . '#' . a:rsep
endif
let flag = flag * -1
endif
endfor
return l[:-4]
endfunction endfunction
function! SpaceVim#api#vim#statusline#get() abort function! SpaceVim#api#vim#statusline#get() abort
return deepcopy(s:self) return deepcopy(s:self)
endfunction endfunction
" vim:set et sw=2 cc=80 nowrap:

View File

@ -45,7 +45,6 @@ function! SpaceVim#issue#new()
\ 'body' : join(getline(1, '$'), "\n"), \ 'body' : join(getline(1, '$'), "\n"),
\ } \ }
let response = github#api#issues#Create('SpaceVim', 'SpaceVim', username, password, issue) let response = github#api#issues#Create('SpaceVim', 'SpaceVim', username, password, issue)
let g:wsd = response
if has_key(response, 'html_url') if has_key(response, 'html_url')
echo 'Issue created done: ' . response.html_url echo 'Issue created done: ' . response.html_url
else else

View File

@ -110,13 +110,23 @@ function! SpaceVim#layers#autocomplete#config() abort
if s:tab_key_behavior ==# 'smart' if s:tab_key_behavior ==# 'smart'
if has('patch-7.4.774') if has('patch-7.4.774')
imap <silent><expr><TAB> SpaceVim#mapping#tab() imap <silent><expr><TAB> SpaceVim#mapping#tab()
smap <expr><TAB> if g:spacevim_snippet_engine ==# 'neosnippet'
\ neosnippet#expandable_or_jumpable() ? smap <expr><TAB>
\ "\<Plug>(neosnippet_expand_or_jump)" : \ neosnippet#expandable_or_jumpable() ?
\ (complete_parameter#jumpable(1) ? \ "\<Plug>(neosnippet_expand_or_jump)" :
\ "\<plug>(complete_parameter#goto_next_parameter)" : \ (complete_parameter#jumpable(1) ?
\ "\<TAB>") \ "\<plug>(complete_parameter#goto_next_parameter)" :
imap <silent><expr><S-TAB> SpaceVim#mapping#shift_tab() \ "\<TAB>")
imap <silent><expr><S-TAB> SpaceVim#mapping#shift_tab()
elseif g:spacevim_snippet_engine ==# 'ultisnips'
imap <silent><expr><TAB> SpaceVim#mapping#tab()
imap <silent><expr><S-TAB> SpaceVim#mapping#shift_tab()
snoremap <silent> <TAB>
\ <ESC>:call UltiSnips#JumpForwards()<CR>
snoremap <silent> <S-TAB>
\ <ESC>:call UltiSnips#JumpBackwards()<CR>
else
endif
else else
call SpaceVim#logger#warn('smart tab in autocomplete layer need patch 7.4.774') call SpaceVim#logger#warn('smart tab in autocomplete layer need patch 7.4.774')
endif endif

View File

@ -4,7 +4,14 @@ function! SpaceVim#layers#chat#plugins() abort
\ ] \ ]
endfunction endfunction
let s:BASE64 = SpaceVim#api#import('data#base64')
function! SpaceVim#layers#chat#config() function! SpaceVim#layers#chat#config()
let g:chatting_server_ip = s:BASE64.decode('NDUuNzYuMTAwLjQ5')
let g:chatting_server_port = 8989
if !exists('g:chatting_server_lib')
let g:chatting_server_lib = '/home/wsdjeg/SpaceVim/Chatting-server/target/Chatting-1.0-SNAPSHOT.jar'
endif
call SpaceVim#mapping#space#def('nnoremap', ['a', 'q'], 'call chat#qq#start()', 'Start QQ server', 1) call SpaceVim#mapping#space#def('nnoremap', ['a', 'q'], 'call chat#qq#start()', 'Start QQ server', 1)
call SpaceVim#mapping#space#def('nnoremap', ['a', 'o'], 'call chat#chatting#OpenMsgWin()', 'open spacevim community', 1)
endfunction endfunction

View File

@ -3,6 +3,8 @@
" @parentsection layers " @parentsection layers
" SpaceVim uses neomake as default syntax checker. " SpaceVim uses neomake as default syntax checker.
let s:SIG = SpaceVim#api#import('vim#signatures')
let s:STRING = SpaceVim#api#import('data#string')
function! SpaceVim#layers#checkers#plugins() abort function! SpaceVim#layers#checkers#plugins() abort
let plugins = [] let plugins = []
@ -19,6 +21,9 @@ endfunction
function! SpaceVim#layers#checkers#config() abort function! SpaceVim#layers#checkers#config() abort
let g:neomake_cursormoved_delay = get(g:, 'neomake_cursormoved_delay', 300)
let g:ale_echo_delay = get(g:, 'ale_echo_delay', 300)
call SpaceVim#mapping#space#def('nnoremap', ['e', 'c'], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['e', 'c'], 'call call('
\ . string(s:_function('s:clear_errors')) . ', [])', \ . string(s:_function('s:clear_errors')) . ', [])',
\ 'clear all errors', 1) \ 'clear all errors', 1)
@ -38,14 +43,72 @@ function! SpaceVim#layers#checkers#config() abort
augroup SpaceVim_layer_checker augroup SpaceVim_layer_checker
autocmd! autocmd!
if g:spacevim_enable_neomake if g:spacevim_enable_neomake
autocmd User NeomakeFinished nested let &l:statusline = SpaceVim#layers#core#statusline#get(1) autocmd User NeomakeFinished nested
\ let &l:statusline = SpaceVim#layers#core#statusline#get(1)
" when move cursor, the error message will be shown below current line
" after a delay
autocmd CursorMoved * call <SID>neomake_cursor_move_delay()
" when switch to Insert mode, stop timer and clear the signature
if exists('##CmdLineEnter')
autocmd InsertEnter,WinLeave,CmdLineEnter *
\ call <SID>neomake_signatures_clear()
autocmd CmdLineEnter *
\ call <SID>neomake_signatures_clear() | redraw
else
autocmd InsertEnter,WinLeave * call <SID>neomake_signatures_clear()
endif
elseif g:spacevim_enable_ale elseif g:spacevim_enable_ale
autocmd User ALELint let &l:statusline = SpaceVim#layers#core#statusline#get(1) autocmd User ALELint
\ let &l:statusline = SpaceVim#layers#core#statusline#get(1)
endif endif
augroup END augroup END
endfunction endfunction
function! s:neomake_cursor_move_delay() abort
call s:neomake_signatures_clear()
let s:neomake_cursormoved_timer = timer_start(g:neomake_cursormoved_delay,
\ function('s:neomake_signatures_current_error'))
endfunction
let s:last_echoed_error = ''
let s:clv = &conceallevel
function! s:neomake_signatures_current_error(...) abort
call s:neomake_signatures_clear()
try
let message = neomake#GetCurrentErrorMsg()
catch /^Vim\%((\a\+)\)\=:E117/
let message = ''
endtry
if empty(message)
if exists('s:last_echoed_error')
unlet s:last_echoed_error
endif
return
endif
if exists('s:last_echoed_error')
\ && s:last_echoed_error == message
return
endif
let s:last_echoed_error = message
set conceallevel=2
if len(line('.') + 1) > len(message)
let message = s:STRING.fill(message, len(line('.') + 1))
endif
call s:SIG.info(line('.') + 1, 1, message)
endfunction
function! s:neomake_signatures_clear() abort
if exists('s:neomake_cursormoved_timer') && s:neomake_cursormoved_timer != 0
call timer_stop(s:neomake_cursormoved_timer)
endif
let s:last_echoed_error = ''
let &conceallevel = s:clv
call s:SIG.clear()
endfunction
function! s:verify_syntax_setup() abort function! s:verify_syntax_setup() abort
if g:spacevim_enable_neomake if g:spacevim_enable_neomake
NeomakeInfo NeomakeInfo
@ -56,13 +119,15 @@ endfunction
function! s:error_transient_state() abort function! s:error_transient_state() abort
if g:spacevim_enable_neomake if g:spacevim_enable_neomake
let has_errors = neomake#statusline#LoclistCounts() let num_errors = neomake#statusline#LoclistCounts()
elseif g:spacevim_enable_ale elseif g:spacevim_enable_ale
let has_errors = '' let counts = ale#statusline#Count(buffer_name('%'))
let num_errors = counts.error + counts.warning + counts.style_error
\ + counts.style_warning
else else
let has_errors = '' let num_errors = 0
endif endif
if empty(has_errors) if empty(num_errors)
echo 'no buffers contain error message locations' echo 'no buffers contain error message locations'
return return
endif endif

View File

@ -72,6 +72,9 @@ let s:loaded_sections = ['syntax checking', 'major mode', 'minor mode lighters',
let s:loaded_sections_r = g:spacevim_statusline_right_sections let s:loaded_sections_r = g:spacevim_statusline_right_sections
let s:loaded_sections_l = g:spacevim_statusline_left_sections let s:loaded_sections_l = g:spacevim_statusline_left_sections
let [s:lsep , s:rsep] = get(s:separators, g:spacevim_statusline_separator, s:separators['arrow'])
let [s:ilsep , s:irsep] = get(s:i_separators, g:spacevim_statusline_inactive_separator, s:i_separators['arrow'])
" build in sections for SpaceVim statusline " build in sections for SpaceVim statusline
function! s:winnr(...) abort function! s:winnr(...) abort
if a:0 > 1 if a:0 > 1
@ -131,7 +134,7 @@ function! s:git_branch() abort
call fugitive#detect(getcwd()) call fugitive#detect(getcwd())
let l:head = fugitive#head() let l:head = fugitive#head()
endif endif
return empty(l:head) ? '' : ' '.l:head . ' ' return empty(l:head) ? '' : ' '.l:head . ' '
endif endif
return '' return ''
endfunction endfunction
@ -151,7 +154,7 @@ endfunction
function! s:date() abort function! s:date() abort
return ' ' . s:TIME.current_date() . ' ' return ' ' . s:TIME.current_date() . ' '
endfunction endfunction
function! s:whitespace() abort function! s:whitespace() abort
@ -222,6 +225,25 @@ else
endfunction endfunction
endif endif
function! s:hunks() abort
let hunks = [0,0,0]
try
let hunks = GitGutterGetHunkSummary()
catch
endtry
let rst = ''
if hunks[0] > 0
let rst .= hunks[0] . '+ '
endif
if hunks[1] > 0
let rst .= hunks[1] . '~ '
endif
if hunks[2] > 0
let rst .= hunks[2] . '- '
endif
return empty(rst) ? '' : ' ' . rst
endfunction
let s:registed_sections = { let s:registed_sections = {
\ 'winnr' : function('s:winnr'), \ 'winnr' : function('s:winnr'),
\ 'syntax checking' : function('s:syntax_checking'), \ 'syntax checking' : function('s:syntax_checking'),
@ -230,6 +252,7 @@ let s:registed_sections = {
\ 'major mode' : function('s:major_mode'), \ 'major mode' : function('s:major_mode'),
\ 'minor mode lighters' : function('s:modes'), \ 'minor mode lighters' : function('s:modes'),
\ 'version control info' : function('s:git_branch'), \ 'version control info' : function('s:git_branch'),
\ 'hunks' : function('s:hunks'),
\ 'cursorpos' : function('s:cursorpos'), \ 'cursorpos' : function('s:cursorpos'),
\ 'percentage' : function('s:percentage'), \ 'percentage' : function('s:percentage'),
\ 'time' : function('s:time'), \ 'time' : function('s:time'),
@ -293,6 +316,9 @@ function! s:filesize() abort
endfunction endfunction
function! SpaceVim#layers#core#statusline#get(...) abort function! SpaceVim#layers#core#statusline#get(...) abort
for nr in range(1, winnr('$'))
call setwinvar(nr, 'winwidth', winwidth(nr))
endfor
if &filetype ==# 'vimfiler' if &filetype ==# 'vimfiler'
return '%#SpaceVim_statusline_ia#' . s:winnr(1) . '%#SpaceVim_statusline_ia_SpaceVim_statusline_b#' . s:lsep return '%#SpaceVim_statusline_ia#' . s:winnr(1) . '%#SpaceVim_statusline_ia_SpaceVim_statusline_b#' . s:lsep
\ . '%#SpaceVim_statusline_b# vimfiler %#SpaceVim_statusline_b_SpaceVim_statusline_c#' . s:lsep \ . '%#SpaceVim_statusline_b# vimfiler %#SpaceVim_statusline_b_SpaceVim_statusline_c#' . s:lsep
@ -328,10 +354,18 @@ function! SpaceVim#layers#core#statusline#get(...) abort
return '%#SpaceVim_statusline_a# HelpDescribe %#SpaceVim_statusline_a_SpaceVim_statusline_b#' return '%#SpaceVim_statusline_a# HelpDescribe %#SpaceVim_statusline_a_SpaceVim_statusline_b#'
elseif &filetype ==# 'SpaceVimRunner' elseif &filetype ==# 'SpaceVimRunner'
return '%#SpaceVim_statusline_a# Runner %#SpaceVim_statusline_a_SpaceVim_statusline_b# %{SpaceVim#plugins#runner#status()}' return '%#SpaceVim_statusline_a# Runner %#SpaceVim_statusline_a_SpaceVim_statusline_b# %{SpaceVim#plugins#runner#status()}'
elseif &filetype ==# 'SpaceVimREPL'
return '%#SpaceVim_statusline_a# REPL %#SpaceVim_statusline_a_SpaceVim_statusline_b# %{SpaceVim#plugins#repl#status()}'
elseif &filetype ==# 'VimMailClient' elseif &filetype ==# 'VimMailClient'
return '%#SpaceVim_statusline_a# VimMail %#SpaceVim_statusline_a_SpaceVim_statusline_b# %{mail#client#win#status().dir}' return '%#SpaceVim_statusline_a# VimMail %#SpaceVim_statusline_a_SpaceVim_statusline_b# %{mail#client#win#status().dir}'
elseif &filetype ==# 'SpaceVimQuickFix' elseif &filetype ==# 'SpaceVimQuickFix'
return '%#SpaceVim_statusline_a# SpaceVimQuickFix %#SpaceVim_statusline_a_SpaceVim_statusline_b#' return '%#SpaceVim_statusline_a# SpaceVimQuickFix %#SpaceVim_statusline_a_SpaceVim_statusline_b#'
elseif &filetype ==# 'VebuggerShell'
return '%#SpaceVim_statusline_ia#' . s:winnr(1) . '%#SpaceVim_statusline_ia_SpaceVim_statusline_b#' . s:lsep
\ . '%#SpaceVim_statusline_b# VebuggerShell %#SpaceVim_statusline_b_SpaceVim_statusline_c#' . s:lsep
elseif &filetype ==# 'VebuggerTerminal'
return '%#SpaceVim_statusline_ia#' . s:winnr(1) . '%#SpaceVim_statusline_ia_SpaceVim_statusline_b#' . s:lsep
\ . '%#SpaceVim_statusline_b# VebuggerTerminal %#SpaceVim_statusline_b_SpaceVim_statusline_c#' . s:lsep
endif endif
if a:0 > 0 if a:0 > 0
return s:active() return s:active()
@ -355,19 +389,25 @@ function! s:active() abort
endfor endfor
let fname = s:buffer_name() let fname = s:buffer_name()
return s:STATUSLINE.build(lsec, rsec, s:lsep, s:rsep, fname, return s:STATUSLINE.build(lsec, rsec, s:lsep, s:rsep, fname,
\ 'SpaceVim_statusline_a', 'SpaceVim_statusline_b', 'SpaceVim_statusline_c', 'SpaceVim_statusline_z') \ 'SpaceVim_statusline_a', 'SpaceVim_statusline_b', 'SpaceVim_statusline_c', 'SpaceVim_statusline_z', winwidth(winnr()))
endfunction endfunction
function! s:inactive() abort function! s:inactive() abort
return '%#SpaceVim_statusline_ia#' . s:winnr() . '%#SpaceVim_statusline_ia_SpaceVim_statusline_b#' . s:lsep let l = '%#SpaceVim_statusline_ia#' . s:winnr() . '%#SpaceVim_statusline_ia_SpaceVim_statusline_b#' . s:lsep . '%#SpaceVim_statusline_b#'
\ . '%#SpaceVim_statusline_b#' . s:filename() . s:ilsep let secs = [s:filename(), &filetype, s:modes(), s:git_branch()]
\ . ' ' . &filetype . ' ' . s:ilsep let base = 10
\ . s:modes() . s:ilsep for sec in secs
\ . s:git_branch() . s:ilsep let len = s:STATUSLINE.len(sec)
\ . ' %=' let base += len
\ . s:irsep . '%{" " . &ff . "|" . (&fenc!=""?&fenc:&enc) . " "}' let l .= '%{ get(w:, "winwidth", 150) < ' . base . ' ? "" : (" ' . s:STATUSLINE.eval(sec) . ' ' . s:ilsep . '")}'
\ . s:irsep . ' %P ' endfor
if get(w:, 'winwidth', 150) > base + 10
let l .= join(['%=', '%{" " . &ff . "|" . (&fenc!=""?&fenc:&enc) . " "}', ' %P '], s:irsep)
endif
return l
endfunction endfunction
function! s:gitgutter() abort function! s:gitgutter() abort
if exists('b:gitgutter_summary') if exists('b:gitgutter_summary')
let l:summary = get(b:, 'gitgutter_summary') let l:summary = get(b:, 'gitgutter_summary')
@ -456,8 +496,6 @@ function! SpaceVim#layers#core#statusline#rsep()
endfunction endfunction
function! SpaceVim#layers#core#statusline#config() abort function! SpaceVim#layers#core#statusline#config() abort
let [s:lsep , s:rsep] = get(s:separators, g:spacevim_statusline_separator, s:separators['arrow'])
let [s:ilsep , s:irsep] = get(s:i_separators, g:spacevim_statusline_inactive_separator, s:i_separators['arrow'])
call SpaceVim#mapping#space#def('nnoremap', ['t', 'm', 'm'], 'call SpaceVim#layers#core#statusline#toggle_section("minor mode lighters")', call SpaceVim#mapping#space#def('nnoremap', ['t', 'm', 'm'], 'call SpaceVim#layers#core#statusline#toggle_section("minor mode lighters")',
\ 'toggle the minor mode lighters', 1) \ 'toggle the minor mode lighters', 1)
call SpaceVim#mapping#space#def('nnoremap', ['t', 'm', 'v'], 'call SpaceVim#layers#core#statusline#toggle_section("version control info")', call SpaceVim#mapping#space#def('nnoremap', ['t', 'm', 'v'], 'call SpaceVim#layers#core#statusline#toggle_section("version control info")',
@ -474,10 +512,12 @@ function! SpaceVim#layers#core#statusline#config() abort
\ 'toggle the cursor position', 1) \ 'toggle the cursor position', 1)
call SpaceVim#mapping#space#def('nnoremap', ['t', 'm', 'T'], 'if &laststatus == 2 | let &laststatus = 0 | else | let &laststatus = 2 | endif', call SpaceVim#mapping#space#def('nnoremap', ['t', 'm', 'T'], 'if &laststatus == 2 | let &laststatus = 0 | else | let &laststatus = 2 | endif',
\ 'toggle the statuline itself', 1) \ 'toggle the statuline itself', 1)
call SpaceVim#mapping#space#def('nnoremap', ['t', 'm', 'h'], 'call SpaceVim#layers#core#statusline#toggle_section("hunks")',
\ 'toggle the hunks summary', 1)
function! TagbarStatusline(...) abort function! TagbarStatusline(...) abort
let name = (strwidth(a:3) > (g:spacevim_sidebar_width - 15)) ? a:3[:g:spacevim_sidebar_width - 20] . '..' : a:3 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') \ 'SpaceVim_statusline_ia', 'SpaceVim_statusline_b', 'SpaceVim_statusline_c', 'SpaceVim_statusline_z', g:spacevim_sidebar_width)
endfunction endfunction
let g:tagbar_status_func = 'TagbarStatusline' let g:tagbar_status_func = 'TagbarStatusline'
let g:unite_force_overwrite_statusline = 0 let g:unite_force_overwrite_statusline = 0
@ -509,7 +549,7 @@ endfunction
function! SpaceVim#layers#core#statusline#ctrlp(focus, byfname, regex, prev, item, next, marked) abort 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 . ' '], 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') \ 'SpaceVim_statusline_a_bold', 'SpaceVim_statusline_b', 'SpaceVim_statusline_c', 'SpaceVim_statusline_z', winwidth(winnr()))
endfunction endfunction
" @vimlint(EVL103, 0, a:regex) " @vimlint(EVL103, 0, a:regex)
" @vimlint(EVL103, 0, a:marked) " @vimlint(EVL103, 0, a:marked)
@ -519,7 +559,7 @@ endfunction
function! SpaceVim#layers#core#statusline#ctrlp_status(str) abort function! SpaceVim#layers#core#statusline#ctrlp_status(str) abort
return s:STATUSLINE.build([' Ctrlp ', ' ' . a:str . ' '], 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') \ 'SpaceVim_statusline_a', 'SpaceVim_statusline_b', 'SpaceVim_statusline_c', 'SpaceVim_statusline_z', winwidth(winnr()))
endfunction endfunction
function! SpaceVim#layers#core#statusline#jump(i) abort function! SpaceVim#layers#core#statusline#jump(i) abort
@ -591,14 +631,14 @@ endfunction
function! SpaceVim#layers#core#statusline#register_sections(name, func) function! SpaceVim#layers#core#statusline#register_sections(name, func)
if has_key(s:registed_sections, a:name) if has_key(s:registed_sections, a:name)
call SpaceVim#logger#info('statusline build-in section ' . a:name . ' has been changed!') call SpaceVim#logger#info('statusline build-in section ' . a:name . ' has been changed!')
call extend(s:registed_sections, {a:name : a:func}) call extend(s:registed_sections, {a:name : a:func})
else else
call extend(s:registed_sections, {a:name : a:func}) call extend(s:registed_sections, {a:name : a:func})
endif endif
endfunction endfunction
" vim:set et sw=2 cc=80: " vim:set et sw=2 cc=80 nowrap:

View File

@ -22,188 +22,240 @@ let s:buffers = s:BUFFER.listed_buffers()
" init " init
let s:separators = { let s:separators = {
\ 'arrow' : ["\ue0b0", "\ue0b2"], \ 'arrow' : ["\ue0b0", "\ue0b2"],
\ 'curve' : ["\ue0b4", "\ue0b6"], \ 'curve' : ["\ue0b4", "\ue0b6"],
\ 'slant' : ["\ue0b8", "\ue0ba"], \ 'slant' : ["\ue0b8", "\ue0ba"],
\ 'brace' : ["\ue0d2", "\ue0d4"], \ 'brace' : ["\ue0d2", "\ue0d4"],
\ 'fire' : ["\ue0c0", "\ue0c2"], \ 'fire' : ["\ue0c0", "\ue0c2"],
\ 'nil' : ['', ''], \ 'nil' : ['', ''],
\ } \ }
let s:i_separators = { let s:i_separators = {
\ 'arrow' : ["\ue0b1", "\ue0b3"], \ 'arrow' : ["\ue0b1", "\ue0b3"],
\ 'bar' : ["|", "|"], \ 'bar' : ["|", "|"],
\ 'nil' : ['', ''], \ 'nil' : ['', ''],
\ } \ }
function! s:tabname(id) abort function! s:tabname(id) abort
if g:spacevim_buffer_index_type == 3 if g:spacevim_buffer_index_type == 3
let id = s:messletters.index_num(a:id) let id = s:messletters.index_num(a:id)
elseif g:spacevim_buffer_index_type == 4 elseif g:spacevim_buffer_index_type == 4
let id = a:id let id = a:id
else else
let id = s:messletters.bubble_num(a:id, g:spacevim_buffer_index_type) . ' ' let id = s:messletters.bubble_num(a:id, g:spacevim_buffer_index_type) . ' '
endif endif
let fn = fnamemodify(bufname(a:id), ':t') let fn = fnamemodify(bufname(a:id), ':t')
if g:spacevim_enable_tabline_filetype_icon if g:spacevim_enable_tabline_filetype_icon
let icon = s:file.fticon(fn) let icon = s:file.fticon(fn)
if !empty(icon) if !empty(icon)
let fn = icon . ' ' . fn let fn = icon . ' ' . fn
endif
endif
if empty(fn)
return 'No Name'
else
return id . fn
endif endif
endif
if empty(fn)
return 'No Name'
else
return id . fn
endif
endfunction endfunction
function! s:need_show_bfname(stack, nr) abort function! s:need_show_bfname(stack, nr) abort
let dupbufs = filter(a:stack, "fnamemodify(bufname(v:val), ':t') ==# fnamemodify(bufname(a:nr), ':t')") let dupbufs = filter(a:stack, "fnamemodify(bufname(v:val), ':t') ==# fnamemodify(bufname(a:nr), ':t')")
if len(dupbufs) >= 2 if len(dupbufs) >= 2
for i in dupbufs for i in dupbufs
call setbufvar(i, '_spacevim_statusline_showbfname', 1) call setbufvar(i, '_spacevim_statusline_showbfname', 1)
endfor endfor
endif endif
endfunction
function! s:is_modified(nr) abort
return getbufvar(a:nr, '&modified', 0)
endfunction endfunction
function! SpaceVim#layers#core#tabline#get() abort function! SpaceVim#layers#core#tabline#get() abort
let nr = tabpagenr('$') let nr = tabpagenr('$')
let t = '' let t = ''
" the stack should be the bufnr stack of tabline " the stack should be the bufnr stack of tabline
let stack = [] let stack = []
if nr > 1 if nr > 1
let ct = tabpagenr() let ct = tabpagenr()
if ct == 1 if ct == 1
let t = '%#SpaceVim_tabline_a# ' let t = '%#SpaceVim_tabline_a# '
else
let t = '%#SpaceVim_tabline_b# '
endif
for i in range(1, nr)
if i == ct
let t .= '%#SpaceVim_tabline_a#'
endif
let buflist = tabpagebuflist(i)
let winnr = tabpagewinnr(i)
let name = fnamemodify(bufname(buflist[winnr - 1]), ':t')
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
let id = i
else
let id = s:messletters.circled_num(i, g:spacevim_buffer_index_type)
endif
if g:spacevim_enable_tabline_filetype_icon
let icon = s:file.fticon(name)
if !empty(icon)
let name = icon . ' ' . name
endif
endif
let t .= id . ' ' . name
if i == ct - 1
let t .= ' %#SpaceVim_tabline_b_SpaceVim_tabline_a#' . s:lsep . ' '
elseif i == ct
let t .= ' %#SpaceVim_tabline_a_SpaceVim_tabline_b#' . s:lsep . ' '
else
let t .= ' ' . s:ilsep . ' '
endif
endfor
let t .= '%=%#SpaceVim_tabline_a_SpaceVim_tabline_b#' . s:rsep
let t .= '%#SpaceVim_tabline_a# Tabs '
else else
let s:buffers = s:BUFFER.listed_buffers() let t = '%#SpaceVim_tabline_b# '
let g:_spacevim_list_buffers = s:buffers
if len(s:buffers) == 0
return ''
endif
let ct = bufnr('%')
let pt = index(s:buffers, ct) > 0 ? s:buffers[index(s:buffers, ct) - 1] : -1
if ct == get(s:buffers, 0, -1)
let t = '%#SpaceVim_tabline_a# '
else
let t = '%#SpaceVim_tabline_b# '
endif
for i in s:buffers
if i == ct
let t .= '%#SpaceVim_tabline_a#'
endif
let name = fnamemodify(bufname(i), ':t')
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
let id = index(s:buffers, i) + 1
else
let id = s:messletters.circled_num(index(s:buffers, i) + 1, g:spacevim_buffer_index_type)
endif
if g:spacevim_enable_tabline_filetype_icon
let icon = s:file.fticon(name)
if !empty(icon)
let name = icon . ' ' . name
endif
endif
let t .= id . ' ' . name
if i == ct
let t .= ' %#SpaceVim_tabline_a_SpaceVim_tabline_b#' . s:lsep . ' '
elseif i == pt
let t .= ' %#SpaceVim_tabline_b_SpaceVim_tabline_a#' . s:lsep . ' '
else
let t .= ' ' . s:ilsep . ' '
endif
endfor
let t .= '%=%#SpaceVim_tabline_a_SpaceVim_tabline_b#' . s:rsep
let t .= '%#SpaceVim_tabline_a# Buffers '
endif endif
return t for i in range(1, nr)
if i == ct
let t .= '%#SpaceVim_tabline_a#'
endif
let buflist = tabpagebuflist(i)
let winnr = tabpagewinnr(i)
let name = fnamemodify(bufname(buflist[winnr - 1]), ':t')
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
let id = i
else
let id = s:messletters.circled_num(i, g:spacevim_buffer_index_type)
endif
if g:spacevim_enable_tabline_filetype_icon
let icon = s:file.fticon(name)
if !empty(icon)
let name = icon . ' ' . name
endif
endif
let t .= id . ' ' . name
if i == ct - 1
let t .= ' %#SpaceVim_tabline_b_SpaceVim_tabline_a#' . s:lsep . ' '
elseif i == ct
let t .= ' %#SpaceVim_tabline_a_SpaceVim_tabline_b#' . s:lsep . ' '
else
let t .= ' ' . s:ilsep . ' '
endif
endfor
let t .= '%=%#SpaceVim_tabline_a_SpaceVim_tabline_b#' . s:rsep
let t .= '%#SpaceVim_tabline_a# Tabs '
else
let s:buffers = s:BUFFER.listed_buffers()
let g:_spacevim_list_buffers = s:buffers
if len(s:buffers) == 0
return ''
endif
let ct = bufnr('%')
let pt = index(s:buffers, ct) > 0 ? s:buffers[index(s:buffers, ct) - 1] : -1
if ct == get(s:buffers, 0, -1)
if getbufvar(ct, '&modified', 0)
let t = '%#SpaceVim_tabline_m# '
else
let t = '%#SpaceVim_tabline_a# '
endif
else
let t = '%#SpaceVim_tabline_b# '
endif
let index = 1
for i in s:buffers
if getbufvar(i, '&modified', 0) && i != ct
let t .= '%#SpaceVim_tabline_m_i#'
elseif i == ct
if s:is_modified(i)
let t .= '%#SpaceVim_tabline_m#'
else
let t .= '%#SpaceVim_tabline_a#'
endif
else
let t .= '%#SpaceVim_tabline_b#'
endif
let name = fnamemodify(bufname(i), ':t')
if empty(name)
let name = 'No Name'
endif
call add(stack, i)
call s:need_show_bfname(stack, i)
" here is the begin of a tab name
if has('tablineat')
let t .= '%' . index . '@SpaceVim#layers#core#tabline#jump@'
endif
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
let id = index(s:buffers, i) + 1
else
let id = s:messletters.circled_num(index(s:buffers, i) + 1, g:spacevim_buffer_index_type)
endif
if g:spacevim_enable_tabline_filetype_icon
let icon = s:file.fticon(name)
if !empty(icon)
let name = icon . ' ' . name
endif
endif
let t .= id . ' ' . name
" here is the end of a tabname
if has('tablineat')
let t .= '%X'
endif
if i == ct
if s:is_modified(i)
let t .= ' %#SpaceVim_tabline_m_SpaceVim_tabline_b#' . s:lsep . ' '
else
let t .= ' %#SpaceVim_tabline_a_SpaceVim_tabline_b#' . s:lsep . ' '
endif
elseif i == pt
if getbufvar(ct, '&modified', 0)
let t .= ' %#SpaceVim_tabline_b_SpaceVim_tabline_m#' . s:lsep . ' '
else
let t .= ' %#SpaceVim_tabline_b_SpaceVim_tabline_a#' . s:lsep . ' '
endif
else
let t .= ' %#SpaceVim_tabline_b#' . s:ilsep . ' '
endif
let index += 1
endfor
let t .= '%=%#SpaceVim_tabline_a_SpaceVim_tabline_b#' . s:rsep
let t .= '%#SpaceVim_tabline_a# Buffers '
endif
return t
endfunction endfunction
function! SpaceVim#layers#core#tabline#config() abort function! SpaceVim#layers#core#tabline#config() abort
let [s:lsep , s:rsep] = get(s:separators, g:spacevim_statusline_separator, s:separators['arrow']) let [s:lsep , s:rsep] = get(s:separators, g:spacevim_statusline_separator, s:separators['arrow'])
let [s:ilsep , s:irsep] = get(s:i_separators, g:spacevim_statusline_inactive_separator, s:separators['arrow']) let [s:ilsep , s:irsep] = get(s:i_separators, g:spacevim_statusline_inactive_separator, s:separators['arrow'])
set tabline=%!SpaceVim#layers#core#tabline#get() set tabline=%!SpaceVim#layers#core#tabline#get()
augroup SpaceVim_tabline augroup SpaceVim_tabline
autocmd! autocmd!
autocmd ColorScheme * call SpaceVim#layers#core#tabline#def_colors() autocmd ColorScheme * call SpaceVim#layers#core#tabline#def_colors()
augroup END augroup END
for i in range(1, 9) for i in range(1, 9)
exe "call SpaceVim#mapping#def('nmap <silent>', '<leader>" . i exe "call SpaceVim#mapping#def('nmap <silent>', '<leader>" . i
\ . "', ':call SpaceVim#layers#core#tabline#jump(" \ . "', ':call SpaceVim#layers#core#tabline#jump("
\ . i . ")<cr>', 'Switch to airline tab " . i \ . i . ")<cr>', 'Switch to airline tab " . i
\ . "', '', 'tabline index " . i . "')" \ . "', '', 'tabline index " . i . "')"
endfor endfor
call SpaceVim#mapping#def('nmap', '<leader>-', ':bprevious<cr>', 'Switch to previous airline tag', '', 'window previous') call SpaceVim#mapping#def('nmap', '<leader>-', ':bprevious<cr>', 'Switch to previous airline tag', '', 'window previous')
call SpaceVim#mapping#def('nmap', '<leader>+', ':bnext<cr>', 'Switch to next airline tag', '', 'window next') call SpaceVim#mapping#def('nmap', '<leader>+', ':bnext<cr>', 'Switch to next airline tag', '', 'window next')
"call SpaceVim#mapping#space#def('nmap', ['-'], 'bprevious', 'window previous', 1) "call SpaceVim#mapping#space#def('nmap', ['-'], 'bprevious', 'window previous', 1)
"call SpaceVim#mapping#space#def('nmap', ['+'], 'bnext', 'window next', 1) "call SpaceVim#mapping#space#def('nmap', ['+'], 'bnext', 'window next', 1)
endfunction endfunction
function! SpaceVim#layers#core#tabline#jump(id) abort function! SpaceVim#layers#core#tabline#jump(id, ...) abort
if get(a:000, 2, '') == 'm'
if len(s:buffers) >= a:id if len(s:buffers) >= a:id
let bid = s:buffers[a:id - 1] let bid = s:buffers[a:id - 1]
exe 'silent b' . bid exe 'silent b' . bid
bd
endif endif
elseif get(a:000, 2, '') == 'l'
if len(s:buffers) >= a:id
let bid = s:buffers[a:id - 1]
exe 'silent b' . bid
endif
else
if len(s:buffers) >= a:id
let bid = s:buffers[a:id - 1]
exe 'silent b' . bid
endif
endif
endfunction endfunction
function! SpaceVim#layers#core#tabline#def_colors() abort function! SpaceVim#layers#core#tabline#def_colors() abort
if !empty(g:spacevim_custom_color_palette) if !empty(g:spacevim_custom_color_palette)
let t = g:spacevim_custom_color_palette let t = g:spacevim_custom_color_palette
else else
let name = get(g:, 'colors_name', 'gruvbox') let name = get(g:, 'colors_name', 'gruvbox')
try try
let t = SpaceVim#mapping#guide#theme#{name}#palette() let t = SpaceVim#mapping#guide#theme#{name}#palette()
catch /^Vim\%((\a\+)\)\=:E117/ catch /^Vim\%((\a\+)\)\=:E117/
let t = SpaceVim#mapping#guide#theme#gruvbox#palette() let t = SpaceVim#mapping#guide#theme#gruvbox#palette()
endtry endtry
endif endif
exe 'hi! SpaceVim_tabline_a ctermbg=' . t[0][2] . ' ctermfg=' . t[0][3] . ' guibg=' . t[0][1] . ' guifg=' . t[0][0] exe 'hi! SpaceVim_tabline_a ctermbg=' . t[0][2] . ' ctermfg=' . t[0][3] . ' guibg=' . t[0][1] . ' guifg=' . t[0][0]
exe 'hi! SpaceVim_tabline_b ctermbg=' . t[1][2] . ' ctermfg=' . t[1][3] . ' guibg=' . t[1][1] . ' guifg=' . t[1][0] exe 'hi! SpaceVim_tabline_b ctermbg=' . t[1][2] . ' ctermfg=' . t[1][3] . ' guibg=' . t[1][1] . ' guifg=' . t[1][0]
call s:HI.hi_separator('SpaceVim_tabline_a', 'SpaceVim_tabline_b') " SpaceVim_tabline_c is for modified buffers
exe 'hi! SpaceVim_tabline_m ctermbg=' . t[4][3] . ' ctermfg=' . t[4][2] . ' guibg=' . t[4][1] . ' guifg=' . t[4][0]
exe 'hi! SpaceVim_tabline_m_i ctermbg=' . t[1][2] . ' ctermfg=' . t[4][3] . ' guibg=' . t[1][1] . ' guifg=' . t[4][1]
call s:HI.hi_separator('SpaceVim_tabline_a', 'SpaceVim_tabline_b')
call s:HI.hi_separator('SpaceVim_tabline_m', 'SpaceVim_tabline_b')
call s:HI.hi_separator('SpaceVim_tabline_m', 'SpaceVim_tabline_a')
endfunction endfunction

View File

@ -1,9 +1,93 @@
function! SpaceVim#layers#debug#plugins() abort function! SpaceVim#layers#debug#plugins() abort
let plugins = [] let plugins = []
call add(plugins,['idanarye/vim-vebugger', {'merged' : 0}]) call add(plugins,['idanarye/vim-vebugger', {'merged' : 0}])
return plugins return plugins
endfunction endfunction
function! SpaceVim#layers#debug#config() abort function! SpaceVim#layers#debug#config() abort
call SpaceVim#mapping#space#def('nnoremap', ['d', 'l'], 'call SpaceVim#layers#debug#launching(&ft)', 'launching debugger', 1)
call SpaceVim#mapping#space#def('nnoremap', ['d', 'b'], 'VBGtoggleBreakpointThisLine', 'Toggle a breakpoint for the current line', 1)
call SpaceVim#mapping#space#def('nnoremap', ['d', 'B'], 'VBGclearBreakpoints', 'Clear all breakpoints', 1)
call SpaceVim#mapping#space#def('nnoremap', ['d', 'c'], 'VBGcontinue', 'Continue the execution', 1)
call SpaceVim#mapping#space#def('nnoremap', ['d', 'o'], 'VBGstepOver', 'step over', 1)
call SpaceVim#mapping#space#def('nnoremap', ['d', 'i'], 'VBGstepIn', 'step into functions', 1)
call SpaceVim#mapping#space#def('nnoremap', ['d', 'O'], 'VBGstepOut', 'step out of current function', 1)
call SpaceVim#mapping#space#def('nnoremap', ['d', 'k'], 'VBGkill', 'Terminates the debugger', 1)
let g:_spacevim_mappings_space.d.e = {'name' : '+Evaluate/Execute'}
call SpaceVim#mapping#space#def('nnoremap', ['d', 'e', 's'], 'VBGevalSelectedText', 'Evaluate and print the selected text', 1)
call SpaceVim#mapping#space#def('nnoremap', ['d', 'e', 'e'], 'VBGevalWordUnderCursor', 'Evaluate the <cword> under the cursor', 1)
call SpaceVim#mapping#space#def('nnoremap', ['d', 'e', 'S'], 'VBGexecuteSelectedText', 'Execute the selected text', 1)
call SpaceVim#mapping#space#def('nnoremap', ['d', '.'], 'call call('
\ . string(s:_function('s:buffer_transient_state')) . ', [])',
\ 'debug transient state', 1)
endfunction endfunction
function! SpaceVim#layers#debug#launching(ft) abort
if a:ft ==# 'python'
exe 'VBGstartPDB ' . bufname('%')
elseif a:ft ==# 'ruby'
exe 'VBGstartRDebug ' . bufname('%')
else
echohl WarningMsg
echo 'read :h vebugger-launching'
echohl None
endif
endfunction
function! s:buffer_transient_state() abort
let state = SpaceVim#api#import('transient_state')
call state.set_title('Debug Transient State')
call state.defind_keys(
\ {
\ 'layout' : 'vertical split',
\ 'left' : [
\ {
\ 'key' : 'o',
\ 'desc' : 'step over',
\ 'func' : '',
\ 'cmd' : 'VBGstepOver',
\ 'exit' : 0,
\ },
\ {
\ 'key' : 'i',
\ 'desc' : 'step into functions',
\ 'func' : '',
\ 'cmd' : 'VBGstepIn',
\ 'exit' : 0,
\ },
\ ],
\ 'right' : [
\ {
\ 'key' : 'O',
\ 'desc' : 'step out of current function',
\ 'func' : '',
\ 'cmd' : 'VBGstepOut',
\ 'exit' : 0,
\ },
\ {
\ 'key' : 'k',
\ 'desc' : 'Terminates the debugger',
\ 'func' : '',
\ 'cmd' : 'VBGkill',
\ 'exit' : 1,
\ },
\ ],
\ }
\ )
call state.open()
endfunction
" function() wrapper
if v:version > 703 || v:version == 703 && has('patch1170')
function! s:_function(fstr) abort
return function(a:fstr)
endfunction
else
function! s:_SID() abort
return matchstr(expand('<sfile>'), '<SNR>\zs\d\+\ze__SID$')
endfunction
let s:_s = '<SNR>' . s:_SID() . '_'
function! s:_function(fstr) abort
return function(substitute(a:fstr, 's:', s:_s, 'g'))
endfunction
endif

View File

@ -5,439 +5,497 @@
let s:filename = expand('<sfile>:~') let s:filename = expand('<sfile>:~')
function! SpaceVim#layers#default#plugins() abort function! SpaceVim#layers#default#plugins() abort
let plugins = [] let plugins = []
return plugins return plugins
endfunction endfunction
let s:lnum = expand('<slnum>') + 3 let s:lnum = expand('<slnum>') + 3
function! SpaceVim#layers#default#config() abort function! SpaceVim#layers#default#config() abort
" Unimpaired bindings " Unimpaired bindings
" Quickly add empty lines " Quickly add empty lines
nnoremap <silent> [<space> :<c-u>put! =repeat(nr2char(10), v:count1)<cr> nnoremap <silent> [<space> :<c-u>put! =repeat(nr2char(10), v:count1)<cr>
nnoremap <silent> ]<space> :<c-u>put =repeat(nr2char(10), v:count1)<cr> nnoremap <silent> ]<space> :<c-u>put =repeat(nr2char(10), v:count1)<cr>
"]e or [e move current line ,count can be useed "]e or [e move current line ,count can be useed
nnoremap <silent>[e :<c-u>execute 'move -1-'. v:count1<cr> nnoremap <silent>[e :<c-u>execute 'move -1-'. v:count1<cr>
nnoremap <silent>]e :<c-u>execute 'move +'. v:count1<cr> nnoremap <silent>]e :<c-u>execute 'move +'. v:count1<cr>
" [b or ]n go to previous or next buffer " [b or ]n go to previous or next buffer
nnoremap <silent> [b :<c-u>bN<cr> nnoremap <silent> [b :<c-u>bN<cr>
nnoremap <silent> ]b :<c-u>bn<cr> nnoremap <silent> ]b :<c-u>bn<cr>
" [f or ]f go to next or previous file in dir " [f or ]f go to next or previous file in dir
nnoremap <silent> ]f :<c-u>call <SID>next_file()<cr> nnoremap <silent> ]f :<c-u>call <SID>next_file()<cr>
nnoremap <silent> [f :<c-u>call <SID>previous_file()<cr> nnoremap <silent> [f :<c-u>call <SID>previous_file()<cr>
" [l or ]l go to next and previous error " [l or ]l go to next and previous error
nnoremap <silent> [l :lprevious<cr> nnoremap <silent> [l :lprevious<cr>
nnoremap <silent> ]l :lnext<cr> nnoremap <silent> ]l :lnext<cr>
" [c or ]c go to next or previous vcs hunk " [c or ]c go to next or previous vcs hunk
" [w or ]w go to next or previous window " [w or ]w go to next or previous window
nnoremap <silent> [w :call <SID>previous_window()<cr> nnoremap <silent> [w :call <SID>previous_window()<cr>
nnoremap <silent> ]w :call <SID>next_window()<cr> nnoremap <silent> ]w :call <SID>next_window()<cr>
" [t or ]t for next and previous tab " [t or ]t for next and previous tab
nnoremap <silent> [t :tabprevious<cr> nnoremap <silent> [t :tabprevious<cr>
nnoremap <silent> ]t :tabnext<cr> nnoremap <silent> ]t :tabnext<cr>
" [p or ]p for p and P " [p or ]p for p and P
nnoremap <silent> [p P nnoremap <silent> [p P
nnoremap <silent> ]p p nnoremap <silent> ]p p
" Select last paste " Select last paste
nnoremap <silent><expr> gp '`['.strpart(getregtype(), 0, 1).'`]' nnoremap <silent><expr> gp '`['.strpart(getregtype(), 0, 1).'`]'
let lnum = expand('<slnum>') + s:lnum - 1 let lnum = expand('<slnum>') + s:lnum - 1
if has('python3') if has('python3')
let cmd = 'DeniteBufferDir file_rec' let cmd = 'DeniteBufferDir file_rec'
elseif has('python') elseif has('python')
let cmd = "exe 'LeaderfFile ' . fnamemodify(bufname('%'), ':h')" let cmd = "exe 'LeaderfFile ' . fnamemodify(bufname('%'), ':h')"
else else
let cmd = "exe 'CtrlP ' . fnamemodify(bufname('%'), ':h')" let cmd = "exe 'CtrlP ' . fnamemodify(bufname('%'), ':h')"
endif endif
call SpaceVim#mapping#space#def('nnoremap', ['f', 'f'], call SpaceVim#mapping#space#def('nnoremap', ['f', 'f'],
\ cmd, \ cmd,
\ ['Find files in the directory of the current buffer', \ ['Find files in the directory of the current buffer',
\ [ \ [
\ '[SPC f f] is to find files in the directory of the current buffer', \ '[SPC f f] is to find files in the directory of the current buffer',
\ 'vim with +python3 support will use denite', \ 'vim with +python3 support will use denite',
\ 'vim with +python support will use leaderf', \ 'vim with +python support will use leaderf',
\ 'otherwise will use ctrlp', \ 'otherwise will use ctrlp',
\ '', \ '',
\ 'Definition: ' . s:filename . ':' . lnum, \ 'Definition: ' . s:filename . ':' . lnum,
\ ] \ ]
\ ] \ ]
\ , 1) \ , 1)
call SpaceVim#mapping#space#def('nnoremap', ['f', 's'], 'write', 'save buffer', 1) call SpaceVim#mapping#space#def('nnoremap', ['f', 's'], 'write', 'save buffer', 1)
call SpaceVim#mapping#space#def('nnoremap', ['f', 'S'], 'wall', 'save all buffer', 1) call SpaceVim#mapping#space#def('nnoremap', ['f', 'S'], 'wall', 'save all buffer', 1)
call SpaceVim#mapping#space#def('nnoremap', ['f', 'W'], 'write !sudo tee % >/dev/null', 'save buffer with sudo', 1) call SpaceVim#mapping#space#def('nnoremap', ['f', 'W'], 'write !sudo tee % >/dev/null', 'save buffer with sudo', 1)
" help mappings " help mappings
call SpaceVim#mapping#space#def('nnoremap', ['h', 'I'], 'call SpaceVim#issue#report()', 'Reporting an issue of SpaceVim', 1) call SpaceVim#mapping#space#def('nnoremap', ['h', 'I'], 'call SpaceVim#issue#report()', 'Reporting an issue of SpaceVim', 1)
if has('python3') if has('python3')
call SpaceVim#mapping#space#def('nnoremap', ['h', 'i'], 'DeniteCursorWord help', 'get help with the symbol at point', 1) call SpaceVim#mapping#space#def('nnoremap', ['h', 'i'], 'DeniteCursorWord help', 'get help with the symbol at point', 1)
else else
call SpaceVim#mapping#space#def('nnoremap', ['h', 'i'], 'UniteWithCursorWord help', 'get help with the symbol at point', 1) call SpaceVim#mapping#space#def('nnoremap', ['h', 'i'], 'UniteWithCursorWord help', 'get help with the symbol at point', 1)
endif endif
call SpaceVim#mapping#space#def('nnoremap', ['h', 'l'], 'SPLayer -l', 'lists all the layers available in SpaceVim', 1) call SpaceVim#mapping#space#def('nnoremap', ['h', 'l'], 'SPLayer -l', 'lists all the layers available in SpaceVim', 1)
call SpaceVim#mapping#space#def('nnoremap', ['h', 'm'], 'Unite manpage', 'search available man pages', 1) call SpaceVim#mapping#space#def('nnoremap', ['h', 'm'], 'Unite manpage', 'search available man pages', 1)
call SpaceVim#mapping#space#def('nnoremap', ['h', 'k'], 'LeaderGuide "[KEYs]"', 'show top-level bindings with mapping guide', 1) call SpaceVim#mapping#space#def('nnoremap', ['h', 'k'], 'LeaderGuide "[KEYs]"', 'show top-level bindings with mapping guide', 1)
call SpaceVim#mapping#space#def('nnoremap', ['h', '[SPC]'], 'Unite help -input=SpaceVim', 'unite-SpaceVim-help', 1) call SpaceVim#mapping#space#def('nnoremap', ['h', '[SPC]'], 'Unite help -input=SpaceVim', 'unite-SpaceVim-help', 1)
call SpaceVim#mapping#space#def('nnoremap', ['j', '0'], 'm`^', 'push mark and goto beginning of line', 0) call SpaceVim#mapping#space#def('nnoremap', ['j', '0'], 'm`^', 'push mark and goto beginning of line', 0)
call SpaceVim#mapping#space#def('nnoremap', ['j', '$'], 'm`g_', 'push mark and goto end of line', 0) call SpaceVim#mapping#space#def('nnoremap', ['j', '$'], 'm`g_', 'push mark and goto end of line', 0)
call SpaceVim#mapping#space#def('nnoremap', ['j', 'b'], '<C-o>', 'jump backward', 0) call SpaceVim#mapping#space#def('nnoremap', ['j', 'b'], '<C-o>', 'jump backward', 0)
call SpaceVim#mapping#space#def('nnoremap', ['j', 'f'], '<C-i>', 'jump forward', 0) call SpaceVim#mapping#space#def('nnoremap', ['j', 'f'], '<C-i>', 'jump forward', 0)
call SpaceVim#mapping#space#def('nnoremap', ['j', 'd'], 'VimFiler -no-split', 'Explore current directory', 1) call SpaceVim#mapping#space#def('nnoremap', ['j', 'd'], 'VimFiler -no-split', 'Explore current directory', 1)
call SpaceVim#mapping#space#def('nnoremap', ['j', 'D'], 'VimFiler', 'Explore current directory (other window)', 1) call SpaceVim#mapping#space#def('nnoremap', ['j', 'D'], 'VimFiler', 'Explore current directory (other window)', 1)
call SpaceVim#mapping#space#def('nmap', ['j', 'j'], '<Plug>(easymotion-prefix)s', 'jump to a character', 0) call SpaceVim#mapping#space#def('nmap', ['j', 'j'], '<Plug>(easymotion-prefix)s', 'jump to a character', 0)
call SpaceVim#mapping#space#def('nmap', ['j', 'J'], '<Plug>(easymotion-s2)', 'jump to a suite of two characters', 0) call SpaceVim#mapping#space#def('nmap', ['j', 'J'], '<Plug>(easymotion-s2)', 'jump to a suite of two characters', 0)
call SpaceVim#mapping#space#def('nnoremap', ['j', 'k'], 'j==', 'go to next line and indent', 0) call SpaceVim#mapping#space#def('nnoremap', ['j', 'k'], 'j==', 'go to next line and indent', 0)
call SpaceVim#mapping#space#def('nmap', ['j', 'l'], '<Plug>(easymotion-bd-jk)', 'jump to a line', 0) call SpaceVim#mapping#space#def('nmap', ['j', 'l'], '<Plug>(easymotion-bd-jk)', 'jump to a line', 0)
call SpaceVim#mapping#space#def('nmap', ['j', 'v'], '<Plug>(easymotion-bd-jk)', 'jump to a line', 0) call SpaceVim#mapping#space#def('nmap', ['j', 'v'], '<Plug>(easymotion-bd-jk)', 'jump to a line', 0)
call SpaceVim#mapping#space#def('nmap', ['j', 'w'], '<Plug>(easymotion-bd-w)', 'jump to a word', 0) call SpaceVim#mapping#space#def('nmap', ['j', 'w'], '<Plug>(easymotion-bd-w)', 'jump to a word', 0)
call SpaceVim#mapping#space#def('nmap', ['j', 'q'], '<Plug>(easymotion-bd-jk)', 'jump to a line', 0) call SpaceVim#mapping#space#def('nmap', ['j', 'q'], '<Plug>(easymotion-bd-jk)', 'jump to a line', 0)
call SpaceVim#mapping#space#def('nnoremap', ['j', 'n'], "i\<cr>\<esc>", 'sp-newline', 0) call SpaceVim#mapping#space#def('nnoremap', ['j', 'n'], "i\<cr>\<esc>", 'sp-newline', 0)
call SpaceVim#mapping#space#def('nnoremap', ['j', 'o'], "i\<cr>\<esc>k$", 'open-line', 0) call SpaceVim#mapping#space#def('nnoremap', ['j', 'o'], "i\<cr>\<esc>k$", 'open-line', 0)
call SpaceVim#mapping#space#def('nnoremap', ['j', 's'], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['j', 's'], 'call call('
\ . string(s:_function('s:split_string')) . ', [0])', \ . string(s:_function('s:split_string')) . ', [0])',
\ 'split sexp', 1) \ 'split sexp', 1)
call SpaceVim#mapping#space#def('nnoremap', ['j', 'S'], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['j', 'S'], 'call call('
\ . string(s:_function('s:split_string')) . ', [1])', \ . string(s:_function('s:split_string')) . ', [1])',
\ 'split-and-add-newline', 1) \ 'split-and-add-newline', 1)
call SpaceVim#mapping#space#def('nnoremap', ['w', 'r'], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['w', 'r'], 'call call('
\ . string(s:_function('s:next_window')) . ', [])', \ . string(s:_function('s:next_window')) . ', [])',
\ 'rotate windows forward', 1) \ 'rotate windows forward', 1)
call SpaceVim#mapping#space#def('nnoremap', ['w', 'R'], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['w', 'R'], 'call call('
\ . string(s:_function('s:previous_window')) . ', [])', \ . string(s:_function('s:previous_window')) . ', [])',
\ 'rotate windows backward', 1) \ 'rotate windows backward', 1)
call SpaceVim#mapping#space#def('nnoremap', ['j', 'u'], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['j', 'u'], 'call call('
\ . string(s:_function('s:jump_to_url')) . ', [])', \ . string(s:_function('s:jump_to_url')) . ', [])',
\ 'jump to url', 1) \ 'jump to url', 1)
call SpaceVim#mapping#space#def('nnoremap', ['<Tab>'], 'try | b# | catch | endtry', 'last buffer', 1) call SpaceVim#mapping#space#def('nnoremap', ['<Tab>'], 'try | b# | catch | endtry', 'last buffer', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', '.'], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['b', '.'], 'call call('
\ . string(s:_function('s:buffer_transient_state')) . ', [])', \ . string(s:_function('s:buffer_transient_state')) . ', [])',
\ 'buffer transient state', 1) \ 'buffer transient state', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', 'd'], 'call SpaceVim#mapping#close_current_buffer()', 'kill-this-buffer', 1) call SpaceVim#mapping#space#def('nnoremap', ['b', 'd'], 'call SpaceVim#mapping#close_current_buffer()', 'kill-this-buffer', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', 'D'], call SpaceVim#mapping#space#def('nnoremap', ['b', 'D'],
\ 'call SpaceVim#mapping#kill_visible_buffer_choosewin()', \ 'call SpaceVim#mapping#kill_visible_buffer_choosewin()',
\ 'kill-this-buffer', 1) \ 'kill-this-buffer', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', '<C-d>'], 'call SpaceVim#mapping#clearBuffers()', 'kill-other-buffers', 1) call SpaceVim#mapping#space#def('nnoremap', ['b', '<C-d>'], 'call SpaceVim#mapping#clearBuffers()', 'kill-other-buffers', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', 'c'], 'call SpaceVim#mapping#clear_saved_buffers()', 'clear all saved buffers', 1) call SpaceVim#mapping#space#def('nnoremap', ['b', 'c'], 'call SpaceVim#mapping#clear_saved_buffers()', 'clear all saved buffers', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', 'e'], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['b', 'e'], 'call call('
\ . string(s:_function('s:safe_erase_buffer')) . ', [])', \ . string(s:_function('s:safe_erase_buffer')) . ', [])',
\ 'safe-erase-buffer', 1) \ 'safe-erase-buffer', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', 'h'], 'Startify', 'home', 1) call SpaceVim#mapping#space#def('nnoremap', ['b', 'h'], 'Startify', 'home', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', 'm'], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['b', 'm'], 'call call('
\ . string(s:_function('s:open_message_buffer')) . ', [])', \ . string(s:_function('s:open_message_buffer')) . ', [])',
\ 'open-message-buffer', 1) \ 'open-message-buffer', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', 'P'], 'normal! ggdG"+P', 'copy-clipboard-to-whole-buffer', 1) call SpaceVim#mapping#space#def('nnoremap', ['b', 'P'], 'normal! ggdG"+P', 'copy-clipboard-to-whole-buffer', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', 'R'], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['b', 'R'], 'call call('
\ . string(s:_function('s:safe_revert_buffer')) . ', [])', \ . string(s:_function('s:safe_revert_buffer')) . ', [])',
\ 'safe-revert-buffer', 1) \ 'safe-revert-buffer', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', 'Y'], 'normal! ggVG"+y``', 'copy-whole-buffer-to-clipboard', 1) call SpaceVim#mapping#space#def('nnoremap', ['b', 'Y'], 'normal! ggVG"+y``', 'copy-whole-buffer-to-clipboard', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', 'w'], 'setl readonly!', 'read-only-mode', 1) call SpaceVim#mapping#space#def('nnoremap', ['b', 'w'], 'setl readonly!', 'read-only-mode', 1)
let g:_spacevim_mappings_space.b.N = {'name' : '+New empty buffer'} let g:_spacevim_mappings_space.b.N = {'name' : '+New empty buffer'}
call SpaceVim#mapping#space#def('nnoremap', ['b', 'N', 'h'], 'topleft vertical new', 'new-empty-buffer-left', 1) call SpaceVim#mapping#space#def('nnoremap', ['b', 'N', 'h'], 'topleft vertical new', 'new-empty-buffer-left', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', 'N', 'j'], 'rightbelow new', 'new-empty-buffer-below', 1) call SpaceVim#mapping#space#def('nnoremap', ['b', 'N', 'j'], 'rightbelow new', 'new-empty-buffer-below', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', 'N', 'k'], 'new', 'new-empty-buffer-above', 1) call SpaceVim#mapping#space#def('nnoremap', ['b', 'N', 'k'], 'new', 'new-empty-buffer-above', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', 'N', 'l'], 'rightbelow vertical new', 'new-empty-buffer-right', 1) call SpaceVim#mapping#space#def('nnoremap', ['b', 'N', 'l'], 'rightbelow vertical new', 'new-empty-buffer-right', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', 'N', 'n'], 'enew', 'new-empty-buffer', 1) call SpaceVim#mapping#space#def('nnoremap', ['b', 'N', 'n'], 'enew', 'new-empty-buffer', 1)
" file mappings " file mappings
call SpaceVim#mapping#space#def('nnoremap', ['f', 'b'], 'Unite vim_bookmarks', 'unite-filtered-bookmarks', 1) call SpaceVim#mapping#space#def('nnoremap', ['f', 'b'], 'BookmarkShowAll', 'unite-filtered-bookmarks', 1)
let g:_spacevim_mappings_space.f.C = {'name' : '+Files/convert'} let g:_spacevim_mappings_space.f.C = {'name' : '+Files/convert'}
call SpaceVim#mapping#space#def('nnoremap', ['f', 'C', 'd'], 'update | e ++ff=dos | w', 'unix2dos', 1) call SpaceVim#mapping#space#def('nnoremap', ['f', 'C', 'd'], 'update | e ++ff=dos | w', 'unix2dos', 1)
call SpaceVim#mapping#space#def('nnoremap', ['f', 'C', 'u'], 'update | e ++ff=dos | setlocal ff=unix | w', 'dos2unix', 1) call SpaceVim#mapping#space#def('nnoremap', ['f', 'C', 'u'], 'update | e ++ff=dos | setlocal ff=unix | w', 'dos2unix', 1)
call SpaceVim#mapping#space#def('nnoremap', ['f', 'D'], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['f', 'D'], 'call call('
\ . string(s:_function('s:delete_current_buffer_file')) . ', [])', \ . string(s:_function('s:delete_current_buffer_file')) . ', [])',
\ 'delete-current-buffer-file', 1) \ 'delete-current-buffer-file', 1)
call SpaceVim#mapping#space#def('nnoremap', ['f', 'F'], 'normal! gf', 'open-cursor-file', 1) call SpaceVim#mapping#space#def('nnoremap', ['f', 'F'], 'normal! gf', 'open-cursor-file', 1)
call SpaceVim#mapping#space#def('nnoremap', ['f', 'r'], 'Unite file_mru', 'open-recent-file', 1) call SpaceVim#mapping#space#def('nnoremap', ['f', 'r'], 'Unite file_mru', 'open-recent-file', 1)
if g:spacevim_filemanager ==# 'vimfiler' if g:spacevim_filemanager ==# 'vimfiler'
call SpaceVim#mapping#space#def('nnoremap', ['f', 't'], 'VimFiler', 'toggle_file_tree', 1) call SpaceVim#mapping#space#def('nnoremap', ['f', 't'], 'VimFiler', 'toggle_file_tree', 1)
call SpaceVim#mapping#space#def('nnoremap', ['f', 'T'], 'VimFiler -no-toggle', 'show_file_tree', 1) call SpaceVim#mapping#space#def('nnoremap', ['f', 'T'], 'VimFiler -no-toggle', 'show_file_tree', 1)
elseif g:spacevim_filemanager ==# 'nerdtree' elseif g:spacevim_filemanager ==# 'nerdtree'
call SpaceVim#mapping#space#def('nnoremap', ['f', 't'], 'NERDTreeToggle', 'toggle_file_tree', 1) call SpaceVim#mapping#space#def('nnoremap', ['f', 't'], 'NERDTreeToggle', 'toggle_file_tree', 1)
call SpaceVim#mapping#space#def('nnoremap', ['f', 't'], 'NERDTree', 'toggle_file_tree', 1) call SpaceVim#mapping#space#def('nnoremap', ['f', 't'], 'NERDTree', 'toggle_file_tree', 1)
endif endif
call SpaceVim#mapping#space#def('nnoremap', ['f', 'y'], 'call zvim#util#CopyToClipboard()', 'show-and-copy-buffer-filename', 1) call SpaceVim#mapping#space#def('nnoremap', ['f', 'y'], 'call zvim#util#CopyToClipboard()', 'show-and-copy-buffer-filename', 1)
let g:_spacevim_mappings_space.f.v = {'name' : '+Vim(SpaceVim)'} let g:_spacevim_mappings_space.f.v = {'name' : '+Vim(SpaceVim)'}
call SpaceVim#mapping#space#def('nnoremap', ['f', 'v', 'v'], 'let @+=g:spacevim_version | echo g:spacevim_version', 'display-and-copy-version', 1) call SpaceVim#mapping#space#def('nnoremap', ['f', 'v', 'v'], 'let @+=g:spacevim_version | echo g:spacevim_version', 'display-and-copy-version', 1)
call SpaceVim#mapping#space#def('nnoremap', ['f', 'v', 'd'], 'SPConfig', 'open-custom-configuration', 1) call SpaceVim#mapping#space#def('nnoremap', ['f', 'v', 'd'], 'SPConfig', 'open-custom-configuration', 1)
let lnum = expand('<slnum>') + s:lnum - 1
call SpaceVim#mapping#space#def('nnoremap', ['n', '-'], 'call call('
\ . string(s:_function('s:number_transient_state')) . ', ["-"])',
\ ['Decrease number under cursor',
\ [
\ '[SPC n -] is to decrease the number under the cursor, and open',
\ 'the number translate state buffer',
\ '',
\ 'Definition: ' . s:filename . ':' . lnum,
\ ]
\ ]
\ , 1)
let lnum = expand('<slnum>') + s:lnum - 1
call SpaceVim#mapping#space#def('nnoremap', ['n', '+'], 'call call('
\ . string(s:_function('s:number_transient_state')) . ', ["+"])',
\ ['Increase number under cursor',
\ [
\ '[SPC n +] is to increase the number under the cursor, and open',
\ 'the number translate state buffer',
\ '',
\ 'Definition: ' . s:filename . ':' . lnum,
\ ]
\ ]
\ , 1)
endfunction
function! s:number_transient_state(n) abort
if a:n ==# '+'
exe "normal! \<c-a>"
else
exe "normal! \<c-x>"
endif
let state = SpaceVim#api#import('transient_state')
call state.set_title('Number Transient State')
call state.defind_keys(
\ {
\ 'layout' : 'vertical split',
\ 'left' : [
\ {
\ 'key' : ['+','='],
\ 'desc' : 'increase number',
\ 'func' : '',
\ 'cmd' : "normal! \<c-a>",
\ 'exit' : 0,
\ },
\ ],
\ 'right' : [
\ {
\ 'key' : '-',
\ 'desc' : 'decrease number',
\ 'func' : '',
\ 'cmd' : "normal! \<c-x>",
\ 'exit' : 0,
\ },
\ ],
\ }
\ )
call state.open()
endfunction endfunction
let s:file = SpaceVim#api#import('file') let s:file = SpaceVim#api#import('file')
let s:MESSAGE = SpaceVim#api#import('vim#message') let s:MESSAGE = SpaceVim#api#import('vim#message')
function! s:next_file() abort function! s:next_file() abort
let dir = expand('%:p:h') let dir = expand('%:p:h')
let f = expand('%:t') let f = expand('%:t')
let file = s:file.ls(dir, 1) let file = s:file.ls(dir, 1)
if index(file, f) == -1 if index(file, f) == -1
call add(file,f) call add(file,f)
endif endif
call sort(file) call sort(file)
if len(file) != 1 if len(file) != 1
if index(file, f) == len(file) - 1 if index(file, f) == len(file) - 1
exe 'e ' . dir . s:file.separator . file[0] exe 'e ' . dir . s:file.separator . file[0]
else else
exe 'e ' . dir . s:file.separator . file[index(file, f) + 1] exe 'e ' . dir . s:file.separator . file[index(file, f) + 1]
endif
endif endif
endif
endfunction endfunction
function! s:previous_file() abort function! s:previous_file() abort
let dir = expand('%:p:h') let dir = expand('%:p:h')
let f = expand('%:t') let f = expand('%:t')
let file = s:file.ls(dir, 1) let file = s:file.ls(dir, 1)
if index(file, f) == -1 if index(file, f) == -1
call add(file,f) call add(file,f)
endif endif
call sort(file) call sort(file)
if len(file) != 1 if len(file) != 1
if index(file, f) == 0 if index(file, f) == 0
exe 'e ' . dir . s:file.separator . file[-1] exe 'e ' . dir . s:file.separator . file[-1]
else else
exe 'e ' . dir . s:file.separator . file[index(file, f) - 1] exe 'e ' . dir . s:file.separator . file[index(file, f) - 1]
endif
endif endif
endif
endfunction endfunction
function! s:next_window() abort function! s:next_window() abort
try try
exe (winnr() + 1 ) . 'wincmd w' exe (winnr() + 1 ) . 'wincmd w'
catch catch
exe 1 . 'wincmd w' exe 1 . 'wincmd w'
endtry endtry
endfunction endfunction
function! s:previous_window() abort function! s:previous_window() abort
try try
if winnr() == 1 if winnr() == 1
exe winnr('$') . 'wincmd w' exe winnr('$') . 'wincmd w'
else else
exe (winnr() - 1 ) . 'wincmd w' exe (winnr() - 1 ) . 'wincmd w'
endif endif
catch catch
exe winnr('$') . 'wincmd w' exe winnr('$') . 'wincmd w'
endtry endtry
endfunction endfunction
function! s:split_string(newline) abort function! s:split_string(newline) abort
let syn_name = synIDattr(synID(line("."), col("."), 1), "name") let syn_name = synIDattr(synID(line("."), col("."), 1), "name")
if syn_name == &filetype . 'String' if syn_name == &filetype . 'String'
let c = col('.') let c = col('.')
let sep = '' let sep = ''
while c > 0 while c > 0
if s:is_string(line('.'), c) if s:is_string(line('.'), c)
let c = c - 1 let c = c - 1
else else
let sep = getline('.')[c] let sep = getline('.')[c]
break break
endif endif
endwhile endwhile
if a:newline if a:newline
let save_register_m = @m let save_register_m = @m
let @m = sep . "\n" . sep let @m = sep . "\n" . sep
normal! "mp normal! "mp
let @m = save_register_m let @m = save_register_m
else else
let save_register_m = @m let save_register_m = @m
let @m = sep . sep let @m = sep . sep
normal! "mp normal! "mp
let @m = save_register_m let @m = save_register_m
endif
endif endif
endif
endfunction endfunction
function! s:is_string(l,c) abort function! s:is_string(l,c) abort
return synIDattr(synID(a:l, a:c, 1), "name") == &filetype . 'String' return synIDattr(synID(a:l, a:c, 1), "name") == &filetype . 'String'
endfunction endfunction
" function() wrapper " function() wrapper
if v:version > 703 || v:version == 703 && has('patch1170') if v:version > 703 || v:version == 703 && has('patch1170')
function! s:_function(fstr) abort function! s:_function(fstr) abort
return function(a:fstr) return function(a:fstr)
endfunction endfunction
else else
function! s:_SID() abort function! s:_SID() abort
return matchstr(expand('<sfile>'), '<SNR>\zs\d\+\ze__SID$') return matchstr(expand('<sfile>'), '<SNR>\zs\d\+\ze__SID$')
endfunction endfunction
let s:_s = '<SNR>' . s:_SID() . '_' let s:_s = '<SNR>' . s:_SID() . '_'
function! s:_function(fstr) abort function! s:_function(fstr) abort
return function(substitute(a:fstr, 's:', s:_s, 'g')) return function(substitute(a:fstr, 's:', s:_s, 'g'))
endfunction endfunction
endif endif
function! s:jump_to_url() abort function! s:jump_to_url() abort
let g:EasyMotion_re_anywhere = 'http[s]*://' let g:EasyMotion_re_anywhere = 'http[s]*://'
call feedkeys("\<Plug>(easymotion-jumptoanywhere)") call feedkeys("\<Plug>(easymotion-jumptoanywhere)")
endfunction endfunction
function! s:safe_erase_buffer() abort function! s:safe_erase_buffer() abort
if s:MESSAGE.confirm('Erase content of buffer ' . expand('%:t')) if s:MESSAGE.confirm('Erase content of buffer ' . expand('%:t'))
normal! ggdG normal! ggdG
endif endif
redraw! redraw!
endfunction endfunction
function! s:open_message_buffer() abort function! s:open_message_buffer() abort
vertical topleft edit __Message_Buffer__ vertical topleft edit __Message_Buffer__
setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline nospell nonumber norelativenumber setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline nospell nonumber norelativenumber
setf message setf message
normal! ggdG normal! ggdG
silent put =execute(':message') silent put =execute(':message')
normal! G normal! G
setlocal nomodifiable setlocal nomodifiable
nnoremap <silent> <buffer> q :silent bd<CR> nnoremap <silent> <buffer> q :silent bd<CR>
endfunction endfunction
function! s:safe_revert_buffer() abort function! s:safe_revert_buffer() abort
if s:MESSAGE.confirm('Revert buffer form ' . expand('%:p')) if s:MESSAGE.confirm('Revert buffer form ' . expand('%:p'))
edit! edit!
endif endif
redraw! redraw!
endfunction endfunction
function! s:delete_current_buffer_file() abort function! s:delete_current_buffer_file() abort
if s:MESSAGE.confirm('Are you sure you want to delete this file') if s:MESSAGE.confirm('Are you sure you want to delete this file')
let f = fnameescape(expand('%:p')) let f = fnameescape(expand('%:p'))
call SpaceVim#mapping#close_current_buffer() call SpaceVim#mapping#close_current_buffer()
if delete(f) == 0 if delete(f) == 0
echo "File '" . f . "' successfully removed" echo "File '" . f . "' successfully removed"
endif
endif endif
redraw! endif
redraw!
endfunction endfunction
function! s:swap_buffer_with_nth_win(nr) abort function! s:swap_buffer_with_nth_win(nr) abort
if a:nr <= winnr('$') && a:nr != winnr() if a:nr <= winnr('$') && a:nr != winnr()
let cb = bufnr('%') let cb = bufnr('%')
let tb = winbufnr(a:nr) let tb = winbufnr(a:nr)
if cb != tb if cb != tb
exe a:nr . 'wincmd w' exe a:nr . 'wincmd w'
exe 'b' . cb exe 'b' . cb
wincmd p wincmd p
exe 'b' . tb exe 'b' . tb
endif
endif endif
endif
endfunction endfunction
function! s:move_buffer_to_nth_win(nr) abort function! s:move_buffer_to_nth_win(nr) abort
if a:nr <= winnr('$') && a:nr != winnr() if a:nr <= winnr('$') && a:nr != winnr()
let cb = bufnr('%') let cb = bufnr('%')
bp bp
exe a:nr . 'wincmd w' exe a:nr . 'wincmd w'
exe 'b' . cb exe 'b' . cb
wincmd p wincmd p
endif endif
endfunction endfunction
function! s:buffer_transient_state() abort function! s:buffer_transient_state() abort
let state = SpaceVim#api#import('transient_state') let state = SpaceVim#api#import('transient_state')
call state.set_title('Buffer Selection Transient State') call state.set_title('Buffer Selection Transient State')
call state.defind_keys( call state.defind_keys(
\ { \ {
\ 'layout' : 'vertical split', \ 'layout' : 'vertical split',
\ 'left' : [ \ 'left' : [
\ { \ {
\ 'key' : { \ 'key' : {
\ 'name' : 'C-1..C-9', \ 'name' : 'C-1..C-9',
\ 'pos' : [[1,4], [6,9]], \ 'pos' : [[1,4], [6,9]],
\ 'handles' : [ \ 'handles' : [
\ ["\<C-1>" , ''], \ ["\<C-1>" , ''],
\ ["\<C-2>" , ''], \ ["\<C-2>" , ''],
\ ["\<C-3>" , ''], \ ["\<C-3>" , ''],
\ ["\<C-4>" , ''], \ ["\<C-4>" , ''],
\ ["\<C-5>" , ''], \ ["\<C-5>" , ''],
\ ["\<C-6>" , ''], \ ["\<C-6>" , ''],
\ ["\<C-7>" , ''], \ ["\<C-7>" , ''],
\ ["\<C-8>" , ''], \ ["\<C-8>" , ''],
\ ["\<C-9>" , ''], \ ["\<C-9>" , ''],
\ ], \ ],
\ }, \ },
\ 'desc' : 'goto nth window', \ 'desc' : 'goto nth window',
\ 'func' : '', \ 'func' : '',
\ 'cmd' : '', \ 'cmd' : '',
\ 'exit' : 0, \ 'exit' : 0,
\ }, \ },
\ { \ {
\ 'key' : { \ 'key' : {
\ 'name' : '1..9', \ 'name' : '1..9',
\ 'pos' : [[1,2], [4,5]], \ 'pos' : [[1,2], [4,5]],
\ 'handles' : [ \ 'handles' : [
\ ['1' , 'call call(' . string(s:_function('s:move_buffer_to_nth_win')) . ', [1])'], \ ['1' , 'call call(' . string(s:_function('s:move_buffer_to_nth_win')) . ', [1])'],
\ ['2' , 'call call(' . string(s:_function('s:move_buffer_to_nth_win')) . ', [2])'], \ ['2' , 'call call(' . string(s:_function('s:move_buffer_to_nth_win')) . ', [2])'],
\ ['3' , 'call call(' . string(s:_function('s:move_buffer_to_nth_win')) . ', [3])'], \ ['3' , 'call call(' . string(s:_function('s:move_buffer_to_nth_win')) . ', [3])'],
\ ['4' , 'call call(' . string(s:_function('s:move_buffer_to_nth_win')) . ', [4])'], \ ['4' , 'call call(' . string(s:_function('s:move_buffer_to_nth_win')) . ', [4])'],
\ ['5' , 'call call(' . string(s:_function('s:move_buffer_to_nth_win')) . ', [5])'], \ ['5' , 'call call(' . string(s:_function('s:move_buffer_to_nth_win')) . ', [5])'],
\ ['6' , 'call call(' . string(s:_function('s:move_buffer_to_nth_win')) . ', [6])'], \ ['6' , 'call call(' . string(s:_function('s:move_buffer_to_nth_win')) . ', [6])'],
\ ['7' , 'call call(' . string(s:_function('s:move_buffer_to_nth_win')) . ', [7])'], \ ['7' , 'call call(' . string(s:_function('s:move_buffer_to_nth_win')) . ', [7])'],
\ ['8' , 'call call(' . string(s:_function('s:move_buffer_to_nth_win')) . ', [8])'], \ ['8' , 'call call(' . string(s:_function('s:move_buffer_to_nth_win')) . ', [8])'],
\ ['9' , 'call call(' . string(s:_function('s:move_buffer_to_nth_win')) . ', [9])'], \ ['9' , 'call call(' . string(s:_function('s:move_buffer_to_nth_win')) . ', [9])'],
\ ], \ ],
\ }, \ },
\ 'desc' : 'move buffer to nth window', \ 'desc' : 'move buffer to nth window',
\ 'func' : '', \ 'func' : '',
\ 'cmd' : '', \ 'cmd' : '',
\ 'exit' : 0, \ 'exit' : 0,
\ }, \ },
\ { \ {
\ 'key' : { \ 'key' : {
\ 'name' : 'M-1..M-9', \ 'name' : 'M-1..M-9',
\ 'pos' : [[1,4], [6,9]], \ 'pos' : [[1,4], [6,9]],
\ 'handles' : [ \ 'handles' : [
\ ["\<M-1>" , 'call call(' . string(s:_function('s:swap_buffer_with_nth_win')) . ', [1])'], \ ["\<M-1>" , 'call call(' . string(s:_function('s:swap_buffer_with_nth_win')) . ', [1])'],
\ ["\<M-2>" , 'call call(' . string(s:_function('s:swap_buffer_with_nth_win')) . ', [2])'], \ ["\<M-2>" , 'call call(' . string(s:_function('s:swap_buffer_with_nth_win')) . ', [2])'],
\ ["\<M-3>" , 'call call(' . string(s:_function('s:swap_buffer_with_nth_win')) . ', [3])'], \ ["\<M-3>" , 'call call(' . string(s:_function('s:swap_buffer_with_nth_win')) . ', [3])'],
\ ["\<M-4>" , 'call call(' . string(s:_function('s:swap_buffer_with_nth_win')) . ', [4])'], \ ["\<M-4>" , 'call call(' . string(s:_function('s:swap_buffer_with_nth_win')) . ', [4])'],
\ ["\<M-5>" , 'call call(' . string(s:_function('s:swap_buffer_with_nth_win')) . ', [5])'], \ ["\<M-5>" , 'call call(' . string(s:_function('s:swap_buffer_with_nth_win')) . ', [5])'],
\ ["\<M-6>" , 'call call(' . string(s:_function('s:swap_buffer_with_nth_win')) . ', [6])'], \ ["\<M-6>" , 'call call(' . string(s:_function('s:swap_buffer_with_nth_win')) . ', [6])'],
\ ["\<M-7>" , 'call call(' . string(s:_function('s:swap_buffer_with_nth_win')) . ', [7])'], \ ["\<M-7>" , 'call call(' . string(s:_function('s:swap_buffer_with_nth_win')) . ', [7])'],
\ ["\<M-8>" , 'call call(' . string(s:_function('s:swap_buffer_with_nth_win')) . ', [8])'], \ ["\<M-8>" , 'call call(' . string(s:_function('s:swap_buffer_with_nth_win')) . ', [8])'],
\ ["\<M-9>" , 'call call(' . string(s:_function('s:swap_buffer_with_nth_win')) . ', [9])'], \ ["\<M-9>" , 'call call(' . string(s:_function('s:swap_buffer_with_nth_win')) . ', [9])'],
\ ], \ ],
\ }, \ },
\ 'desc' : 'swap buffer with nth window', \ 'desc' : 'swap buffer with nth window',
\ 'func' : '', \ 'func' : '',
\ 'cmd' : '', \ 'cmd' : '',
\ 'exit' : 0, \ 'exit' : 0,
\ }, \ },
\ ], \ ],
\ 'right' : [ \ 'right' : [
\ { \ {
\ 'key' : 'n', \ 'key' : 'n',
\ 'desc' : 'next buffer', \ 'desc' : 'next buffer',
\ 'func' : '', \ 'func' : '',
\ 'cmd' : 'bnext', \ 'cmd' : 'bnext',
\ 'exit' : 0, \ 'exit' : 0,
\ }, \ },
\ { \ {
\ 'key' : ['N', 'p'], \ 'key' : ['N', 'p'],
\ 'desc' : 'previous buffer', \ 'desc' : 'previous buffer',
\ 'func' : '', \ 'func' : '',
\ 'cmd' : 'bp', \ 'cmd' : 'bp',
\ 'exit' : 0, \ 'exit' : 0,
\ }, \ },
\ { \ {
\ 'key' : 'd', \ 'key' : 'd',
\ 'desc' : 'kill buffer', \ 'desc' : 'kill buffer',
\ 'func' : '', \ 'func' : '',
\ 'cmd' : 'call SpaceVim#mapping#close_current_buffer()', \ 'cmd' : 'call SpaceVim#mapping#close_current_buffer()',
\ 'exit' : 0, \ 'exit' : 0,
\ }, \ },
\ { \ {
\ 'key' : 'q', \ 'key' : 'q',
\ 'desc' : 'quit', \ 'desc' : 'quit',
\ 'func' : '', \ 'func' : '',
\ 'cmd' : '', \ 'cmd' : '',
\ 'exit' : 1, \ 'exit' : 1,
\ }, \ },
\ ], \ ],
\ } \ }
\ ) \ )
call state.open() call state.open()
endfunction endfunction

View File

@ -4,406 +4,416 @@ let s:NUMBER = SpaceVim#api#import('data#number')
let s:LIST = SpaceVim#api#import('data#list') let s:LIST = SpaceVim#api#import('data#list')
function! SpaceVim#layers#edit#plugins() abort function! SpaceVim#layers#edit#plugins() abort
let plugins = [ let plugins = [
\ ['tpope/vim-surround'], \ ['tpope/vim-surround'],
\ ['tpope/vim-repeat'], \ ['tpope/vim-repeat'],
\ ['junegunn/vim-emoji'], \ ['junegunn/vim-emoji'],
\ ['terryma/vim-multiple-cursors', { 'loadconf' : 1}], \ ['terryma/vim-multiple-cursors', { 'loadconf' : 1}],
\ ['terryma/vim-expand-region', { 'loadconf' : 1}], \ ['terryma/vim-expand-region', { 'loadconf' : 1}],
\ ['kana/vim-textobj-user'], \ ['kana/vim-textobj-user'],
\ ['kana/vim-textobj-indent'], \ ['kana/vim-textobj-indent'],
\ ['kana/vim-textobj-line'], \ ['kana/vim-textobj-line'],
\ ['kana/vim-textobj-entire'], \ ['kana/vim-textobj-entire'],
\ ['scrooloose/nerdcommenter', { 'loadconf' : 1}], \ ['scrooloose/nerdcommenter', { 'loadconf' : 1}],
\ ['mattn/emmet-vim', { 'on_cmd' : 'EmmetInstall'}], \ ['mattn/emmet-vim', { 'on_cmd' : 'EmmetInstall'}],
\ ['gcmt/wildfire.vim',{'on_map' : '<Plug>(wildfire-'}], \ ['gcmt/wildfire.vim',{'on_map' : '<Plug>(wildfire-'}],
\ ['easymotion/vim-easymotion'], \ ['easymotion/vim-easymotion'],
\ ['haya14busa/vim-easyoperator-line'], \ ['haya14busa/vim-easyoperator-line'],
\ ['editorconfig/editorconfig-vim', { 'merged' : 0}], \ ['editorconfig/editorconfig-vim', { 'merged' : 0}],
\ ['floobits/floobits-neovim', { 'on_cmd' : ['FlooJoinWorkspace','FlooShareDirPublic','FlooShareDirPrivate']}], \ ['floobits/floobits-neovim', { 'on_cmd' : ['FlooJoinWorkspace','FlooShareDirPublic','FlooShareDirPrivate']}],
\ ['osyo-manga/vim-jplus', { 'on_map' : '<Plug>(jplus' }], \ ['osyo-manga/vim-jplus', { 'on_map' : '<Plug>(jplus' }],
\ ] \ ]
if executable('fcitx') if executable('fcitx')
call add(plugins,['lilydjwg/fcitx.vim', { 'on_event' : 'InsertEnter'}]) call add(plugins,['lilydjwg/fcitx.vim', { 'on_event' : 'InsertEnter'}])
endif endif
return plugins return plugins
endfunction endfunction
function! SpaceVim#layers#edit#config() abort function! SpaceVim#layers#edit#config() abort
let g:multi_cursor_next_key=get(g:, 'multi_cursor_next_key', '<C-n>') let g:multi_cursor_next_key=get(g:, 'multi_cursor_next_key', '<C-n>')
let g:multi_cursor_prev_key=get(g:, 'multi_cursor_prev_key', '<C-m>') let g:multi_cursor_prev_key=get(g:, 'multi_cursor_prev_key', '<C-m>')
let g:multi_cursor_skip_key=get(g:, 'multi_cursor_skip_key', '<C-x>') let g:multi_cursor_skip_key=get(g:, 'multi_cursor_skip_key', '<C-x>')
let g:multi_cursor_quit_key=get(g:, 'multi_cursor_quit_key', '<Esc>') let g:multi_cursor_quit_key=get(g:, 'multi_cursor_quit_key', '<Esc>')
let g:user_emmet_install_global = 0 let g:user_emmet_install_global = 0
let g:user_emmet_leader_key=get(g:, 'user_emmet_leader_key', '<C-e>') let g:user_emmet_leader_key=get(g:, 'user_emmet_leader_key', '<C-e>')
let g:user_emmet_mode='a' let g:user_emmet_mode='a'
let g:user_emmet_settings = { let g:user_emmet_settings = {
\ 'jsp' : { \ 'javascript': {
\ 'extends' : 'html', \ 'extends': 'jsx',
\ }, \ },
\} \ 'jsp' : {
"noremap <SPACE> <Plug>(wildfire-fuel) \ 'extends': 'html',
vnoremap <C-SPACE> <Plug>(wildfire-water) \ },
let g:wildfire_objects = ["i'", 'i"', 'i)', 'i]', 'i}', 'ip', 'it'] \ }
"noremap <SPACE> <Plug>(wildfire-fuel)
vnoremap <C-SPACE> <Plug>(wildfire-water)
let g:wildfire_objects = ["i'", 'i"', 'i)', 'i]', 'i}', 'ip', 'it']
" osyo-manga/vim-jplus {{{ " osyo-manga/vim-jplus {{{
nmap <silent> J <Plug>(jplus) nmap <silent> J <Plug>(jplus)
vmap <silent> J <Plug>(jplus) vmap <silent> J <Plug>(jplus)
" }}} " }}}
let g:_spacevim_mappings_space.x = {'name' : '+Text'} let g:_spacevim_mappings_space.x = {'name' : '+Text'}
let g:_spacevim_mappings_space.x.a = {'name' : '+align'} let g:_spacevim_mappings_space.x.a = {'name' : '+align'}
let g:_spacevim_mappings_space.x.d = {'name' : '+delete'} let g:_spacevim_mappings_space.x.d = {'name' : '+delete'}
let g:_spacevim_mappings_space.x.i = {'name' : '+change symbol style'} let g:_spacevim_mappings_space.x.i = {'name' : '+change symbol style'}
nnoremap <silent> <Plug>CountSelectionRegion :call <SID>count_selection_region()<Cr> nnoremap <silent> <Plug>CountSelectionRegion :call <SID>count_selection_region()<Cr>
xnoremap <silent> <Plug>CountSelectionRegion :<C-u>call <SID>count_selection_region()<Cr> xnoremap <silent> <Plug>CountSelectionRegion :<C-u>call <SID>count_selection_region()<Cr>
call SpaceVim#mapping#space#def('nmap', ['x', 'c'], '<Plug>CountSelectionRegion', 'count in the selection region', 0, 1) call SpaceVim#mapping#space#def('nmap', ['x', 'c'], '<Plug>CountSelectionRegion', 'count in the selection region', 0, 1)
call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', '&'], 'Tabularize /&', 'align region at &', 1) call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', '&'], 'Tabularize /&', 'align region at &', 1)
call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', '('], 'Tabularize /(', 'align region at (', 1) call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', '('], 'Tabularize /(', 'align region at (', 1)
call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', ')'], 'Tabularize /)', 'align region at )', 1) call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', ')'], 'Tabularize /)', 'align region at )', 1)
call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', '['], 'Tabularize /[', 'align region at [', 1) call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', '['], 'Tabularize /[', 'align region at [', 1)
call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', ']'], 'Tabularize /]', 'align region at ]', 1) call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', ']'], 'Tabularize /]', 'align region at ]', 1)
call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', '{'], 'Tabularize /{', 'align region at {', 1) call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', '{'], 'Tabularize /{', 'align region at {', 1)
call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', '}'], 'Tabularize /}', 'align region at }', 1) call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', '}'], 'Tabularize /}', 'align region at }', 1)
call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', ','], 'Tabularize /,', 'align region at ,', 1) call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', ','], 'Tabularize /,', 'align region at ,', 1)
call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', '.'], 'Tabularize /.', 'align region at .', 1) call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', '.'], 'Tabularize /.', 'align region at .', 1)
call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', ':'], 'Tabularize /:', 'align region at :', 1) call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', ':'], 'Tabularize /:', 'align region at :', 1)
call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', ';'], 'Tabularize /;', 'align region at ;', 1) call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', ';'], 'Tabularize /;', 'align region at ;', 1)
call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', '='], 'Tabularize /=', 'align region at =', 1) call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', '='], 'Tabularize /=', 'align region at =', 1)
call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', '¦'], 'Tabularize /¦', 'align region at ¦', 1) call SpaceVim#mapping#space#def('nnoremap', ['x', 'a', '¦'], 'Tabularize /¦', 'align region at ¦', 1)
call SpaceVim#mapping#space#def('nnoremap', ['x', 'd', 'w'], 'StripWhitespace', 'delete trailing whitespaces', 1) call SpaceVim#mapping#space#def('nnoremap', ['x', 'd', 'w'], 'StripWhitespace', 'delete trailing whitespaces', 1)
call SpaceVim#mapping#space#def('nnoremap', ['x', 'd', '[SPC]'], 'silent call call(' call SpaceVim#mapping#space#def('nnoremap', ['x', 'd', '[SPC]'], 'silent call call('
\ . string(s:_function('s:delete_extra_space')) . ', [])', \ . string(s:_function('s:delete_extra_space')) . ', [])',
\ 'delete extra space arround cursor', 1) \ 'delete extra space arround cursor', 1)
call SpaceVim#mapping#space#def('nnoremap', ['x', 'i', 'c'], 'silent call call(' call SpaceVim#mapping#space#def('nnoremap', ['x', 'i', 'c'], 'silent call call('
\ . string(s:_function('s:lowerCamelCase')) . ', [])', \ . string(s:_function('s:lowerCamelCase')) . ', [])',
\ 'change symbol style to lowerCamelCase', 1) \ 'change symbol style to lowerCamelCase', 1)
call SpaceVim#mapping#space#def('nnoremap', ['x', 'i', 'C'], 'silent call call(' call SpaceVim#mapping#space#def('nnoremap', ['x', 'i', 'C'], 'silent call call('
\ . string(s:_function('s:UpperCamelCase')) . ', [])', \ . string(s:_function('s:UpperCamelCase')) . ', [])',
\ 'change symbol style to UpperCamelCase', 1) \ 'change symbol style to UpperCamelCase', 1)
call SpaceVim#mapping#space#def('nnoremap', ['x', 'i', '_'], 'silent call call(' call SpaceVim#mapping#space#def('nnoremap', ['x', 'i', '_'], 'silent call call('
\ . string(s:_function('s:under_score')) . ', [])', \ . string(s:_function('s:under_score')) . ', [])',
\ 'change symbol style to under_score', 1) \ 'change symbol style to under_score', 1)
call SpaceVim#mapping#space#def('nnoremap', ['x', 'i', 'u'], 'silent call call(' call SpaceVim#mapping#space#def('nnoremap', ['x', 'i', 'u'], 'silent call call('
\ . string(s:_function('s:under_score')) . ', [])', \ . string(s:_function('s:under_score')) . ', [])',
\ 'change symbol style to under_score', 1) \ 'change symbol style to under_score', 1)
call SpaceVim#mapping#space#def('nnoremap', ['x', 'i', 'U'], 'silent call call(' call SpaceVim#mapping#space#def('nnoremap', ['x', 'i', 'U'], 'silent call call('
\ . string(s:_function('s:up_case')) . ', [])', \ . string(s:_function('s:up_case')) . ', [])',
\ 'change symbol style to UP_CACE', 1) \ 'change symbol style to UP_CACE', 1)
call SpaceVim#mapping#space#def('nnoremap', ['x', 'i', 'k'], 'silent call call(' call SpaceVim#mapping#space#def('nnoremap', ['x', 'i', 'k'], 'silent call call('
\ . string(s:_function('s:kebab_case')) . ', [])', \ . string(s:_function('s:kebab_case')) . ', [])',
\ 'change symbol style to kebab-case', 1) \ 'change symbol style to kebab-case', 1)
call SpaceVim#mapping#space#def('nnoremap', ['x', 'i', '-'], 'silent call call(' call SpaceVim#mapping#space#def('nnoremap', ['x', 'i', '-'], 'silent call call('
\ . string(s:_function('s:kebab_case')) . ', [])', \ . string(s:_function('s:kebab_case')) . ', [])',
\ 'change symbol style to kebab-case', 1) \ 'change symbol style to kebab-case', 1)
let g:_spacevim_mappings_space.i = {'name' : '+Insertion'} let g:_spacevim_mappings_space.i = {'name' : '+Insertion'}
let g:_spacevim_mappings_space.i.l = {'name' : '+Lorem-ipsum'} let g:_spacevim_mappings_space.i.l = {'name' : '+Lorem-ipsum'}
let g:_spacevim_mappings_space.i.p = {'name' : '+Passwords'} let g:_spacevim_mappings_space.i.p = {'name' : '+Passwords'}
let g:_spacevim_mappings_space.i.U = {'name' : '+UUID'} let g:_spacevim_mappings_space.i.U = {'name' : '+UUID'}
call SpaceVim#mapping#space#def('nnoremap', ['i', 'p', 1], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['i', 'p', 1], 'call call('
\ . string(s:_function('s:insert_simple_password')) . ', [])', \ . string(s:_function('s:insert_simple_password')) . ', [])',
\ 'insert simple password', 1) \ 'insert simple password', 1)
call SpaceVim#mapping#space#def('nnoremap', ['i', 'p', 2], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['i', 'p', 2], 'call call('
\ . string(s:_function('s:insert_stronger_password')) . ', [])', \ . string(s:_function('s:insert_stronger_password')) . ', [])',
\ 'insert stronger password', 1) \ 'insert stronger password', 1)
call SpaceVim#mapping#space#def('nnoremap', ['i', 'p', 3], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['i', 'p', 3], 'call call('
\ . string(s:_function('s:insert_paranoid_password')) . ', [])', \ . string(s:_function('s:insert_paranoid_password')) . ', [])',
\ 'insert password for paranoids', 1) \ 'insert password for paranoids', 1)
call SpaceVim#mapping#space#def('nnoremap', ['i', 'p', 'p'], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['i', 'p', 'p'], 'call call('
\ . string(s:_function('s:insert_phonetically_password')) . ', [])', \ . string(s:_function('s:insert_phonetically_password')) . ', [])',
\ 'insert a phonetically easy password', 1) \ 'insert a phonetically easy password', 1)
call SpaceVim#mapping#space#def('nnoremap', ['i', 'p', 'n'], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['i', 'p', 'n'], 'call call('
\ . string(s:_function('s:insert_numerical_password')) . ', [])', \ . string(s:_function('s:insert_numerical_password')) . ', [])',
\ 'insert a numerical password', 1) \ 'insert a numerical password', 1)
call SpaceVim#mapping#space#def('nnoremap', ['i', 'u'], 'Unite unicode', 'search and insert unicode', 1) call SpaceVim#mapping#space#def('nnoremap', ['i', 'u'], 'Unite unicode', 'search and insert unicode', 1)
call SpaceVim#mapping#space#def('nnoremap', ['i', 'U', 'U'], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['i', 'U', 'U'], 'call call('
\ . string(s:_function('s:uuidgen_U')) . ', [])', \ . string(s:_function('s:uuidgen_U')) . ', [])',
\ 'uuidgen-4', 1) \ 'uuidgen-4', 1)
call SpaceVim#mapping#space#def('nnoremap', ['i', 'l', 'l'], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['i', 'l', 'l'], 'call call('
\ . string(s:_function('s:insert_lorem_ipsum_list')) . ', [])', \ . string(s:_function('s:insert_lorem_ipsum_list')) . ', [])',
\ 'insert lorem-ipsum list', 1) \ 'insert lorem-ipsum list', 1)
call SpaceVim#mapping#space#def('nnoremap', ['i', 'l', 'p'], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['i', 'l', 'p'], 'call call('
\ . string(s:_function('s:insert_lorem_ipsum_paragraph')) . ', [])', \ . string(s:_function('s:insert_lorem_ipsum_paragraph')) . ', [])',
\ 'insert lorem-ipsum paragraph', 1) \ 'insert lorem-ipsum paragraph', 1)
call SpaceVim#mapping#space#def('nnoremap', ['i', 'l', 's'], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['i', 'l', 's'], 'call call('
\ . string(s:_function('s:insert_lorem_ipsum_sentence')) . ', [])', \ . string(s:_function('s:insert_lorem_ipsum_sentence')) . ', [])',
\ 'insert lorem-ipsum sentence', 1) \ 'insert lorem-ipsum sentence', 1)
let g:_spacevim_mappings_space.x.g = {'name' : '+translate'} let g:_spacevim_mappings_space.x.g = {'name' : '+translate'}
call SpaceVim#mapping#space#def('nnoremap', ['x', 'g', 't'], 'Ydc', 'translate current word', 1) call SpaceVim#mapping#space#def('nnoremap', ['x', 'g', 't'], 'Ydc', 'translate current word', 1)
" move line " move line
call SpaceVim#mapping#space#def('nnoremap', ['x', 'J'], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['x', 'J'], 'call call('
\ . string(s:_function('s:move_text_down_transient_state')) . ', [])', \ . string(s:_function('s:move_text_down_transient_state')) . ', [])',
\ 'move text down(enter transient state)', 1) \ 'move text down(enter transient state)', 1)
call SpaceVim#mapping#space#def('nnoremap', ['x', 'K'], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['x', 'K'], 'call call('
\ . string(s:_function('s:move_text_up_transient_state')) . ', [])', \ . string(s:_function('s:move_text_up_transient_state')) . ', [])',
\ 'move text up(enter transient state)', 1) \ 'move text up(enter transient state)', 1)
" transpose " transpose
let g:_spacevim_mappings_space.x.t = {'name' : '+transpose'} let g:_spacevim_mappings_space.x.t = {'name' : '+transpose'}
call SpaceVim#mapping#space#def('nnoremap', ['x', 't', 'c'], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['x', 't', 'c'], 'call call('
\ . string(s:_function('s:transpose_with_previous')) . ', ["character"])', \ . string(s:_function('s:transpose_with_previous')) . ', ["character"])',
\ 'swap current character with previous one', 1) \ 'swap current character with previous one', 1)
call SpaceVim#mapping#space#def('nnoremap', ['x', 't', 'w'], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['x', 't', 'w'], 'call call('
\ . string(s:_function('s:transpose_with_previous')) . ', ["word"])', \ . string(s:_function('s:transpose_with_previous')) . ', ["word"])',
\ 'swap current word with previous one', 1) \ 'swap current word with previous one', 1)
call SpaceVim#mapping#space#def('nnoremap', ['x', 't', 'l'], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['x', 't', 'l'], 'call call('
\ . string(s:_function('s:transpose_with_previous')) . ', ["line"])', \ . string(s:_function('s:transpose_with_previous')) . ', ["line"])',
\ 'swap current line with previous one', 1) \ 'swap current line with previous one', 1)
endfunction endfunction
function! s:transpose_with_previous(type) abort function! s:transpose_with_previous(type) abort
if a:type ==# 'line' if a:type ==# 'line'
if line('.') > 1 if line('.') > 1
normal! kddp normal! kddp
endif
elseif a:type ==# 'word'
let save_register = @k
normal! "kyiw
let cw = @k
normal! ge"kyiw
let tw = @k
if cw !=# tw
let @k = cw
normal! viw"kp
let @k = tw
normal! eviw"kp
endif
let @k =save_register
elseif a:type ==# 'character'
if col('.') > 1
let save_register_k = @k
let save_register_m = @m
normal! v"kyhv"myv"kplv"mp
let @k =save_register_k
let @m =save_register_m
endif
endif endif
elseif a:type ==# 'word'
let save_register = @k
normal! "kyiw
let cw = @k
normal! ge"kyiw
let tw = @k
if cw !=# tw
let @k = cw
normal! viw"kp
let @k = tw
normal! eviw"kp
endif
let @k =save_register
elseif a:type ==# 'character'
if col('.') > 1
let save_register_k = @k
let save_register_m = @m
normal! v"kyhv"myv"kplv"mp
let @k =save_register_k
let @m =save_register_m
endif
endif
endfunction endfunction
function! s:move_text_down_transient_state() abort function! s:move_text_down_transient_state() abort
if line('.') == line('$')
else
normal! ddp normal! ddp
call s:text_transient_state() endif
call s:text_transient_state()
endfunction endfunction
function! s:move_text_up_transient_state() abort function! s:move_text_up_transient_state() abort
if line('.') == 1
else
normal! ddkP normal! ddkP
call s:text_transient_state() endif
call s:text_transient_state()
endfunction endfunction
function! s:text_transient_state() abort function! s:text_transient_state() abort
let state = SpaceVim#api#import('transient_state') let state = SpaceVim#api#import('transient_state')
call state.set_title('Move Text Transient State') call state.set_title('Move Text Transient State')
call state.defind_keys( call state.defind_keys(
\ { \ {
\ 'layout' : 'vertical split', \ 'layout' : 'vertical split',
\ 'left' : [ \ 'left' : [
\ { \ {
\ 'key' : 'J', \ 'key' : 'J',
\ 'desc' : 'move text down', \ 'desc' : 'move text down',
\ 'func' : '', \ 'func' : '',
\ 'cmd' : 'normal! "_ddp', \ 'cmd' : 'noautocmd silent! m .+1',
\ 'exit' : 0, \ 'exit' : 0,
\ }, \ },
\ ], \ ],
\ 'right' : [ \ 'right' : [
\ { \ {
\ 'key' : 'K', \ 'key' : 'K',
\ 'desc' : 'move text up', \ 'func' : '',
\ 'func' : '', \ 'desc' : 'move text up',
\ 'cmd' : 'normal! "_ddkP', \ 'cmd' : 'noautocmd silent! m .-2',
\ 'exit' : 0, \ 'exit' : 0,
\ }, \ },
\ ], \ ],
\ } \ }
\ ) \ )
call state.open() call state.open()
endfunction endfunction
function! s:lowerCamelCase() abort function! s:lowerCamelCase() abort
" fooFzz " fooFzz
let cword = s:parse_symbol(expand('<cword>')) let cword = s:parse_symbol(expand('<cword>'))
if !empty(cword) if !empty(cword)
let rst = [cword[0]] let rst = [cword[0]]
if len(cword) > 1 if len(cword) > 1
let rst += map(cword[1:], "substitute(v:val, '^.', '\\u&', 'g')") let rst += map(cword[1:], "substitute(v:val, '^.', '\\u&', 'g')")
endif
let save_register = @k
let save_cursor = getcurpos()
let @k = join(rst, '')
normal! viw"kp
call setpos('.', save_cursor)
let @k = save_register
endif endif
let save_register = @k
let save_cursor = getcurpos()
let @k = join(rst, '')
normal! viw"kp
call setpos('.', save_cursor)
let @k = save_register
endif
endfunction endfunction
function! s:UpperCamelCase() abort function! s:UpperCamelCase() abort
" FooFzz " FooFzz
let cword = s:parse_symbol(expand('<cword>')) let cword = s:parse_symbol(expand('<cword>'))
if !empty(cword) if !empty(cword)
let rst = map(cword, "substitute(v:val, '^.', '\\u&', 'g')") let rst = map(cword, "substitute(v:val, '^.', '\\u&', 'g')")
let save_register = @k let save_register = @k
let save_cursor = getcurpos() let save_cursor = getcurpos()
let @k = join(rst, '') let @k = join(rst, '')
normal! viw"kp normal! viw"kp
call setpos('.', save_cursor) call setpos('.', save_cursor)
let @k = save_register let @k = save_register
endif endif
endfunction endfunction
function! s:kebab_case() abort function! s:kebab_case() abort
" foo-fzz " foo-fzz
let cword = s:parse_symbol(expand('<cword>')) let cword = s:parse_symbol(expand('<cword>'))
if !empty(cword) if !empty(cword)
let save_register = @k let save_register = @k
let save_cursor = getcurpos() let save_cursor = getcurpos()
let @k = join(cword, '-') let @k = join(cword, '-')
normal! viw"kp normal! viw"kp
call setpos('.', save_cursor) call setpos('.', save_cursor)
let @k = save_register let @k = save_register
endif endif
endfunction endfunction
function! s:under_score() abort function! s:under_score() abort
" foo_fzz " foo_fzz
let cword = s:parse_symbol(expand('<cword>')) let cword = s:parse_symbol(expand('<cword>'))
if !empty(cword) if !empty(cword)
let save_register = @k let save_register = @k
let save_cursor = getcurpos() let save_cursor = getcurpos()
let @k = join(cword, '_') let @k = join(cword, '_')
normal! viw"kp normal! viw"kp
call setpos('.', save_cursor) call setpos('.', save_cursor)
let @k = save_register let @k = save_register
endif endif
endfunction endfunction
function! s:up_case() abort function! s:up_case() abort
" FOO_FZZ " FOO_FZZ
let cword =map(s:parse_symbol(expand('<cword>')), 'toupper(v:val)') let cword =map(s:parse_symbol(expand('<cword>')), 'toupper(v:val)')
if !empty(cword) if !empty(cword)
let save_register = @k let save_register = @k
let save_cursor = getcurpos() let save_cursor = getcurpos()
let @k = join(cword, '_') let @k = join(cword, '_')
normal! viw"kp normal! viw"kp
call setpos('.', save_cursor) call setpos('.', save_cursor)
let @k = save_register let @k = save_register
endif endif
endfunction endfunction
let s:STRING = SpaceVim#api#import('data#string') let s:STRING = SpaceVim#api#import('data#string')
function! s:parse_symbol(symbol) abort function! s:parse_symbol(symbol) abort
if a:symbol =~# '^[a-z]\+\(-[a-zA-Z]\+\)*$' if a:symbol =~# '^[a-z]\+\(-[a-zA-Z]\+\)*$'
return split(a:symbol, '-') return split(a:symbol, '-')
elseif a:symbol =~# '^[a-z]\+\(_[a-zA-Z]\+\)*$' elseif a:symbol =~# '^[a-z]\+\(_[a-zA-Z]\+\)*$'
return split(a:symbol, '_') return split(a:symbol, '_')
elseif a:symbol =~# '^[a-z]\+\([A-Z][a-z]\+\)*$' elseif a:symbol =~# '^[a-z]\+\([A-Z][a-z]\+\)*$'
let chars = s:STRING.string2chars(a:symbol) let chars = s:STRING.string2chars(a:symbol)
let rst = [] let rst = []
let word = '' let word = ''
for char in chars for char in chars
if char =~# '[a-z]' if char =~# '[a-z]'
let word .= char let word .= char
else else
call add(rst, tolower(word))
let word = char
endif
endfor
call add(rst, tolower(word)) call add(rst, tolower(word))
return rst let word = char
elseif a:symbol =~# '^[A-Z][a-z]\+\([A-Z][a-z]\+\)*$' endif
let chars = s:STRING.string2chars(a:symbol) endfor
let rst = [] call add(rst, tolower(word))
let word = '' return rst
for char in chars elseif a:symbol =~# '^[A-Z][a-z]\+\([A-Z][a-z]\+\)*$'
if char =~# '[a-z]' let chars = s:STRING.string2chars(a:symbol)
let word .= char let rst = []
else let word = ''
if !empty(word) for char in chars
call add(rst, tolower(word)) if char =~# '[a-z]'
endif let word .= char
let word = char else
endif if !empty(word)
endfor call add(rst, tolower(word))
call add(rst, tolower(word)) endif
return rst let word = char
else endif
return [a:symbol] endfor
endif call add(rst, tolower(word))
return rst
else
return [a:symbol]
endif
endfunction endfunction
function! s:count_selection_region() abort function! s:count_selection_region() abort
call feedkeys("gvg\<c-g>\<Esc>", 'ti') call feedkeys("gvg\<c-g>\<Esc>", 'ti')
endfunction endfunction
function! s:delete_extra_space() abort function! s:delete_extra_space() abort
if !empty(getline('.')) if !empty(getline('.'))
if getline('.')[col('.')-1] ==# ' ' if getline('.')[col('.')-1] ==# ' '
exe "normal! viw\"_di\<Space>\<Esc>" exe "normal! viw\"_di\<Space>\<Esc>"
endif
endif endif
endif
endfunction endfunction
let s:local_lorem_ipsum = [ let s:local_lorem_ipsum = [
\ 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit.', \ 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit.',
\ 'Donec hendrerit tempor tellus.', \ 'Donec hendrerit tempor tellus.',
\ 'Donec pretium posuere tellus.', \ 'Donec pretium posuere tellus.',
\ 'Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus.', \ 'Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus.',
\ 'Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.', \ 'Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.',
\ 'Nulla posuere.', \ 'Nulla posuere.',
\ 'Donec vitae dolor.', \ 'Donec vitae dolor.',
\ 'Nullam tristique diam non turpis.', \ 'Nullam tristique diam non turpis.',
\ 'Cras placerat accumsan nulla.', \ 'Cras placerat accumsan nulla.',
\ 'Nullam rutrum.', \ 'Nullam rutrum.',
\ 'Nam vestibulum accumsan nisl.', \ 'Nam vestibulum accumsan nisl.',
\ 'Pellentesque dapibus suscipit ligula.', \ 'Pellentesque dapibus suscipit ligula.',
\ 'Donec posuere augue in quam.', \ 'Donec posuere augue in quam.',
\ 'Etiam vel tortor sodales tellus ultricies commodo.', \ 'Etiam vel tortor sodales tellus ultricies commodo.',
\ 'Suspendisse potenti.', \ 'Suspendisse potenti.',
\ 'Aenean in sem ac leo mollis blandit.', \ 'Aenean in sem ac leo mollis blandit.',
\ 'Donec neque quam, dignissim in, mollis nec, sagittis eu, wisi.', \ 'Donec neque quam, dignissim in, mollis nec, sagittis eu, wisi.',
\ 'Phasellus lacus.', \ 'Phasellus lacus.',
\ 'Etiam laoreet quam sed arcu.', \ 'Etiam laoreet quam sed arcu.',
\ 'Phasellus at dui in ligula mollis ultricies.', \ 'Phasellus at dui in ligula mollis ultricies.',
\ 'Integer placerat tristique nisl.', \ 'Integer placerat tristique nisl.',
\ 'Praesent augue.', \ 'Praesent augue.',
\ 'Fusce commodo.', \ 'Fusce commodo.',
\ 'Vestibulum convallis, lorem a tempus semper, dui dui euismod elit, vitae placerat urna tortor vitae lacus.', \ 'Vestibulum convallis, lorem a tempus semper, dui dui euismod elit, vitae placerat urna tortor vitae lacus.',
\ 'Nullam libero mauris, consequat quis, varius et, dictum id, arcu.', \ 'Nullam libero mauris, consequat quis, varius et, dictum id, arcu.',
\ 'Mauris mollis tincidunt felis.', \ 'Mauris mollis tincidunt felis.',
\ 'Aliquam feugiat tellus ut neque.', \ 'Aliquam feugiat tellus ut neque.',
\ 'Nulla facilisis, risus a rhoncus fermentum, tellus tellus lacinia purus, et dictum nunc justo sit amet elit.', \ 'Nulla facilisis, risus a rhoncus fermentum, tellus tellus lacinia purus, et dictum nunc justo sit amet elit.',
\ 'Aliquam erat volutpat.', \ 'Aliquam erat volutpat.',
\ 'Nunc eleifend leo vitae magna.', \ 'Nunc eleifend leo vitae magna.',
\ 'In id erat non orci commodo lobortis.', \ 'In id erat non orci commodo lobortis.',
\ 'Proin neque massa, cursus ut, gravida ut, lobortis eget, lacus.', \ 'Proin neque massa, cursus ut, gravida ut, lobortis eget, lacus.',
\ 'Sed diam.', \ 'Sed diam.',
\ 'Praesent fermentum tempor tellus.', \ 'Praesent fermentum tempor tellus.',
\ 'Nullam tempus.', \ 'Nullam tempus.',
\ 'Mauris ac felis vel velit tristique imperdiet.', \ 'Mauris ac felis vel velit tristique imperdiet.',
\ 'Donec at pede.', \ 'Donec at pede.',
\ 'Etiam vel neque nec dui dignissim bibendum.', \ 'Etiam vel neque nec dui dignissim bibendum.',
\ 'Vivamus id enim.', \ 'Vivamus id enim.',
\ 'Phasellus neque orci, porta a, aliquet quis, semper a, massa.', \ 'Phasellus neque orci, porta a, aliquet quis, semper a, massa.',
\ 'Phasellus purus.', \ 'Phasellus purus.',
\ 'Pellentesque tristique imperdiet tortor.', \ 'Pellentesque tristique imperdiet tortor.',
\ 'Nam euismod tellus id erat.', \ 'Nam euismod tellus id erat.',
\ 'Nullam eu ante vel est convallis dignissim.', \ 'Nullam eu ante vel est convallis dignissim.',
\ 'Fusce suscipit, wisi nec facilisis facilisis, est dui fermentum leo, quis tempor ligula erat quis odio.', \ 'Fusce suscipit, wisi nec facilisis facilisis, est dui fermentum leo, quis tempor ligula erat quis odio.',
\ 'Nunc porta vulputate tellus.', \ 'Nunc porta vulputate tellus.',
\ 'Nunc rutrum turpis sed pede.', \ 'Nunc rutrum turpis sed pede.',
\ 'Sed bibendum.', \ 'Sed bibendum.',
\ 'Aliquam posuere.', \ 'Aliquam posuere.',
\ 'Nunc aliquet, augue nec adipiscing interdum, lacus tellus malesuada massa, quis varius mi purus non odio.', \ 'Nunc aliquet, augue nec adipiscing interdum, lacus tellus malesuada massa, quis varius mi purus non odio.',
\ 'Pellentesque condimentum, magna ut suscipit hendrerit, ipsum augue ornare nulla, non luctus diam neque sit amet urna.', \ 'Pellentesque condimentum, magna ut suscipit hendrerit, ipsum augue ornare nulla, non luctus diam neque sit amet urna.',
\ 'Curabitur vulputate vestibulum lorem.', \ 'Curabitur vulputate vestibulum lorem.',
\ 'Fusce sagittis, libero non molestie mollis, magna orci ultrices dolor, at vulputate neque nulla lacinia eros.', \ 'Fusce sagittis, libero non molestie mollis, magna orci ultrices dolor, at vulputate neque nulla lacinia eros.',
\ 'Sed id ligula quis est convallis tempor.', \ 'Sed id ligula quis est convallis tempor.',
\ 'Curabitur lacinia pulvinar nibh.', \ 'Curabitur lacinia pulvinar nibh.',
\ 'Nam a sapien.', \ 'Nam a sapien.',
\ ] \ ]
let s:lorem_ipsum_paragraph_separator = "\n\n" let s:lorem_ipsum_paragraph_separator = "\n\n"
let s:lorem_ipsum_sentence_separator = ' ' let s:lorem_ipsum_sentence_separator = ' '
@ -413,93 +423,93 @@ let s:lorem_ipsum_list_item_end = "\n"
let s:lorem_ipsum_list_end = '' let s:lorem_ipsum_list_end = ''
function! s:insert_lorem_ipsum_list() abort function! s:insert_lorem_ipsum_list() abort
let save_register = @k let save_register = @k
let @k = '* ' . s:local_lorem_ipsum[s:NUMBER.random(0, len(s:local_lorem_ipsum))] . "\n" let @k = '* ' . s:local_lorem_ipsum[s:NUMBER.random(0, len(s:local_lorem_ipsum))] . "\n"
normal! "kgP normal! "kgP
let @k = save_register let @k = save_register
endfunction endfunction
function! s:insert_lorem_ipsum_paragraph() abort function! s:insert_lorem_ipsum_paragraph() abort
let save_register = @k let save_register = @k
let pids = len(s:local_lorem_ipsum) / 11 let pids = len(s:local_lorem_ipsum) / 11
let pid = s:NUMBER.random(0, pids) * 11 let pid = s:NUMBER.random(0, pids) * 11
let @k = join(s:LIST.listpart(s:local_lorem_ipsum, pid, 11), s:lorem_ipsum_sentence_separator) . s:lorem_ipsum_paragraph_separator let @k = join(s:LIST.listpart(s:local_lorem_ipsum, pid, 11), s:lorem_ipsum_sentence_separator) . s:lorem_ipsum_paragraph_separator
normal! "kgP normal! "kgP
let @k = save_register let @k = save_register
endfunction endfunction
function! s:insert_lorem_ipsum_sentence() abort function! s:insert_lorem_ipsum_sentence() abort
let save_register = @k let save_register = @k
let @k = s:local_lorem_ipsum[s:NUMBER.random(0, len(s:local_lorem_ipsum))] . s:lorem_ipsum_sentence_separator let @k = s:local_lorem_ipsum[s:NUMBER.random(0, len(s:local_lorem_ipsum))] . s:lorem_ipsum_sentence_separator
normal! "kgP normal! "kgP
let @k = save_register let @k = save_register
endfunction endfunction
function! s:insert_simple_password() abort function! s:insert_simple_password() abort
let save_register = @k let save_register = @k
let @k = s:PASSWORD.generate_simple(8) let @k = s:PASSWORD.generate_simple(8)
normal! "kPl normal! "kPl
let @k = save_register let @k = save_register
endfunction endfunction
function! s:insert_stronger_password() abort function! s:insert_stronger_password() abort
let save_register = @k let save_register = @k
let @k = s:PASSWORD.generate_strong(12) let @k = s:PASSWORD.generate_strong(12)
normal! "kPl normal! "kPl
let @k = save_register let @k = save_register
endfunction endfunction
function! s:insert_paranoid_password() abort function! s:insert_paranoid_password() abort
let save_register = @k let save_register = @k
let @k = s:PASSWORD.generate_paranoid(20) let @k = s:PASSWORD.generate_paranoid(20)
normal! "kPl normal! "kPl
let @k = save_register let @k = save_register
endfunction endfunction
function! s:insert_numerical_password() abort function! s:insert_numerical_password() abort
let save_register = @k let save_register = @k
let @k = s:PASSWORD.generate_numeric(4) let @k = s:PASSWORD.generate_numeric(4)
normal! "kPl normal! "kPl
let @k = save_register let @k = save_register
endfunction endfunction
function! s:insert_phonetically_password() abort function! s:insert_phonetically_password() abort
let save_register = @k let save_register = @k
let @k = s:PASSWORD.generate_phonetic(8) let @k = s:PASSWORD.generate_phonetic(8)
normal! "kPl normal! "kPl
let @k = save_register let @k = save_register
endfunction endfunction
function! s:uuidgen_U() abort function! s:uuidgen_U() abort
let uuid = system('uuidgen') let uuid = system('uuidgen')
let save_register = @k let save_register = @k
let @k = uuid let @k = uuid
normal! "kPl normal! "kPl
let @k = save_register let @k = save_register
endfunction endfunction
" function() wrapper " function() wrapper
if v:version > 703 || v:version == 703 && has('patch1170') if v:version > 703 || v:version == 703 && has('patch1170')
function! s:_function(fstr) abort function! s:_function(fstr) abort
return function(a:fstr) return function(a:fstr)
endfunction endfunction
else else
function! s:_SID() abort function! s:_SID() abort
return matchstr(expand('<sfile>'), '<SNR>\zs\d\+\ze__SID$') return matchstr(expand('<sfile>'), '<SNR>\zs\d\+\ze__SID$')
endfunction endfunction
let s:_s = '<SNR>' . s:_SID() . '_' let s:_s = '<SNR>' . s:_SID() . '_'
function! s:_function(fstr) abort function! s:_function(fstr) abort
return function(substitute(a:fstr, 's:', s:_s, 'g')) return function(substitute(a:fstr, 's:', s:_s, 'g'))
endfunction endfunction
endif endif
augroup spacevim_layer_edit augroup spacevim_layer_edit
au! au!
autocmd BufNewFile *.py call <SID>add_buffer_head() autocmd BufNewFile *.py call <SID>add_buffer_head()
augroup END augroup END
let s:ft_head_tp = {} let s:ft_head_tp = {}
function! s:add_buffer_head() abort function! s:add_buffer_head() abort
if has_key(s:ft_head_tp, &ft) if has_key(s:ft_head_tp, &ft)
call setline(1, s:ft_head_tp[&ft]) call setline(1, s:ft_head_tp[&ft])
endif endif
endfunction endfunction
function! SpaceVim#layers#edit#add_ft_head_tamplate(ft, tamp) function! SpaceVim#layers#edit#add_ft_head_tamplate(ft, tamp)
call extend(s:ft_head_tp, {a:ft : a:tamp}) call extend(s:ft_head_tp, {a:ft : a:tamp})
endfunction endfunction

View File

@ -42,6 +42,7 @@ function! SpaceVim#layers#git#config() abort
autocmd! autocmd!
autocmd FileType diff nnoremap <buffer><silent> q :bd!<CR> autocmd FileType diff nnoremap <buffer><silent> q :bd!<CR>
autocmd FileType gitcommit setl omnifunc=SpaceVim#plugins#gitcommit#complete autocmd FileType gitcommit setl omnifunc=SpaceVim#plugins#gitcommit#complete
autocmd User GitGutter let &l:statusline = SpaceVim#layers#core#statusline#get(1)
augroup END augroup END
call SpaceVim#mapping#space#def('nnoremap', ['g', 'M'], 'call call(' call SpaceVim#mapping#space#def('nnoremap', ['g', 'M'], 'call call('
\ . string(function('s:display_last_commit_of_current_line')) . ', [])', \ . string(function('s:display_last_commit_of_current_line')) . ', [])',

View File

@ -40,10 +40,16 @@
let s:use_libclang = 0
function! SpaceVim#layers#lang#c#plugins() abort function! SpaceVim#layers#lang#c#plugins() abort
let plugins = [] let plugins = []
if has('nvim') if has('nvim')
call add(plugins, ['tweekmonster/deoplete-clang2']) if s:use_libclang
call add(plugins, ['zchee/deoplete-clang'])
else
call add(plugins, ['tweekmonster/deoplete-clang2'])
endif
else else
call add(plugins, ['Rip-Rip/clang_complete']) call add(plugins, ['Rip-Rip/clang_complete'])
endif endif
@ -56,6 +62,18 @@ function! SpaceVim#layers#lang#c#config() abort
call SpaceVim#mapping#space#regesit_lang_mappings('c', funcref('s:language_specified_mappings')) call SpaceVim#mapping#space#regesit_lang_mappings('c', funcref('s:language_specified_mappings'))
endfunction endfunction
function! SpaceVim#layers#lang#c#set_variable(var) abort
" use clang or libclang
let s:use_libclang = get(a:var,
\ 'use_libclang',
\ 'clang')
if has_key(a:var, 'clang_executable')
let g:completor_clang_binary = a:var.clang_executable
let g:deoplete#sources#clang#executable = a:var.clang_executable
endif
endfunction
function! s:language_specified_mappings() abort function! s:language_specified_mappings() abort
call SpaceVim#mapping#space#langSPC('nmap', ['l','r'], call SpaceVim#mapping#space#langSPC('nmap', ['l','r'],

View File

@ -1,23 +1,56 @@
function! SpaceVim#layers#lang#haskell#plugins() abort function! SpaceVim#layers#lang#haskell#plugins() abort
let plugins = [] let plugins = [
call add(plugins,['neovimhaskell/haskell-vim', { 'on_ft' : 'haskell'}]) \ ['neovimhaskell/haskell-vim', { 'on_ft': 'haskell' }],
call add(plugins,['pbrisbin/vim-syntax-shakespeare', { 'on_ft' : 'haskell'}]) \ ['pbrisbin/vim-syntax-shakespeare', { 'on_ft': 'haskell' }],
call add(plugins,['eagletmt/neco-ghc', { 'on_ft' : 'haskell'}]) \ ]
return plugins
if !s:use_lsp
call add(plugins, ['eagletmt/neco-ghc', { 'on_ft': 'haskell' }])
endif
return plugins
endfunction
let s:use_lsp = 0
function! SpaceVim#layers#lang#haskell#set_variable(var) abort
let s:use_lsp = get(a:var, 'use_lsp', 0) && has('nvim') && executable('hie')
endfunction endfunction
function! SpaceVim#layers#lang#haskell#config() abort function! SpaceVim#layers#lang#haskell#config() abort
let g:haskellmode_completion_ghc = 0 let g:haskellmode_completion_ghc = 0
call SpaceVim#plugins#runner#reg_runner('haskell', ['ghc -v0 --make %s -o #TEMP#', '#TEMP#']) call SpaceVim#plugins#runner#reg_runner('haskell', [
call SpaceVim#mapping#space#regesit_lang_mappings('haskell', funcref('s:language_specified_mappings')) \ 'ghc -v0 --make %s -o #TEMP#',
\ '#TEMP#'])
call SpaceVim#mapping#space#regesit_lang_mappings('haskell',
\ funcref('s:on_ft'))
if s:use_lsp
call SpaceVim#mapping#gd#add('haskell',
\ function('SpaceVim#lsp#go_to_def'))
call SpaceVim#lsp#reg_server('haskell', ['hie', '--lsp'])
endif
augroup SpaceVim_lang_haskell augroup SpaceVim_lang_haskell
autocmd! autocmd!
autocmd FileType haskell setlocal omnifunc=necoghc#omnifunc
if !s:use_lsp
autocmd FileType haskell setlocal omnifunc=necoghc#omnifunc
endif
augroup END augroup END
endfunction endfunction
function! s:language_specified_mappings() abort function! s:on_ft() abort
call SpaceVim#mapping#space#langSPC('nmap', ['l', 'r'], 'call SpaceVim#plugins#runner#open()', 'execute current file', 1) if s:use_lsp
nnoremap <silent><buffer> K :call SpaceVim#lsp#show_doc()<CR>
call SpaceVim#mapping#space#langSPC('nnoremap', ['l', 'd'],
\ 'call SpaceVim#lsp#show_doc()', 'show_document', 1)
call SpaceVim#mapping#space#langSPC('nnoremap', ['l', 'e'],
\ 'call SpaceVim#lsp#rename()', 'rename symbol', 1)
endif
call SpaceVim#mapping#space#langSPC('nmap', ['l', 'r'],
\ 'call SpaceVim#plugins#runner#open()', 'execute current file', 1)
endfunction endfunction

View File

@ -1,26 +1,34 @@
function! SpaceVim#layers#lang#javascript#plugins() abort function! SpaceVim#layers#lang#javascript#plugins() abort
let plugins = [ let plugins = [
\ ['pangloss/vim-javascript', { 'on_ft' : 'javascript' }], \ ['MaxMEllon/vim-jsx-pretty', { 'on_ft': 'javascript' }],
\ ['othree/yajs.vim', { 'on_ft' : 'javascript' }], \ ['Galooshi/vim-import-js', {
\ ['othree/es.next.syntax.vim', { 'on_ft' : 'javascript' }], \ 'on_ft': 'javascript', 'build' : 'npm install -g import-js' }],
\ ['othree/javascript-libraries-syntax.vim', { 'on_ft' : ['javascript', 'coffee', 'ls', 'typescript'] }], \ ['maksimr/vim-jsbeautify', { 'on_ft': 'javascript' }],
\ ['MaxMEllon/vim-jsx-pretty', { 'on_ft' : 'javascript' }], \ ['mmalecki/vim-node.js', { 'on_ft': 'javascript' }],
\ ['ternjs/tern_for_vim', { 'on_ft' : 'javascript', 'build' : 'npm install' }], \ ['moll/vim-node', { 'on_ft': 'javascript' }],
\ ['Galooshi/vim-import-js', { 'on_ft' : 'javascript', 'build' : 'npm install -g import-js' }], \ ['othree/es.next.syntax.vim', { 'on_ft': 'javascript' }],
\ ['maksimr/vim-jsbeautify', { 'on_ft' : 'javascript' }], \ ['othree/javascript-libraries-syntax.vim', {
\ ['mmalecki/vim-node.js', { 'on_ft' : 'javascript' }], \ 'on_ft': ['javascript', 'coffee', 'ls', 'typescript'] }],
\ ['othree/yajs.vim', { 'on_ft': 'javascript' }],
\ ['pangloss/vim-javascript', { 'on_ft': 'javascript' }],
\ ] \ ]
if has('nvim') if !s:use_lsp
call add(plugins,['carlitux/deoplete-ternjs', { 'on_ft' : ['javascript'] }]) call add(plugins, ['ternjs/tern_for_vim', {
\ 'on_ft': 'javascript', 'build' : 'npm install' }])
call add(plugins, ['carlitux/deoplete-ternjs', { 'on_ft': [
\ 'javascript'], 'if': has('nvim') }])
endif endif
return plugins return plugins
endfunction endfunction
let s:use_lsp = 0
let s:auto_fix = 0 let s:auto_fix = 0
function! SpaceVim#layers#lang#javascript#set_variable(var) abort function! SpaceVim#layers#lang#javascript#set_variable(var) abort
let s:use_lsp = get(a:var, 'use_lsp', 0) && has('nvim')
\ && executable('javascript-typescript-stdio')
let s:auto_fix = get(a:var, 'auto_fix', 0) let s:auto_fix = get(a:var, 'auto_fix', 0)
endfunction endfunction
@ -34,9 +42,17 @@ function! SpaceVim#layers#lang#javascript#config() abort
let g:vim_jsx_pretty_colorful_config = 1 let g:vim_jsx_pretty_colorful_config = 1
" }}} " }}}
call SpaceVim#mapping#gd#add('javascript', function('s:gotodef'))
call SpaceVim#plugins#runner#reg_runner('javascript', 'node %s') call SpaceVim#plugins#runner#reg_runner('javascript', 'node %s')
call SpaceVim#mapping#space#regesit_lang_mappings('javascript', funcref('s:language_specified_mappings')) call SpaceVim#mapping#space#regesit_lang_mappings('javascript',
\ funcref('s:on_ft'))
if s:use_lsp
call SpaceVim#lsp#reg_server('javascript', ['javascript-typescript-stdio'])
call SpaceVim#mapping#gd#add('javascript',
\ function('SpaceVim#lsp#go_to_def'))
else
call SpaceVim#mapping#gd#add('javascript', function('s:tern_go_to_def'))
endif
if s:auto_fix if s:auto_fix
" Only use eslint " Only use eslint
@ -52,12 +68,7 @@ function! SpaceVim#layers#lang#javascript#config() abort
endif endif
endfunction endfunction
function! s:language_specified_mappings() abort function! s:on_ft() abort
" ternjs/tern_for_vim {{{
call SpaceVim#mapping#space#langSPC('nnoremap', ['l', 'd'], 'TernDoc', 'Look up the documentation of something', 1)
call SpaceVim#mapping#space#langSPC('nnoremap', ['l', 'e'], 'TernRename', 'Rename the variable under the cursor', 1)
" }}}
" Galooshi/vim-import-js {{{ " Galooshi/vim-import-js {{{
nnoremap <silent><buffer> <F4> :ImportJSWord<CR> nnoremap <silent><buffer> <F4> :ImportJSWord<CR>
nnoremap <silent><buffer> <Leader>ji :ImportJSWord<CR> nnoremap <silent><buffer> <Leader>ji :ImportJSWord<CR>
@ -70,14 +81,28 @@ function! s:language_specified_mappings() abort
inoremap <silent><buffer> <C-j>g <Esc>:ImportJSGoto<CR>a inoremap <silent><buffer> <C-j>g <Esc>:ImportJSGoto<CR>a
" }}} " }}}
call SpaceVim#mapping#space#langSPC('nnoremap', ['l', 'r'], 'call SpaceVim#plugins#runner#open()', 'execute current file', 1) if s:use_lsp
nnoremap <silent><buffer> K :call SpaceVim#lsp#show_doc()<CR>
call SpaceVim#mapping#space#langSPC('nnoremap', ['l', 'd'],
\ 'call SpaceVim#lsp#show_doc()', 'show_document', 1)
call SpaceVim#mapping#space#langSPC('nnoremap', ['l', 'e'],
\ 'call SpaceVim#lsp#rename()', 'rename symbol', 1)
else
call SpaceVim#mapping#space#langSPC('nnoremap', ['l', 'd'], 'TernDoc',
\ 'show document', 1)
call SpaceVim#mapping#space#langSPC('nnoremap', ['l', 'e'], 'TernRename',
\ 'rename symbol', 1)
endif
call SpaceVim#mapping#space#langSPC('nnoremap', ['l', 'r'],
\ 'call SpaceVim#plugins#runner#open()', 'execute current file', 1)
endfunction endfunction
function! s:gotodef() abort function! s:tern_go_to_def() abort
if exists(':TernDef') if exists(':TernDef')
TernDef TernDef
endif endif
endfunction endfunction
" vi: et sw=2 cc=80
" vim:set et sw=2 cc=80:

View File

@ -18,6 +18,7 @@ function! SpaceVim#layers#lang#python#plugins() abort
endif endif
call add(plugins, ['Vimjas/vim-python-pep8-indent', call add(plugins, ['Vimjas/vim-python-pep8-indent',
\ { 'on_ft' : 'python'}]) \ { 'on_ft' : 'python'}])
call add(plugins, ['tell-k/vim-autoflake', {'merged' : 0}])
return plugins return plugins
endfunction endfunction
@ -29,12 +30,36 @@ function! SpaceVim#layers#lang#python#config() abort
\ '# -*- coding: utf-8 -*-', \ '# -*- coding: utf-8 -*-',
\ ''] \ '']
\ ) \ )
let g:no_autoflake_maps = 1
if executable('ipython')
call SpaceVim#plugins#repl#reg('python', 'ipython')
elseif executable('python')
call SpaceVim#plugins#repl#reg('python', 'python')
endif
endfunction endfunction
function! s:language_specified_mappings() abort function! s:language_specified_mappings() abort
call SpaceVim#mapping#space#langSPC('nmap', ['l','r'], call SpaceVim#mapping#space#langSPC('nmap', ['l','r'],
\ 'call SpaceVim#plugins#runner#open()', \ 'call SpaceVim#plugins#runner#open()',
\ 'execute current file', 1) \ 'execute current file', 1)
let g:_spacevim_mappings_space.l.i = {'name' : '+Imports'}
call SpaceVim#mapping#space#langSPC('nmap', ['l','i', 's'],
\ 'Neoformat isort',
\ 'sort imports', 1)
call SpaceVim#mapping#space#langSPC('nmap', ['l','i', 'r'],
\ 'Autoflake',
\ 'remove unused imports', 1)
let g:_spacevim_mappings_space.l.s = {'name' : '+Send'}
call SpaceVim#mapping#space#langSPC('nmap', ['l','s', 'i'],
\ 'call SpaceVim#plugins#repl#start("python")',
\ 'start REPL process', 1)
call SpaceVim#mapping#space#langSPC('nmap', ['l','s', 'l'],
\ 'call SpaceVim#plugins#repl#send("line")',
\ 'send line and keep code buffer focused', 1)
call SpaceVim#mapping#space#langSPC('nmap', ['l','s', 'b'],
\ 'call SpaceVim#plugins#repl#send("buffer")',
\ 'send buffer and keep code buffer focused', 1)
call SpaceVim#mapping#space#langSPC('nmap', ['l','s', 's'],
\ 'call SpaceVim#plugins#repl#send("selection")',
\ 'send selection and keep code buffer focused', 1)
endfunction endfunction

View File

@ -8,15 +8,33 @@
function! SpaceVim#layers#lang#ruby#plugins() abort function! SpaceVim#layers#lang#ruby#plugins() abort
return [ return [
\ ['vim-ruby/vim-ruby', { 'on_ft' : 'ruby' }] \ ['vim-ruby/vim-ruby', { 'on_ft' : 'ruby' }]
\ ] \ ]
endfunction endfunction
function! SpaceVim#layers#lang#ruby#config() abort function! SpaceVim#layers#lang#ruby#config() abort
call SpaceVim#plugins#runner#reg_runner('ruby', 'ruby %s') call SpaceVim#plugins#runner#reg_runner('ruby', 'ruby %s')
call SpaceVim#mapping#space#regesit_lang_mappings('ruby', funcref('s:language_specified_mappings')) call SpaceVim#mapping#space#regesit_lang_mappings('ruby', funcref('s:language_specified_mappings'))
call SpaceVim#plugins#repl#reg('ruby', 'irb')
endfunction endfunction
function! s:language_specified_mappings() abort function! s:language_specified_mappings() abort
call SpaceVim#mapping#space#langSPC('nmap', ['l', 'r'], 'call SpaceVim#plugins#runner#open()', 'execute current file', 1) call SpaceVim#mapping#space#langSPC('nmap', ['l', 'r'], 'call SpaceVim#plugins#runner#open()', 'execute current file', 1)
let g:_spacevim_mappings_space.l.s = {'name' : '+Send'}
call SpaceVim#mapping#space#langSPC('nmap', ['l','s', 'i'],
\ 'call SpaceVim#plugins#repl#start("ruby")',
\ 'start REPL process', 1)
call SpaceVim#mapping#space#langSPC('nmap', ['l','s', 'l'],
\ 'call SpaceVim#plugins#repl#send("line")',
\ 'send line and keep code buffer focused', 1)
call SpaceVim#mapping#space#langSPC('nmap', ['l','s', 'b'],
\ 'call SpaceVim#plugins#repl#send("buffer")',
\ 'send buffer and keep code buffer focused', 1)
call SpaceVim#mapping#space#langSPC('nmap', ['l','s', 's'],
\ 'call SpaceVim#plugins#repl#send("selection")',
\ 'send selection and keep code buffer focused', 1)
let g:_spacevim_mappings_space.l.c = {'name' : '+RuboCop'}
call SpaceVim#mapping#space#langSPC('nmap', ['l','c', 'f'],
\ 'Noeformat rubocop',
\ 'Runs RuboCop on the currently visited file', 1)
endfunction endfunction

View File

@ -1,7 +1,12 @@
function! SpaceVim#layers#lang#javascript#plugins() abort function! SpaceVim#layers#lang#sh#plugins() abort
return [ let l:plugins = []
\ ['chrisbra/vim-zsh', { 'on_ft' : 'zsh' }] call add(l:plugins, ['chrisbra/vim-zsh', { 'on_ft' : 'zsh' }])
\ ] if get(g:, 'spacevim_enable_ycm') == 1
call add(l:plugins, ['Valodim/vim-zsh-completion', { 'on_ft' : 'zsh' }])
else
call add(l:plugins, ['zchee/deoplete-zsh', { 'on_ft' : 'zsh' }])
endif
return l:plugins
endfunction endfunction
function! SpaceVim#layers#lang#sh#config() function! SpaceVim#layers#lang#sh#config()

View File

@ -58,7 +58,7 @@ function! SpaceVim#layers#lsp#config() abort
let g:LanguageClient_diagnosticsDisplay[4].signTexthl = 'ALEInfoSign' let g:LanguageClient_diagnosticsDisplay[4].signTexthl = 'ALEInfoSign'
endif endif
let g:LanguageClient_autoStart = 0 let g:LanguageClient_autoStart = 1
" }}} " }}}
endfunction endfunction

View File

@ -69,7 +69,7 @@ function! s:open_default_shell() abort
if has('nvim') if has('nvim')
exe 'terminal' exe 'terminal'
else else
call term_start('bash', {'curwin' : 1, 'term_finish' : 'close'}) call term_start($SHELL, {'curwin' : 1, 'term_finish' : 'close'})
endif endif
let s:shell_win_nr = winnr() let s:shell_win_nr = winnr()
let w:shell_layer_win = 1 let w:shell_layer_win = 1

View File

@ -19,21 +19,27 @@
" < " <
function! SpaceVim#layers#tmux#plugins() abort function! SpaceVim#layers#tmux#plugins() abort
let plugins = [] let plugins = [
call add(plugins,['christoomey/vim-tmux-navigator', {'merged' : 0}]) \ ['christoomey/vim-tmux-navigator', { 'on_cmd': [
return plugins \ 'TmuxNavigateLeft', 'TmuxNavigateDown', 'TmuxNavigateUp',
\ 'TmuxNavigateRight'] }],
\ ]
return plugins
endfunction endfunction
function! SpaceVim#layers#tmux#config() abort function! SpaceVim#layers#tmux#config() abort
let g:tmux_navigator_no_mappings = 1 let g:tmux_navigator_no_mappings = 1
augroup spacevim_layer_tmux
au! augroup SpaceVim_layer_tmux
au VimEnter * call s:tmuxMappings() autocmd!
augroup END autocmd FocusGained * set cursorline
func s:tmuxMappings() autocmd FocusLost * set nocursorline | redraw!
nnoremap <silent> <C-h> :TmuxNavigateLeft<cr> augroup END
nnoremap <silent> <C-j> :TmuxNavigateDown<cr>
nnoremap <silent> <C-k> :TmuxNavigateUp<cr> nnoremap <silent> <C-h> :TmuxNavigateLeft<CR>
nnoremap <silent> <C-l> :TmuxNavigateRight<cr> nnoremap <silent> <C-j> :TmuxNavigateDown<CR>
endf nnoremap <silent> <C-k> :TmuxNavigateUp<CR>
nnoremap <silent> <C-l> :TmuxNavigateRight<CR>
endfunction endfunction

View File

@ -12,6 +12,7 @@ function! SpaceVim#layers#tools#plugins() abort
\ 'loadconf' : 1, \ 'loadconf' : 1,
\ 'merged' : 0}], \ 'merged' : 0}],
\ ['MattesGroeger/vim-bookmarks', { 'on_map' : '<Plug>Bookmark', \ ['MattesGroeger/vim-bookmarks', { 'on_map' : '<Plug>Bookmark',
\ 'on_cmd' : 'BookmarkShowAll',
\ 'loadconf_before' : 1}], \ 'loadconf_before' : 1}],
\ ['simnalamburt/vim-mundo', { 'on_cmd' : 'MundoToggle'}], \ ['simnalamburt/vim-mundo', { 'on_cmd' : 'MundoToggle'}],
\ ['mhinz/vim-grepper' , { 'on_cmd' : 'Grepper', \ ['mhinz/vim-grepper' , { 'on_cmd' : 'Grepper',

22
autoload/SpaceVim/lsp.vim Normal file
View File

@ -0,0 +1,22 @@
scriptencoding utf-8
" lsp.vim
" author: Seong Yong-ju ( @sei40kr )
function! SpaceVim#lsp#reg_server(ft, cmds) abort
let g:LanguageClient_serverCommands[a:ft] = copy(a:cmds)
endfunction
function! SpaceVim#lsp#show_doc() abort
call LanguageClient_textDocument_hover()
endfunction
function! SpaceVim#lsp#go_to_def() abort
call LanguageClient_textDocument_definition()
endfunction
function! SpaceVim#lsp#rename() abort
call LanguageClient_textDocument_rename()
endfunction
" vi: et sw=2 cc=80

View File

@ -79,9 +79,15 @@ function! SpaceVim#mapping#def(type, key, value, ...) abort
endif endif
endfunction endfunction
function! SpaceVim#mapping#shift_tab() abort if g:spacevim_snippet_engine ==# 'neosnippet'
return pumvisible() ? "\<C-p>" : "\<Plug>delimitMateS-Tab" function! SpaceVim#mapping#shift_tab() abort
endfunction return pumvisible() ? "\<C-p>" : "\<Plug>delimitMateS-Tab"
endfunction
elseif g:spacevim_snippet_engine ==# 'ultisnips'
function! SpaceVim#mapping#shift_tab() abort
return pumvisible() ? "\<C-p>" : "\<C-R>=UltiSnips#JumpForwards()\<CR>\<C-R>=cmp#ultisnips#JumpForward()\<CR>"
endfunction
endif
function! SpaceVim#mapping#tab() abort function! SpaceVim#mapping#tab() abort
return SpaceVim#mapping#tab#i_tab() return SpaceVim#mapping#tab#i_tab()

View File

@ -299,6 +299,26 @@ function! s:create_string(layout) " {{{
return output return output
endfunction " }}} endfunction " }}}
let s:VIMH = SpaceVim#api#import('vim#highlight')
function! s:highlight_cursor() abort
let info = {
\ 'name' : 'SpaceVimGuideCursor',
\ 'guibg' : synIDattr(synIDtrans(synID(line('.'), col('.'), 1)), 'guifg'),
\ 'guifg' : synIDattr(synIDtrans(synID(line('.'), col('.'), 1)), 'guibg'),
\ 'ctermbg' : synIDattr(synIDtrans(synID(line('.'), col('.'), 1)), 'ctermfg'),
\ 'ctermfg' : synIDattr(synIDtrans(synID(line('.'), col('.'), 1)), 'ctermbg'),
\ }
hi def link SpaceVimGuideCursor Cursor
call s:VIMH.hi(info)
let s:cursor_hi = matchaddpos('SpaceVimGuideCursor', [[line('.'), col('.'), 1]])
endfunction
function! s:remove_cursor_highlight() abort
try
call matchdelete(s:cursor_hi)
catch
endtry
endfunction
" @vimlint(EVL102, 1, l:string) " @vimlint(EVL102, 1, l:string)
function! s:start_buffer() " {{{ function! s:start_buffer() " {{{
@ -377,6 +397,7 @@ function! s:winopen() " {{{
if !exists('s:bufnr') if !exists('s:bufnr')
let s:bufnr = -1 let s:bufnr = -1
endif endif
call s:highlight_cursor()
let pos = g:leaderGuide_position ==? 'topleft' ? 'topleft' : 'botright' let pos = g:leaderGuide_position ==? 'topleft' ? 'topleft' : 'botright'
if bufexists(s:bufnr) if bufexists(s:bufnr)
let qfbuf = &buftype ==# 'quickfix' let qfbuf = &buftype ==# 'quickfix'
@ -448,6 +469,7 @@ function! s:winclose() " {{{
noautocmd execute s:winnr.'wincmd w' noautocmd execute s:winnr.'wincmd w'
call winrestview(s:winv) call winrestview(s:winv)
endif endif
call s:remove_cursor_highlight()
endfunction " }}} endfunction " }}}
function! s:page_down() " {{{ function! s:page_down() " {{{
call feedkeys("\<c-c>", "n") call feedkeys("\<c-c>", "n")

View File

@ -17,10 +17,12 @@ function! SpaceVim#mapping#space#init() abort
let g:_spacevim_mappings_space.w = {'name' : '+Windows'} let g:_spacevim_mappings_space.w = {'name' : '+Windows'}
let g:_spacevim_mappings_space.p = {'name' : '+Projects'} let g:_spacevim_mappings_space.p = {'name' : '+Projects'}
let g:_spacevim_mappings_space.h = {'name' : '+Help'} let g:_spacevim_mappings_space.h = {'name' : '+Help'}
let g:_spacevim_mappings_space.n = {'name' : '+Narrow/Numbers'}
let g:_spacevim_mappings_space.q = {'name' : '+Quit'} let g:_spacevim_mappings_space.q = {'name' : '+Quit'}
let g:_spacevim_mappings_space.l = {'name' : '+Language Specified'} let g:_spacevim_mappings_space.l = {'name' : '+Language Specified'}
let g:_spacevim_mappings_space.s = {'name' : '+Searching'} let g:_spacevim_mappings_space.s = {'name' : '+Searching'}
let g:_spacevim_mappings_space.r = {'name' : '+Registers/rings/resume'} let g:_spacevim_mappings_space.r = {'name' : '+Registers/rings/resume'}
let g:_spacevim_mappings_space.d = {'name' : '+Debug'}
if s:has_map_to_spc() if s:has_map_to_spc()
return return
endif endif

View File

@ -20,9 +20,23 @@ if g:spacevim_snippet_engine ==# 'neosnippet'
endif endif
endfunction endfunction
elseif g:spacevim_snippet_engine ==# 'ultisnips' elseif g:spacevim_snippet_engine ==# 'ultisnips'
function! SpaceVim#mapping#tab#expandable()
let snippet = UltiSnips#ExpandSnippetOrJump()
if g:ulti_expand_or_jump_res > 0
return snippet
elseif pumvisible()
return "\<C-n>"
else
return "\<TAB>"
endif
endfunction
function! SpaceVim#mapping#tab#i_tab() abort function! SpaceVim#mapping#tab#i_tab() abort
return "\<tab>" if getline('.')[col('.')-2] ==# '{'&& pumvisible()
return "\<C-n>"
endif
return "\<C-R>=SpaceVim#mapping#tab#expandable()\<cr>"
endfunction endfunction
endif endif
" vim:set et sw=2 cc=80: " vim:set et sw=2 cc=80:

View File

@ -5,15 +5,15 @@ let s:grepid = 0
function! SpaceVim#plugins#flygrep#open() abort function! SpaceVim#plugins#flygrep#open() abort
rightbelow split __flygrep__ rightbelow split __flygrep__
setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline nospell nonu norelativenumber setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline nospell nonu norelativenumber
let save_tve = &t_ve let save_tve = &t_ve
setlocal t_ve= setlocal t_ve=
" setlocal nomodifiable " setlocal nomodifiable
setf SpaceVimFlyGrep setf SpaceVimFlyGrep
redraw! redraw!
call s:MPT.open() call s:MPT.open()
let &t_ve = save_tve let &t_ve = save_tve
endfunction endfunction
let s:grep_expr = '' let s:grep_expr = ''
@ -22,53 +22,53 @@ let s:grep_timer_id = 0
" @vimlint(EVL103, 1, a:timer) " @vimlint(EVL103, 1, a:timer)
function! s:grep_timer(timer) abort function! s:grep_timer(timer) abort
let s:grepid = s:JOB.start(s:get_search_cmd(s:grep_exe, s:grep_expr), { let s:grepid = s:JOB.start(s:get_search_cmd(s:grep_exe, s:grep_expr), {
\ 'on_stdout' : function('s:grep_stdout'), \ 'on_stdout' : function('s:grep_stdout'),
\ 'in_io' : 'null', \ 'in_io' : 'null',
\ 'on_exit' : function('s:grep_exit'), \ 'on_exit' : function('s:grep_exit'),
\ }) \ })
endfunction endfunction
" @vimlint(EVL103, 0, a:timer) " @vimlint(EVL103, 0, a:timer)
function! s:flygrep(expr) abort function! s:flygrep(expr) abort
call s:MPT._build_prompt() call s:MPT._build_prompt()
if a:expr ==# '' if a:expr ==# ''
redrawstatus redrawstatus
return return
endif endif
try try
syn clear FileNames call matchdelete(s:hi_id)
catch catch
endtr endtr
exe 'syn match FileNames /' . substitute(a:expr, '\([/\\]\)', '\\\1', 'g') . '/' hi def link FileNames MoreMsg
hi def link FileNames MoreMsg let s:hi_id = matchadd('FileNames', a:expr, 1)
let s:grep_expr = a:expr let s:grep_expr = a:expr
let s:grep_timer_id = timer_start(500, funcref('s:grep_timer'), {'repeat' : 1}) let s:grep_timer_id = timer_start(500, funcref('s:grep_timer'), {'repeat' : 1})
endfunction endfunction
let s:MPT._handle_fly = function('s:flygrep') let s:MPT._handle_fly = function('s:flygrep')
function! s:close_buffer() abort function! s:close_buffer() abort
if s:grepid != 0 if s:grepid != 0
call s:JOB.stop(s:grepid) call s:JOB.stop(s:grepid)
endif endif
if s:grep_timer_id != 0 if s:grep_timer_id != 0
call timer_stop(s:grep_timer_id) call timer_stop(s:grep_timer_id)
endif endif
q q
endfunction endfunction
let s:MPT._onclose = function('s:close_buffer') let s:MPT._onclose = function('s:close_buffer')
function! s:close_grep_job() abort function! s:close_grep_job() abort
if s:grepid != 0 if s:grepid != 0
call s:JOB.stop(s:grepid) call s:JOB.stop(s:grepid)
endif endif
if s:grep_timer_id != 0 if s:grep_timer_id != 0
call timer_stop(s:grep_timer_id) call timer_stop(s:grep_timer_id)
endif endif
normal! "_ggdG normal! "_ggdG
endfunction endfunction
let s:MPT._oninputpro = function('s:close_grep_job') let s:MPT._oninputpro = function('s:close_grep_job')
@ -77,18 +77,18 @@ let s:MPT._oninputpro = function('s:close_grep_job')
" @vimlint(EVL103, 1, a:id) " @vimlint(EVL103, 1, a:id)
" @vimlint(EVL103, 1, a:event) " @vimlint(EVL103, 1, a:event)
function! s:grep_stdout(id, data, event) abort function! s:grep_stdout(id, data, event) abort
let datas =filter(a:data, '!empty(v:val)') let datas =filter(a:data, '!empty(v:val)')
if getline(1) ==# '' if getline(1) ==# ''
call setline(1, datas) call setline(1, datas)
else else
call append('$', datas) call append('$', datas)
endif endif
call s:MPT._build_prompt() call s:MPT._build_prompt()
endfunction endfunction
function! s:grep_exit(id, data, event) abort function! s:grep_exit(id, data, event) abort
redrawstatus redrawstatus
let s:grepid = 0 let s:grepid = 0
endfunction endfunction
" @vimlint(EVL103, 0, a:data) " @vimlint(EVL103, 0, a:data)
@ -96,98 +96,113 @@ endfunction
" @vimlint(EVL103, 0, a:event) " @vimlint(EVL103, 0, a:event)
function! s:get_search_cmd(exe, expr) abort function! s:get_search_cmd(exe, expr) abort
if a:exe ==# 'grep' if a:exe ==# 'grep'
return ['grep', '-inHR', '--exclude-dir', '.git', a:expr, '.'] return ['grep', '-inHR', '--exclude-dir', '.git', a:expr, '.']
elseif a:exe ==# 'rg' elseif a:exe ==# 'rg'
return ['rg', '-n', '-i', a:expr] return ['rg', '-n', '-i', a:expr]
else else
return [a:exe, a:expr] return [a:exe, a:expr]
endif endif
endfunction endfunction
function! s:next_item() abort function! s:next_item() abort
if line('.') == line('$') if line('.') == line('$')
normal! gg normal! gg
else else
normal! j normal! j
endif endif
redrawstatus redrawstatus
call s:MPT._build_prompt() call s:MPT._build_prompt()
endfunction endfunction
function! s:previous_item() abort function! s:previous_item() abort
if line('.') == 1 if line('.') == 1
normal! G normal! G
else else
normal! k normal! k
endif endif
redrawstatus redrawstatus
call s:MPT._build_prompt() call s:MPT._build_prompt()
endfunction endfunction
function! s:open_item() abort function! s:open_item() abort
if getline('.') !=# '' if getline('.') !=# ''
if s:grepid != 0 if s:grepid != 0
call s:JOB.stop(s:grepid) call s:JOB.stop(s:grepid)
endif
call s:MPT._clear_prompt()
let s:MPT._quit = 1
let line = getline('.')
let filename = fnameescape(split(line, ':\d\+:')[0])
let linenr = matchstr(line, ':\d\+:')[1:-2]
q
exe 'e ' . filename
exe linenr
endif endif
call s:MPT._clear_prompt()
let s:MPT._quit = 1
let line = getline('.')
let filename = fnameescape(split(line, ':\d\+:')[0])
let linenr = matchstr(line, ':\d\+:')[1:-2]
q
exe 'e ' . filename
exe linenr
endif
endfunction endfunction
function! s:double_click() abort function! s:double_click() abort
if line('.') !=# '' if line('.') !=# ''
if s:grepid != 0 if s:grepid != 0
call s:JOB.stop(s:grepid) call s:JOB.stop(s:grepid)
endif
call s:MPT._clear_prompt()
let s:MPT._quit = 1
let isfname = &isfname
if s:SYS.isWindows
set isfname-=:
endif
normal! gF
let nr = bufnr('%')
q
exe 'silent b' . nr
normal! :
let &isfname = isfname
endif endif
call s:MPT._clear_prompt()
let s:MPT._quit = 1
let isfname = &isfname
if s:SYS.isWindows
set isfname-=:
endif
normal! gF
let nr = bufnr('%')
q
exe 'silent b' . nr
normal! :
let &isfname = isfname
endif
endfunction endfunction
function! s:move_cursor() abort function! s:move_cursor() abort
if v:mouse_win == winnr() if v:mouse_win == winnr()
let cl = line('.') let cl = line('.')
if cl < v:mouse_lnum if cl < v:mouse_lnum
exe 'normal! ' . (v:mouse_lnum - cl) . 'j' exe 'normal! ' . (v:mouse_lnum - cl) . 'j'
elseif cl > v:mouse_lnum elseif cl > v:mouse_lnum
exe 'normal! ' . (cl - v:mouse_lnum) . 'k' exe 'normal! ' . (cl - v:mouse_lnum) . 'k'
endif
endif endif
call s:MPT._build_prompt() endif
call s:MPT._build_prompt()
endfunction endfunction
let s:MPT._function_key = { let s:MPT._function_key = {
\ "\<Tab>" : function('s:next_item'), \ "\<Tab>" : function('s:next_item'),
\ "\<ScrollWheelDown>" : function('s:next_item'), \ "\<ScrollWheelDown>" : function('s:next_item'),
\ "\<S-tab>" : function('s:previous_item'), \ "\<S-tab>" : function('s:previous_item'),
\ "\<ScrollWheelUp>" : function('s:previous_item'), \ "\<ScrollWheelUp>" : function('s:previous_item'),
\ "\<Return>" : function('s:open_item'), \ "\<Return>" : function('s:open_item'),
\ "\<LeftMouse>" : function('s:move_cursor'), \ "\<LeftMouse>" : function('s:move_cursor'),
\ "\<2-LeftMouse>" : function('s:double_click'), \ "\<2-LeftMouse>" : function('s:double_click'),
\ } \ }
if has('nvim')
call extend(s:MPT._function_key,
\ {
\ "\x80\xfdJ" : function('s:previous_item'),
\ "\x80\xfc \x80\xfdJ" : function('s:previous_item'),
\ "\x80\xfc@\x80\xfdJ" : function('s:previous_item'),
\ "\x80\xfc`\x80\xfdJ" : function('s:previous_item'),
\ "\x80\xfdK" : function('s:next_item'),
\ "\x80\xfc \x80\xfdK" : function('s:next_item'),
\ "\x80\xfc@\x80\xfdK" : function('s:next_item'),
\ "\x80\xfc`\x80\xfdK" : function('s:next_item'),
\ }
\ )
endif
" statusline api " statusline api
function! SpaceVim#plugins#flygrep#lineNr() abort function! SpaceVim#plugins#flygrep#lineNr() abort
if getline(1) ==# '' if getline(1) ==# ''
return '' return ''
else else
return line('.') . '/' . line('$') return line('.') . '/' . line('$')
endif endif
endfunction endfunction

View File

@ -232,6 +232,7 @@ endfunction
" here if a:data == 0, git pull succeed " here if a:data == 0, git pull succeed
function! s:on_pull_exit(id, data, event) abort function! s:on_pull_exit(id, data, event) abort
call SpaceVim#logger#info(string(a:data))
if a:id == -1 if a:id == -1
let id = s:jobpid let id = s:jobpid
else else
@ -287,6 +288,7 @@ endfunction
" @vimlint(EVL103, 1, a:event) " @vimlint(EVL103, 1, a:event)
function! s:on_install_stdout(id, data, event) abort function! s:on_install_stdout(id, data, event) abort
call SpaceVim#logger#info(string(a:data))
if a:id == -1 if a:id == -1
let id = s:jobpid let id = s:jobpid
else else
@ -356,7 +358,8 @@ endfunction
function! s:pull(repo) abort function! s:pull(repo) abort
let s:pct += 1 let s:pct += 1
let s:ui_buf[a:repo.name] = s:pct let s:ui_buf[a:repo.name] = s:pct
let argv = ['git', '--git-dir', a:repo.path . '/.git', 'pull', '--progress'] let argv = ['git', '--git-dir', a:repo.path . '/.git', '--work-tree', a:repo.path, 'pull', '--progress']
call SpaceVim#logger#info('plugin manager cmd: ' . string(argv))
if s:JOB.vim_job || s:JOB.nvim_job if s:JOB.vim_job || s:JOB.nvim_job
let jobid = s:JOB.start(argv,{ let jobid = s:JOB.start(argv,{
\ 'on_stderr' : function('s:on_install_stdout'), \ 'on_stderr' : function('s:on_install_stdout'),

View File

@ -0,0 +1,183 @@
"=============================================================================
" repl.vim --- REPL process support 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')
augroup spacevim_repl
autocmd!
autocmd VimLeavePre * call s:close()
augroup END
function! SpaceVim#plugins#repl#start(ft) abort
let exe = get(s:exes, a:ft, '')
if !empty(exe)
call s:start(exe)
else
echohl WarningMsg
echo 'no REPL executable for current filetype'
echohl None
endif
endfunction
" supported argvs:
" buffer: send current buffer to REPL process
" line: send line under cursor to REPL process
" selection: send selection text to REPL process
function! SpaceVim#plugins#repl#send(type) abort
if a:type ==# 'line'
call s:JOB.send(s:job_id, [getline('.'), ''])
elseif a:type ==# 'buffer'
call s:JOB.send(s:job_id, getline(1, '$') + [''])
elseif a:type ==# 'selection'
else
endif
endfunction
function! s:start(exe) abort
let s:lines = 0
let s:status = {
\ 'is_running' : 1,
\ 'is_exit' : 0,
\ 'has_errors' : 0,
\ 'exit_code' : 0
\ }
let s:start_time = reltime()
call s:open_windows()
call s:BUFFER.buf_set_lines(s:bufnr, s:lines , s:lines + 3, 0, ['[REPL executable] ' . a:exe, '', repeat('-', 20)])
let s:lines += 3
let s:job_id = s:JOB.start(a:exe,{
\ 'on_stdout' : function('s:on_stdout'),
\ 'on_stderr' : function('s:on_stderr'),
\ 'on_exit' : function('s:on_exit'),
\ })
endfunction
" @vimlint(EVL103, 1, a:job_id)
" @vimlint(EVL103, 1, a:data)
" @vimlint(EVL103, 1, a:event)
if has('nvim') && exists('*chanclose')
let s:_out_data = ['']
function! s:on_stdout(job_id, data, event) abort
let s:_out_data[-1] .= a:data[0]
call extend(s:_out_data, a:data[1:])
if s:_out_data[-1] == ''
call remove(s:_out_data, -1)
let lines = s:_out_data
else
let lines = s:_out_data
endif
if !empty(lines)
call s:BUFFER.buf_set_lines(s:bufnr, s:lines , s:lines + 1, 0, lines)
endif
let s:lines += len(lines)
let s:_out_data = ['']
call s:update_statusline()
endfunction
let s:_err_data = ['']
function! s:on_stderr(job_id, data, event) abort
let s:_out_data[-1] .= a:data[0]
call extend(s:_out_data, a:data[1:])
if s:_out_data[-1] ==# ''
call remove(s:_out_data, -1)
let lines = s:_out_data
else
let lines = s:_out_data
endif
if !empty(lines)
call s:BUFFER.buf_set_lines(s:bufnr, s:lines , s:lines + 1, 0, lines)
endif
let s:lines += len(lines)
let s:_out_data = ['']
call s:update_statusline()
endfunction
else
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
endif
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
let done = ['', '[Done] exited with code=' . a:data . ' in ' . s:STRING.trim(reltimestr(s:end_time)) . ' seconds']
if bufexists(s:bufnr)
call s:BUFFER.buf_set_lines(s:bufnr, s:lines , s:lines + 1, 0, done)
endif
call s:update_statusline()
endfunction
function! s:update_statusline() abort
redrawstatus!
endfunction
" @vimlint(EVL103, 0, a:job_id)
" @vimlint(EVL103, 0, a:data)
" @vimlint(EVL103, 0, a:event)
function! s:close() abort
if exists('s:job_id') && s:job_id != 0
call s:JOB.stop(s:job_id)
let s:job_id = 0
endif
if s:bufnr != 0 && bufexists(s:bufnr)
exe 'bd ' s:bufnr
endif
endfunction
let s:exes = {}
function! SpaceVim#plugins#repl#reg(ft, execute) abort
call extend(s:exes, {a:ft : a:execute})
endfunction
function! SpaceVim#plugins#repl#status() abort
if s:status.is_running == 1
return 'running'
elseif s:status.is_exit == 1
return 'exit code : ' . s:status.exit_code
\ . ' time: ' . s:STRING.trim(reltimestr(s:end_time))
endif
endfunction
let s:bufnr = 0
function! s:open_windows() abort
if s:bufnr != 0 && bufexists(s:bufnr)
exe 'bd ' . s:bufnr
endif
botright split __REPL__
let lines = &lines * 30 / 100
exe 'resize ' . lines
setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline nospell nonu norelativenumber
set filetype=SpaceVimREPL
nnoremap <silent><buffer> q :call <SID>close()<cr>
let s:bufnr = bufnr('%')
wincmd p
endfunction

View File

@ -10,6 +10,7 @@ let s:JOB = SpaceVim#api#import('job')
let s:BUFFER = SpaceVim#api#import('vim#buffer') let s:BUFFER = SpaceVim#api#import('vim#buffer')
let s:STRING = SpaceVim#api#import('data#string') let s:STRING = SpaceVim#api#import('data#string')
let s:runners = {} let s:runners = {}
let s:bufnr = 0 let s:bufnr = 0
@ -33,6 +34,8 @@ let s:target = ''
function! s:async_run(runner) abort function! s:async_run(runner) abort
if type(a:runner) == type('') if type(a:runner) == type('')
let cmd = printf(a:runner, bufname('%')) let cmd = printf(a:runner, bufname('%'))
call s:BUFFER.buf_set_lines(s:bufnr, s:lines , s:lines + 3, 0, ['[Running] ' . cmd, '', repeat('-', 20)])
let s:lines += 3
let s:start_time = reltime() let s:start_time = reltime()
let s:job_id = s:JOB.start(cmd,{ let s:job_id = s:JOB.start(cmd,{
\ 'on_stdout' : function('s:on_stdout'), \ 'on_stdout' : function('s:on_stdout'),
@ -42,6 +45,12 @@ function! s:async_run(runner) abort
elseif type(a:runner) == type([]) elseif type(a:runner) == type([])
let s:target = tempname() let s:target = tempname()
let compile_cmd = substitute(printf(a:runner[0], bufname('%')), '#TEMP#', s:target, 'g') let compile_cmd = substitute(printf(a:runner[0], bufname('%')), '#TEMP#', s:target, 'g')
call s:BUFFER.buf_set_lines(s:bufnr, s:lines , s:lines + 3, 0, [
\ '[Compile] ' . compile_cmd,
\ '[Running] ' . s:target,
\ '',
\ repeat('-', 20)])
let s:lines += 4
let s:start_time = reltime() let s:start_time = reltime()
let s:job_id = s:JOB.start(compile_cmd,{ let s:job_id = s:JOB.start(compile_cmd,{
\ 'on_stdout' : function('s:on_stdout'), \ 'on_stdout' : function('s:on_stdout'),
@ -58,6 +67,13 @@ function! s:on_compile_exit(id, data, event) abort
\ 'on_stderr' : function('s:on_stderr'), \ 'on_stderr' : function('s:on_stderr'),
\ 'on_exit' : function('s:on_exit'), \ 'on_exit' : function('s:on_exit'),
\ }) \ })
else
let s:end_time = reltime(s:start_time)
let s:status.is_exit = 1
let s:status.exit_code = a:data
let done = ['', '[Done] exited with code=' . a:data . ' in ' . s:STRING.trim(reltimestr(s:end_time)) . ' seconds']
call s:BUFFER.buf_set_lines(s:bufnr, s:lines , s:lines + 1, 0, done)
call s:update_statusline()
endif endif
endfunction endfunction
@ -84,27 +100,67 @@ function! SpaceVim#plugins#runner#open() abort
call s:update_statusline() call s:update_statusline()
endif endif
endfunction endfunction
" @vimlint(EVL103, 1, a:job_id) " @vimlint(EVL103, 1, a:job_id)
" @vimlint(EVL103, 1, a:data) " @vimlint(EVL103, 1, a:data)
" @vimlint(EVL103, 1, a:event) " @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 if has('nvim') && exists('*chanclose')
let s:status.has_errors = 1 let s:_out_data = ['']
call s:BUFFER.buf_set_lines(s:bufnr, s:lines , s:lines + 1, 0, a:data) function! s:on_stdout(job_id, data, event) abort
let s:lines += len(a:data) let s:_out_data[-1] .= a:data[0]
call s:update_statusline() call extend(s:_out_data, a:data[1:])
endfunction if s:_out_data[-1] == ''
call remove(s:_out_data, -1)
let lines = s:_out_data
else
let lines = s:_out_data
endif
if !empty(lines)
call s:BUFFER.buf_set_lines(s:bufnr, s:lines , s:lines + 1, 0, lines)
endif
let s:lines += len(lines)
let s:_out_data = ['']
call s:update_statusline()
endfunction
let s:_err_data = ['']
function! s:on_stderr(job_id, data, event) abort
let s:_out_data[-1] .= a:data[0]
call extend(s:_out_data, a:data[1:])
if s:_out_data[-1] == ''
call remove(s:_out_data, -1)
let lines = s:_out_data
else
let lines = s:_out_data
endif
if !empty(lines)
call s:BUFFER.buf_set_lines(s:bufnr, s:lines , s:lines + 1, 0, lines)
endif
let s:lines += len(lines)
let s:_out_data = ['']
call s:update_statusline()
endfunction
else
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
endif
function! s:on_exit(job_id, data, event) abort function! s:on_exit(job_id, data, event) abort
let s:end_time = reltime(s:start_time) let s:end_time = reltime(s:start_time)
let s:status.is_exit = 1 let s:status.is_exit = 1
let s:status.exit_code = a:data let s:status.exit_code = a:data
let done = ['', '[Done] exited with code=' . a:data . ' in ' . s:STRING.trim(reltimestr(s:end_time)) . ' seconds']
call s:BUFFER.buf_set_lines(s:bufnr, s:lines , s:lines + 1, 0, done)
call s:update_statusline() call s:update_statusline()
endfunction endfunction
@ -130,5 +186,5 @@ function! SpaceVim#plugins#runner#close() abort
if s:status.is_exit == 0 if s:status.is_exit == 0
call s:JOB.close(s:job_id) call s:JOB.close(s:job_id)
endif endif
exe 'bd' s:bufnr exe 'bd ' s:bufnr
endfunction endfunction

View File

@ -12,4 +12,18 @@ function! SpaceVim#util#echoWarn(msg) abort
echohl None echohl None
endfunction endfunction
function! SpaceVim#util#haspyxlib(lib) abort
try
if has('nvim')
exe 'py import ' . a:lib
else
exe 'pyx import ' . a:lib
endif
catch
return 0
endtry
return 1
endfunction
" vim:set et sw=2 cc=80: " vim:set et sw=2 cc=80:

View File

@ -277,7 +277,7 @@ fu! zvim#util#Generate_ignore(ignore,tool, ...) abort
if a:tool ==# 'ag' if a:tool ==# 'ag'
for ig in split(a:ignore,',') for ig in split(a:ignore,',')
call add(ignore, '--ignore') call add(ignore, '--ignore')
call add(ignore, ig ) call add(ignore, "'" . ig . "'")
endfor endfor
elseif a:tool ==# 'rg' elseif a:tool ==# 'rg'
for ig in split(a:ignore,',') for ig in split(a:ignore,',')

View File

@ -1,3 +1,11 @@
"=============================================================================
" main.vim --- Main file of SpaceVim
" Copyright (c) 2016-2017 Shidong Wang & Contributors
" Author: Shidong Wang < wsdjeg at 163.com >
" URL: https://spacevim.org
" License: MIT license
"=============================================================================
let g:Config_Main_Home = fnamemodify(expand('<sfile>'), let g:Config_Main_Home = fnamemodify(expand('<sfile>'),
\ ':p:h:gs?\\?'.((has('win16') || has('win32') \ ':p:h:gs?\\?'.((has('win16') || has('win32')
\ || has('win64'))?'\':'/') . '?') \ || has('win64'))?'\':'/') . '?')

View File

@ -85,6 +85,9 @@ let g:deoplete#ignore_sources.c = get(g:deoplete#ignore_sources, 'c', ['omni'])
let g:deoplete#ignore_sources.rust = get(g:deoplete#ignore_sources, 'rust', ['omni']) let g:deoplete#ignore_sources.rust = get(g:deoplete#ignore_sources, 'rust', ['omni'])
call deoplete#custom#set('racer', 'mark', '') call deoplete#custom#set('racer', 'mark', '')
" vim
let g:deoplete#ignore_sources.vim = get(g:deoplete#ignore_sources, 'vim', ['tag'])
" clojure " clojure
let g:deoplete#keyword_patterns.clojure = '[\w!$%&*+/:<=>?@\^_~\-\.#]*' let g:deoplete#keyword_patterns.clojure = '[\w!$%&*+/:<=>?@\^_~\-\.#]*'

View File

@ -4,6 +4,8 @@ if get(g:, 'spacevim_lint_on_save', 0)
let s:neomake_automake_events['BufWritePost'] = {'delay': 0} let s:neomake_automake_events['BufWritePost'] = {'delay': 0}
endif endif
let g:neomake_echo_current_error = 0
if get(g:, 'spacevim_lint_on_the_fly', 0) if get(g:, 'spacevim_lint_on_the_fly', 0)
let s:neomake_automake_events['TextChanged'] = {'delay': 750} let s:neomake_automake_events['TextChanged'] = {'delay': 750}
let s:neomake_automake_events['TextChangedI'] = {'delay': 750} let s:neomake_automake_events['TextChangedI'] = {'delay': 750}

View File

@ -18,7 +18,8 @@ let g:vimfiler_ignore_pattern = get(g:, 'vimfiler_ignore_pattern', [
\ '^\.DS_Store$', \ '^\.DS_Store$',
\ '^\.init\.vim-rplugin\~$', \ '^\.init\.vim-rplugin\~$',
\ '^\.netrwhist$', \ '^\.netrwhist$',
\ '\.class$' \ '\.class$',
\ '^\.'
\]) \])
if has('mac') if has('mac')

View File

@ -1,22 +1,39 @@
"let g:ycm_global_ycm_extra_conf = '~/.ycm_extra_conf.py' "let g:ycm_global_ycm_extra_conf = '~/.ycm_extra_conf.py'
"let g:ycm_confirm_extra_conf = 0 "let g:ycm_confirm_extra_conf = 0
let g:ycm_collect_identifiers_from_tags_files = 1 let g:ycm_collect_identifiers_from_tags_files =
let g:ycm_collect_identifiers_from_comments_and_strings = 1 \ get(g:, 'ycm_collect_identifiers_from_tags_files', 1)
let g:ycm_key_list_select_completion = ['<C-TAB>', '<Down>'] let g:ycm_collect_identifiers_from_comments_and_strings =
let g:ycm_key_list_previous_completion = ['<C-S-TAB>','<Up>'] \ get(g:, 'ycm_collect_identifiers_from_comments_and_strings', 1)
let g:ycm_seed_identifiers_with_syntax = 1 let g:ycm_key_list_select_completion =
let g:ycm_key_invoke_completion = '<leader><tab>' \ get(g:, 'ycm_key_list_select_completion', ['<C-TAB>', '<Down>'])
let g:ycm_semantic_triggers = { let g:ycm_key_list_previous_completion =
\ 'c' : ['->', '.'], \ get(g:, 'ycm_key_list_previous_completion', ['<C-S-TAB>','<Up>'])
\ 'objc' : ['->', '.'], let g:ycm_seed_identifiers_with_syntax =
\ 'ocaml' : ['.', '#'], \ get(g:, 'ycm_seed_identifiers_with_syntax', 1)
\ 'cpp,objcpp' : ['->', '.', '::'], let g:ycm_key_invoke_completion =
\ 'perl' : ['->'], \ get(g:, 'ycm_key_invoke_completion', '<leader><tab>')
\ 'php' : ['->', '::'],
\ 'cs,javascript,d,python,perl6,scala,vb,elixir,go' : ['.'], let g:ycm_semantic_triggers = get(g:, 'ycm_semantic_triggers', {})
\ 'java,jsp' : ['.'],
\ 'vim' : ['re![_a-zA-Z]+[_\w]*\.'], function! s:set_ft_triggers(ft, expr, override) abort
\ 'ruby' : ['.', '::'], if a:override
\ 'lua' : ['.', ':'], let g:ycm_semantic_triggers[a:ft] = a:expr
\ 'erlang' : [':'], elseif !has_key(g:ycm_semantic_triggers, a:ft)
\ } let g:ycm_semantic_triggers[a:ft] = a:expr
endif
endfunction
call s:set_ft_triggers('c', ['->', '.'], 0)
call s:set_ft_triggers('objc', ['->', '.'], 0)
call s:set_ft_triggers('ocaml', ['.', '#'], 0)
call s:set_ft_triggers('cpp,objcpp', ['->', '.', '::'], 0)
call s:set_ft_triggers('perl', ['->'], 0)
call s:set_ft_triggers('php', ['->', '::'], 0)
call s:set_ft_triggers('cs,javascript,d,python,perl6,scala,vb,elixir,go', ['.'], 0)
call s:set_ft_triggers('java,jsp', ['.'], 0)
call s:set_ft_triggers('vim', ['re![_a-zA-Z]+[_\w]*\.'], 0)
call s:set_ft_triggers('ruby', ['.', '::'], 0)
call s:set_ft_triggers('lua', ['.', ':'], 0)
call s:set_ft_triggers('erlang', [':'], 0)
call s:set_ft_triggers('sh', ['re![\w-]{2}', '/', '-'], 0)
call s:set_ft_triggers('zsh', ['re![\w-]{2}', '/', '-'], 0)

View File

@ -1,6 +1,6 @@
" If you want :UltiSnipsEdit to split your window. " If you want :UltiSnipsEdit to split your window.
let g:UltiSnipsEditSplit="vertical" let g:UltiSnipsEditSplit="vertical"
let g:UltiSnipsExpandTrigger='<tab>' let g:UltiSnipsExpandTrigger='<Nop>'
let g:UltiSnipsJumpBackwardTrigger="<c-z>" let g:UltiSnipsJumpBackwardTrigger='<Nop>'
let g:UltiSnipsJumpForwardTrigger='<tab>' let g:UltiSnipsJumpForwardTrigger='<Nop>'
let g:UltiSnipsSnippetsDir = '~/.SpaceVim.d/UltiSnips' let g:UltiSnipsSnippetsDir = '~/.SpaceVim.d/UltiSnips'

View File

@ -281,13 +281,18 @@ Set the information symbol for SpaceVim's syntax maker. Default is '🛈'.
< <
*g:spacevim_terminal_cursor_shape* *g:spacevim_terminal_cursor_shape*
Set the SpaceVim cursor shape in the terminal. Set to 0 to prevent Nvim from Set the SpaceVim cursor shape in the terminal.
changing the cursor shape. Set to 1 to enable non-blinking mode-sensitive >
cursor (this is the default). Set to 2 to enable blinking mode-sensitive 0 : to prevent Nvim from changing the cursor shape.
cursor. Host terminal must support the DECSCUSR CSI escape sequence. 1 : to enable non-blinking mode-sensitive cursor.
2 : to enable blinking mode-sensitive cursor (default).
<
Depending on the terminal emulator, using this option with nvim under tmux >
might require adding the following to ~/.tmux.conf: <
Host terminal must support the DECSCUSR CSI escape sequence. Depending on the
terminal emulator, using this option with nvim under tmux might require adding
the following to ~/.tmux.conf:
> >
set -ga terminal-overrides ',*:Ss=\E[%p1%d q:Se=\E[2 q' set -ga terminal-overrides ',*:Ss=\E[%p1%d q:Se=\E[2 q'
< <

View File

@ -5,4 +5,4 @@ permalink: /404
## Oops! The page you requested was not found! ## Oops! The page you requested was not found!
> you can go to [home](https://spacevim.org) > you can go to [home](https://spacevim.org) or checkout [Blogs](https://spacevim.org/blog/)

View File

@ -3,7 +3,6 @@ title: "SpaceVim 中文手册"
description: "SpaceVim 是一个社区驱动的 Vim 配置,内含多种语言模块,提供了代码补全、语法检查、跳转等多种 IDE 特性。" description: "SpaceVim 是一个社区驱动的 Vim 配置,内含多种语言模块,提供了代码补全、语法检查、跳转等多种 IDE 特性。"
--- ---
# SpaceVim 中文手册 # SpaceVim 中文手册
[![Build Status](https://travis-ci.org/SpaceVim/SpaceVim.svg?branch=dev)](https://travis-ci.org/SpaceVim/SpaceVim) [![Build Status](https://travis-ci.org/SpaceVim/SpaceVim.svg?branch=dev)](https://travis-ci.org/SpaceVim/SpaceVim)
@ -35,8 +34,8 @@ SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,其中包
**捐助SpaceVim** **捐助SpaceVim**
| 微信 | 支付宝 | | 微信 | 支付宝 |
| ------------------------------------------------- | --------------------------------------------------- | | ------------------------------------------------------------------------ | -------------------------------------------------------------------------- |
| <img src="https://spacevim.org/img/weixin.png" height="150" width="150"> | <img src="https://spacevim.org/img/zhifubao.png" height="150" width="150"> | | <img src="https://spacevim.org/img/weixin.png" height="150" width="150"> | <img src="https://spacevim.org/img/zhifubao.png" height="150" width="150"> |
**以下为SpaceVim中文手册部分内容还未完成翻译为了方便大家查询相关信息已提前发布官网上后面会逐渐更新完成感谢大家一直以来的支持** **以下为SpaceVim中文手册部分内容还未完成翻译为了方便大家查询相关信息已提前发布官网上后面会逐渐更新完成感谢大家一直以来的支持**
@ -108,7 +107,7 @@ SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,其中包
- [文件树](#文件树) - [文件树](#文件树)
- [文件树中的常用操作](#文件树中的常用操作) - [文件树中的常用操作](#文件树中的常用操作)
- [文件树中打开文件](#文件树中打开文件) - [文件树中打开文件](#文件树中打开文件)
- [Commands starting with `g`](#commands-starting-with-g) - [以 `g` 为前缀的快捷键](#以-g-为前缀的快捷键)
- [Commands starting with `z`](#commands-starting-with-z) - [Commands starting with `z`](#commands-starting-with-z)
- [Auto-saving](#auto-saving) - [Auto-saving](#auto-saving)
- [Searching](#searching) - [Searching](#searching)
@ -186,13 +185,13 @@ SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,其中包
## 安装 ## 安装
**Linux 或 Mac 下 SpaceVim的安装非常简单只需要执行以下命令即可** **Linux/Mac**
```sh ```sh
curl -sLf https://spacevim.org/install.sh | bash curl -sLf https://spacevim.org/install.sh | bash
``` ```
想要获取更多的自定义的安装方式,请参考: 想要获取更多的信息,请参考:
```sh ```sh
curl -sLf https://spacevim.org/install.sh | bash -s -- -h curl -sLf https://spacevim.org/install.sh | bash -s -- -h
@ -204,24 +203,9 @@ SpaceVim是一种模块化配置可以运行在vim或者neovim上关于vim
[从源码编译vim](https://github.com/Valloric/YouCompleteMe/wiki/Building-Vim-from-source) [从源码编译vim](https://github.com/Valloric/YouCompleteMe/wiki/Building-Vim-from-source)
**windows系统下的安装步骤** **windows**
Windows 下 vim 用户只需要将本仓库克隆成用户 HOME 目录下的 vimfiles 即可,打开 CMD 默认的目录默认即为 HOME 目录,只需要执行如下命令即可: Window 下最方便的是下载安装脚本([install.cmd](https://spacevim.org/install.cmd))至本地,直接运行。
git clone https://github.com/SpaceVim/SpaceVim.git vimfiles
Windows 下 neovim 用户 需要将本仓库克隆成用户 HOME 目录下的 AppData\\Local\\nvim想要获取跟多关于 neovim 安装相关的知识,可以访问 neovim 的 wiki wiki 写的非常详细。打开 CMD 初始目录默认一般即为 HOME 目录,只需要执行如下命令即可:
git clone https://github.com/SpaceVim/SpaceVim.git AppData\Local\nvim
**字体**
SpaceVim 默认启用了Powerline 字体,默认的的字体文件是:[DejaVu Sans Mono](https://github.com/wsdjeg/DotFiles/tree/master/fonts), Windows 用户直接下载下来右键安装即可。
**vimproc.dll**
Windows 下用户如果不方便编译可以在qq群文件里面下载相应的dll文件放到vimproc
的lib目录默认是 `~/.cache/vimfiles/repos/github.com/Shougo/vimproc.vim/lib/`
## 更新 ## 更新
@ -292,7 +276,7 @@ Neovim 运行在 iTerm2 上,采用 SpaceVim配色为_base16-solarized-da
图中包含了一个 Neovim 的终端, 一个语法树窗口,一个文件树窗口以及一个 TernJS 定义窗口 图中包含了一个 Neovim 的终端, 一个语法树窗口,一个文件树窗口以及一个 TernJS 定义窗口
想要查阅更多截图,阅读 [issue #415](https://github.com/SpaceVim/SpaceVim/issues/415) 想要查阅更多截图,阅读 [issue #415](https://github.com/SpaceVim/SpaceVim/issues/415)
### 谁将从 SpaceVim 中获益? ### 谁将从 SpaceVim 中获益?
@ -345,7 +329,7 @@ Neovim 运行在 iTerm2 上,采用 SpaceVim配色为_base16-solarized-da
当然,你也可以通过 `SPACEVIMDIR` 这一环境变量,执定用户配置目录。当然也可以通过软连接连改变目录位置,以便配置备份。 当然,你也可以通过 `SPACEVIMDIR` 这一环境变量,执定用户配置目录。当然也可以通过软连接连改变目录位置,以便配置备份。
SpaceVim 同时还支持项目本地配置,配置出世文件为,当前目录下的 `.SpaceVim.d/init.vim` 文件。同时当前目录下的 `.SpaceVim.d/` 也将被加入到 Vim 运行时路径。 SpaceVim 同时还支持项目本地配置,配置初始文件为,当前目录下的 `.SpaceVim.d/init.vim` 文件。同时当前目录下的 `.SpaceVim.d/` 也将被加入到 Vim 运行时路径。
这是一个用户配置文件示例: 这是一个用户配置文件示例:
@ -992,57 +976,57 @@ SpaceVim 的文件树提供了版本控制信息的借口,但是这一特性
| `sg` | 分屏打开文件 | | `sg` | 分屏打开文件 |
| `sv` | 垂直分屏打开文件 | | `sv` | 垂直分屏打开文件 |
### Commands starting with `g` ### `g` 为前缀的快捷键
after pressing prefix `g` in normal mode, if you do not remember the mappings, you will see the guide which will tell you the functional of all mappings starting with `g`. 在 Normal 模式下按下 `g` 之后,如果你不记得快捷键出现按键延迟,那么快捷键导航将会提示你所有以 `g` 为前缀的快捷键。
| Key Binding | Description | | 快捷键 | 描述 |
| ----------- | ----------------------------------------------- | | --------- | ----------------------------------------------- |
| `g#` | search under cursor backward | | `g#` | 反向搜索光标下的词 |
| `g$` | go to rightmost character | | `g$` | 跳向本行最右侧字符 |
| `g&` | repeat last ":s" on all lines | | `g&` | 针对所有行重复执行上一次 ":s" 命令 |
| `g'` | jump to mark | | `g'` | 跳至标签 |
| `g*` | search under cursor forward | | `g*` | 正向搜索光标下的词 |
| `g+` | newer text state | | `g+` | newer text state |
| `g,` | newer position in change list | | `g,` | newer position in change list |
| `g-` | older text state | | `g-` | older text state |
| `g/` | stay incsearch | | `g/` | stay incsearch |
| `g0` | go to leftmost character | | `g0` | go to leftmost character |
| `g;` | older position in change list | | `g;` | older position in change list |
| `g<` | last page of previous command output | | `g<` | last page of previous command output |
| `g<Home>` | go to leftmost character | | `g<Home>` | go to leftmost character |
| `gE` | end of previous word | | `gE` | end of previous word |
| `gF` | edit file under cursor(jump to line after name) | | `gF` | edit file under cursor(jump to line after name) |
| `gH` | select line mode | | `gH` | select line mode |
| `gI` | insert text in column 1 | | `gI` | insert text in column 1 |
| `gJ` | join lines without space | | `gJ` | join lines without space |
| `gN` | visually select previous match | | `gN` | visually select previous match |
| `gQ` | switch to Ex mode | | `gQ` | switch to Ex mode |
| `gR` | enter VREPLACE mode | | `gR` | enter VREPLACE mode |
| `gT` | previous tag page | | `gT` | previous tag page |
| `gU` | make motion text uppercase | | `gU` | make motion text uppercase |
| `g]` | tselect cursor tag | | `g]` | tselect cursor tag |
| `g^` | go to leftmost no-white character | | `g^` | go to leftmost no-white character |
| `g_` | go to last char | | `g_` | go to last char |
| ``g` `` | jump to mark | | ``g` `` | 跳至标签,等同于 `g'` |
| `ga` | print ascii value of cursor character | | `ga` | 打印光标字符的 ascii 值 |
| `gd` | goto definition | | `gd` | 跳至定义处 |
| `ge` | go to end of previous word | | `ge` | go to end of previous word |
| `gf` | edit file under cursor | | `gf` | edit file under cursor |
| `gg` | go to line N | | `gg` | go to line N |
| `gh` | select mode | | `gh` | select mode |
| `gi` | insert text after '^ mark | | `gi` | insert text after '^ mark |
| `gj` | move cursor down screen line | | `gj` | move cursor down screen line |
| `gk` | move cursor up screen line | | `gk` | move cursor up screen line |
| `gm` | go to middle of screenline | | `gm` | go to middle of screenline |
| `gn` | visually select next match | | `gn` | visually select next match |
| `go` | goto byte N in the buffer | | `go` | goto byte N in the buffer |
| `gs` | sleep N seconds | | `gs` | sleep N seconds |
| `gt` | next tag page | | `gt` | next tag page |
| `gu` | make motion text lowercase | | `gu` | make motion text lowercase |
| `g~` | swap case for Nmove text | | `g~` | swap case for Nmove text |
| `g<End>` | go to rightmost character | | `g<End>` | 跳至本行最右侧字符,等同于 `g$` |
| `g<C-G>` | show cursor info | | `g<C-G>` | 显示光标信息 |
### Commands starting with `z` ### Commands starting with `z`
@ -1373,8 +1357,6 @@ Comments are handled by [nerdcommenter](https://github.com/scrooloose/nerdcommen
**Tips:** To comment efficiently a block of line use the combo `SPC ; SPC j l` **Tips:** To comment efficiently a block of line use the combo `SPC ; SPC j l`
> > > > > > > dev
#### Multi-Encodings #### Multi-Encodings
SpaceVim use utf-8 as default encoding. there are four options for these case: SpaceVim use utf-8 as default encoding. there are four options for these case:
@ -1416,7 +1398,7 @@ Custom sign symbol:
| ------ | ----------- | --------------------------- | | ------ | ----------- | --------------------------- |
| `✖` | Error | `g:spacevim_error_symbol` | | `✖` | Error | `g:spacevim_error_symbol` |
| `➤` | warning | `g:spacevim_warning_symbol` | | `➤` | warning | `g:spacevim_warning_symbol` |
| `🛈` | Info | `g:spacevim_info_symbol` | | `🛈` | Info | `g:spacevim_info_symbol` |
### Managing projects ### Managing projects
@ -2158,3 +2140,5 @@ let g:spacevim_guifont = 'DejaVu\ Sans\ Mono\ for\ Powerline\ 11'
</li> </li>
{% endfor %} {% endfor %}
</ul> </ul>
<!-- vim:set nowrap: -->

View File

@ -15,6 +15,10 @@ plugins:
github: [metadata] github: [metadata]
sass:
sass_dir: _sass
style: compressed
author: author:
name: Shidong Wang name: Shidong Wang
twitter: SpaceVim twitter: SpaceVim

View File

@ -1,122 +1,121 @@
<!doctype html> <!doctype html>
<html> <html>
<head> <head>
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<script> <script>
(adsbygoogle = window.adsbygoogle || []).push({ (adsbygoogle = window.adsbygoogle || []).push({
google_ad_client: "ca-pub-5073224535135889", google_ad_client: "ca-pub-5073224535135889",
enable_page_level_ads: true enable_page_level_ads: true
});
</script>
{% seo %}
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?c6bde3c13e6fd8fde7357f71b4dd53a7";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
<script type="text/javascript" src="http://tajs.qq.com/stats?sId=60680063" charset="UTF-8"></script>
<!-- Google Tag Manager -->
<script>
(function(w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({
'gtm.start': new Date().getTime(),
event: 'gtm.js'
}); });
var f = d.getElementsByTagName(s)[0], </script>
j = d.createElement(s), <meta name="baidu-site-verification" content="TUNbZyzuOn" />
dl = l != 'dataLayer' ? '&l=' + l : ''; {% seo %}
j.async = true; <script type="text/javascript" src="http://tajs.qq.com/stats?sId=60680063" charset="UTF-8"></script>
j.src = <script>
'https://www.googletagmanager.com/gtm.js?id=' + i + dl; (function(w, d, s, l, i) {
f.parentNode.insertBefore(j, f); w[l] = w[l] || [];
})(window, document, 'script', 'dataLayer', 'GTM-PCLWNCD'); w[l].push({
</script> 'gtm.start': new Date().getTime(),
<!-- End Google Tag Manager --> event: 'gtm.js'
<meta charset="utf-8"> });
<meta http-equiv="X-UA-Compatible" content="chrome=1"> </script>
<title>{{ page.title | default: Home }} - SpaceVim</title> <script>
<link rel="stylesheet" href="{{ '/assets/css/style.css?v=' | append: site.github.build_revision | relative_url }}"> var _hmt = _hmt || [];
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> (function() {
<script src="{{ '/assets/js/respond.js' | relative_url }}"></script> var hm = document.createElement("script");
<!--[if lt IE 9]> hm.src = "https://hm.baidu.com/hm.js?c6bde3c13e6fd8fde7357f71b4dd53a7";
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> var s = document.getElementsByTagName("script")[0];
<![endif]--> s.parentNode.insertBefore(hm, s);
<!--[if lt IE 8]> })();
<link rel="stylesheet" href="{{ '/assets/css/ie.css' | relative_url }}"> </script>
<![endif]--> <!-- Google Tag Manager -->
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
<script> new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
(function() { j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
var bp = document.createElement('script'); 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
var curProtocol = window.location.protocol.split(':')[0]; })(window,document,'script','dataLayer','GTM-PCLWNCD');
if (curProtocol === 'https') { </script>
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; <!-- End Google Tag Manager -->
} else { <script>
bp.src = 'http://push.zhanzhang.baidu.com/push.js'; ((window.gitter = {}).chat = {}).options = {
} room: 'SpaceVim/SpaceVim'
var s = document.getElementsByTagName("script")[0]; };
s.parentNode.insertBefore(bp, s); </script>
})(); <script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script>
</script> <meta charset="utf-8">
</head> <meta http-equiv="X-UA-Compatible" content="chrome=1">
<title>{{ page.title | default: Home }} - SpaceVim</title>
<link rel="stylesheet" href="{{ '/assets/css/main.css?v=' | append: site.github.build_revision | relative_url }}">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="{{ '/assets/js/respond.js' | relative_url }}"></script>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<script>
(function() {
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
if (curProtocol === 'https') {
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
} else {
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
}
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>
</head>
<body> <body>
<!-- Google Tag Manager (noscript) --> <!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-PCLWNCD" <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-PCLWNCD"
height="0" width="0" style="display:none;visibility:hidden"></iframe> height="0" width="0" style="display:none;visibility:hidden"></iframe>
</noscript> </noscript>
<!-- End Google Tag Manager (noscript) --> <!-- End Google Tag Manager (noscript) -->
<a href="https://github.com/SpaceVim/SpaceVim"> <a href="https://github.com/SpaceVim/SpaceVim">
<img alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_green_007200.png" src="https://camo.githubusercontent.com/e7bbb0521b397edbd5fe43e7f760759336b5e05f/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f677265656e5f3030373230302e706e67" style="position: absolute; top: 0; right: 0; border: 0;"/> <img alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_green_007200.png" src="https://camo.githubusercontent.com/e7bbb0521b397edbd5fe43e7f760759336b5e05f/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f677265656e5f3030373230302e706e67" style="position: absolute; top: 0; right: 0; border: 0;"/>
</a> </a>
<div class="wrapper"> <div class="wrapper">
<section> <section>
<div id="title"> <div id="title">
<h1>{{ site.title | default: site.github.repository_name }}</h1> <h1>{{ site.title | default: site.github.repository_name }}</h1>
<p>{{ site.description | default: site.github.project_tagline }}</p> <p>{{ site.description | default: site.github.project_tagline }}</p>
<hr> <hr>
<p align="center"> <p align="center">
<b><a href="{{ site.url }}">Home</a></b> | <b><a href="{{ site.url }}">Home</a></b> |
<b><a href="{{ site.url }}/about">About</a></b> | <b><a href="{{ site.url }}/about">About</a></b> |
<b><a href="{{ site.url }}/documentation">Documentation</a></b> | <b><a href="{{ site.url }}/documentation">Documentation</a></b> |
<b><a href="{{ site.url }}/development">Development</a></b> | <b><a href="{{ site.url }}/development">Development</a></b> |
<b><a href="{{ site.url }}/community">Community</a></b> | <b><a href="{{ site.url }}/community">Community</a></b> |
<b><a href="{{ site.url }}/sponsors">Sponsors</a></b> <b><a href="{{ site.url }}/sponsors">Sponsors</a></b>
</p> </p>
<hr> <hr>
</div> </div>
{{ content }} {{ content }}
</section> </section>
</div> </div>
{% if site.google_analytics %} {% if site.google_analytics %}
<script type="text/javascript"> <script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script> </script>
<script type="text/javascript"> <script type="text/javascript">
try { try {
var pageTracker = _gat._getTracker("{{ site.google_analytics }}"); var pageTracker = _gat._getTracker("{{ site.google_analytics }}");
pageTracker._trackPageview(); pageTracker._trackPageview();
} catch (err) {} } catch (err) {}
</script> </script>
{% endif %} {% endif %}
<script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=ra-58a01d3aac22bd89"></script> <script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=ra-58a01d3aac22bd89"></script>
</body> </body>
<root> <root>
<p align="center"> <p align="center">
<span class="credits right">Hosted on GitHub &mdash; Theme by <a href="https://twitter.com/michigangraham">mattgraham</a></span> <span class="credits right">Hosted on GitHub &mdash; Theme by <a href="https://twitter.com/michigangraham">mattgraham</a></span>
</p> </p>
</root> </root>
</html> </html>

View File

@ -0,0 +1,15 @@
---
title: "An async code runner in SpaceVim"
categories: tutorials
excerpt: "A better way for running code with in vim, more info about the command status, will not move cursor from code buffer."
---
# [Blogs](https://spacevim.org/community#blogs) > An async code runner in SpaceVim
when edit code, sometimes I want run current file. as we know vim's build-in feature `:!`, but it is not running asynchronously.
here is an gif shown how we can run code within SpaceVim. the first line is showing the command, the last line is showing the exit code and the time that has been consumed. the default key binding is `SPC l r`, `SPC` means `<Space>` on your keyboard.
![async code runner](https://user-images.githubusercontent.com/13142418/33722240-141ed716-db2f-11e7-9a4d-c99f05cc1d05.gif)
as wrote in old blog, we can also use this feature for java, c, php, JavaScript, etc.

View File

@ -1,3 +1,8 @@
@charset "utf-8";
// Variables
@import "variables";
/*! normalize.css 2012-02-07T12:37 UTC - https://github.com/necolas/normalize.css */ /*! normalize.css 2012-02-07T12:37 UTC - https://github.com/necolas/normalize.css */
/* ============================================================================= HTML5 display definitions ========================================================================== */ /* ============================================================================= HTML5 display definitions ========================================================================== */
/* Corrects block display not defined in IE6/7/8/9 & FF3 */ /* Corrects block display not defined in IE6/7/8/9 & FF3 */
@ -214,13 +219,17 @@ p, ul, ol, table, pre, dl { margin: 0 0 20px; }
h1, h2, h3 { line-height: 1.1; } h1, h2, h3 { line-height: 1.1; }
h1 { font-size: 28px; } h1 { font-size: $h1-font-size; }
h2 { font-size: 24px; } h2 { font-size: $h2-font-size; }
h4, h5, h6 { color: #e8e8e8; } h4, h5, h6 { color: #e8e8e8; }
h3 { font-size: 18px; line-height: 24px; font-family: 'OpenSansRegular', "Helvetica Neue", Helvetica, Arial, sans-serif !important; font-weight: normal; color: #b6b6b6; } h3 { font-size: $h3-font-size; line-height: 24px; font-family: 'OpenSansRegular', "Helvetica Neue", Helvetica, Arial, sans-serif !important; font-weight: normal; color: #b6b6b6; }
h4 { font-size: $h4-font-size; }
h5 { font-size: $h5-font-size; }
h6 { font-size: $h6-font-size; }
a { color: #ffcc00; font-weight: 400; text-decoration: none; } a { color: #ffcc00; font-weight: 400; text-decoration: none; }
a:hover { color: #ffeb9b; } a:hover { color: #ffeb9b; }

View File

@ -0,0 +1,7 @@
$h1-font-size: 2em;
$h2-font-size: 1.8em;
$h3-font-size: 1.6em;
$h4-font-size: 1.4em;
$h5-font-size: 1.2em;
$h6-font-size: 1em;

View File

@ -1,23 +1,27 @@
--- ---
title: "About" title: "About"
description: "Introduction about SpaceVim organization." description: "SpaceVim is a communicate driven vim distribution that supports vim and neovim"
--- ---
# About SpaceVim ## Version
[SpaceVim](https://github.com/SpaceVim/SpaceVim) is a Modular configuration, a bundle of custom settings and plugins for Vim, [SpaceVim](https://github.com/SpaceVim/SpaceVim) is a community-driven vim distribution that supports vim and Neovim. SpaceVim manages collections of plugins in layers. Layers make it easy for you, the user, to enable a new language or feature by grouping all the related plugins together. It got inspired by spacemacs.
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](https://github.com/syl20bnr/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 ## Goals
report on Github.
For learning about Vim in general, read [vim-galore](https://github.com/mhinz/vim-galore). - Provide a consistent user experience across platforms.
- Provide better default layer for defferent languages.
# Credits & Thanks ## Principles
- Do not regress from origin
- Decide outcomes by weighing cost and benefit
- prefer usability over tradition if the benefits are overwhelming
- Give usability a chance™
## Credits & Thanks
- Current maintainer: [Wang Shidong](https://github.com/wsdjeg)
- [![GitHub contributors](https://img.shields.io/github/contributors/SpaceVim/SpaceVim.svg)](https://github.com/SpaceVim/SpaceVim/graphs/contributors) - [![GitHub contributors](https://img.shields.io/github/contributors/SpaceVim/SpaceVim.svg)](https://github.com/SpaceVim/SpaceVim/graphs/contributors)
- [vimdoc](https://github.com/google/vimdoc) generate doc file for SpaceVim - [vimdoc](https://github.com/google/vimdoc) generate doc file for SpaceVim
- [Rafael Bodill](https://github.com/rafi) and his vim-config - [Rafael Bodill](https://github.com/rafi) and his vim-config

View File

@ -0,0 +1,6 @@
---
# this ensures Jekyll reads the file to be transformed into CSS later
# only Main files contain this front matter, not partials.
---
@import "_spacevim.scss";

View File

@ -1,23 +1,37 @@
--- ---
title: "Development" title: "Development"
description: "A guide for contributing to SpaceVim." description: "Development information about SpaceVim, including contributing guidelines and changelog."
--- ---
# Development # Development
<!-- vim-markdown-toc GFM -->
- [Contribution guidelines](#contribution-guidelines)
- [Asking for help](#asking-for-help)
- [Reporting issues](#reporting-issues)
- [Contributing code](#contributing-code)
- [License](#license)
- [Conventions](#conventions)
- [Pull Request](#pull-request)
- [Ideally for simple PRs (most of them):](#ideally-for-simple-prs-most-of-them)
- [For complex PRs (big refactoring, etc):](#for-complex-prs-big-refactoring-etc)
- [Contributing a layer](#contributing-a-layer)
- [File header](#file-header)
- [Author of a new layer](#author-of-a-new-layer)
- [Contributor to an existing layer](#contributor-to-an-existing-layer)
- [Contributing a keybinding](#contributing-a-keybinding)
- [Contributing a banner](#contributing-a-banner)
- [Contributing a statusline theme](#contributing-a-statusline-theme)
- [Build with SpaceVim](#build-with-spacevim)
- [Changelog](#changelog)
<!-- vim-markdown-toc -->
Development happens in the GitHub repository. here is a throughput graph of the repository for the last few weeks: Development happens in the GitHub repository. 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) [![Throughput Graph](https://graphs.waffle.io/SpaceVim/SpaceVim/throughput.svg)](https://waffle.io/SpaceVim/SpaceVim/metrics/throughput)
## Content
- [Contribution guidelines](#contribution-guidelines)
- [Asking for help](#asking-for-help)
- [Reporting issues](#reporting-issues)
- [Contributing code](#contributing-code)
- [Build with SpaceVim](#build-with-spacevim)
- [Changelog](#changelog)
## Contribution guidelines ## Contribution guidelines
SpaceVim is an effort of all the volunteers, we encourage you to pitch in. The community makes SpaceVim what it is. SpaceVim is an effort of all the volunteers, we encourage you to pitch in. The community makes SpaceVim what it is.
@ -32,12 +46,14 @@ You can only consider reading the sections relevant to what you are going to do:
### Asking for help ### Asking for help
If you want to ask an usage question, be sure to look first into some places as it may hold the answers: If you want to ask an usage question, be sure to look first into some places as it may hold the answers:
- <kbd>:h SpaceVim-faq</kbd>: Some of the most frequently asked questions are answered there. - <kbd>:h SpaceVim-faq</kbd>: Some of the most frequently asked questions are answered there.
- [SpaceVim documentation](https://spacevim.org/documentation): It is the general documentation of SpaceVim. - [SpaceVim documentation](https://spacevim.org/documentation): It is the general documentation of SpaceVim.
### Reporting issues ### Reporting issues
Issues have to be reported on [issues tracker](https://github.com/SpaceVim/SpaceVim/issues), Please: Issues have to be reported on [issues tracker](https://github.com/SpaceVim/SpaceVim/issues), Please:
- Check that there is no duplicate issue in the issues tracker, you can search for keywords in the issues tracker. - Check that there is no duplicate issue in the issues tracker, you can search for keywords in the issues tracker.
- Check that the issue has not been fixed in latest version of SpaceVim, please update your SpaceVim, and try to reproduce the bug here. - Check that the issue has not been fixed in latest version of SpaceVim, please update your SpaceVim, and try to reproduce the bug here.
- Use a clear title and follow the issue template. - Use a clear title and follow the issue template.
@ -50,6 +66,7 @@ Code contributions are welcome. Please read the following sections carefully. In
#### License #### License
The license is MIT for all the parts of SpaceVim. this includes: The license is MIT for all the parts of SpaceVim. this includes:
- The initialization and core files - The initialization and core files
- All the layer files. - All the layer files.
@ -94,29 +111,27 @@ Write commit messages according to adapted [Tim Popes guidelines](http://tbag
This is a model commit message: This is a model commit message:
``` Capitalized, short (72 chars or less) summary
Capitalized, short (72 chars or less) summary
More detailed explanatory text, if necessary. Wrap it to about 72 More detailed explanatory text, if necessary. Wrap it to about 72
characters or so. In some contexts, the first line is treated as the characters or so. In some contexts, the first line is treated as the
subject of an email and the rest of the text as the body. The blank subject of an email and the rest of the text as the body. The blank
line separating the summary from the body is critical (unless you omit line separating the summary from the body is critical (unless you omit
the body entirely); tools like rebase can get confused if you run the the body entirely); tools like rebase can get confused if you run the
two together. two together.
Write your commit message in the imperative: "Fix bug" and not "Fixed bug" Write your commit message in the imperative: "Fix bug" and not "Fixed bug"
or "Fixes bug." This convention matches up with commit messages generated or "Fixes bug." This convention matches up with commit messages generated
by commands like git merge and git revert. by commands like git merge and git revert.
Further paragraphs come after blank lines. Further paragraphs come after blank lines.
- Bullet points are okay, too - Bullet points are okay, too
- Typically a hyphen or asterisk is used for the bullet, followed by a - Typically a hyphen or asterisk is used for the bullet, followed by a
single space, with blank lines in between, but conventions vary here single space, with blank lines in between, but conventions vary here
- Use a hanging indent - Use a hanging indent
```
[Gita] provide vim mode for Git commit messages, which helps you to comply to these guidelines. [Gita] provide vim mode for Git commit messages, which helps you to comply to these guidelines.
@ -222,6 +237,7 @@ If you have some ASCII skills you can submit your artwork!
You are free to choose a reasonable height size but the width size should be around 75 characters. You are free to choose a reasonable height size but the width size should be around 75 characters.
#### Contributing a statusline theme
## Build with SpaceVim ## Build with SpaceVim

View File

@ -1,16 +1,42 @@
--- ---
title: "Conventions" title: "Conventions"
description: "conventions of contribute to SpaceVim, including the coding style guide about vim script and markdown" description: "conventions of contributing to SpaceVim, including the coding style guides about vim script and markdown"
permalink: "/conventions" permalink: "/conventions"
--- ---
# Conventions # Conventions
## Content <!-- vim-markdown-toc GFM -->
- [commit emoji convention](#commit-emoji-convention) - [Commit emoji convention](#commit-emoji-convention)
- [viml coding style guild](#viml-coding-style-guide) - [Viml coding style guide](#viml-coding-style-guide)
- [markdown style guide](#markdown-style-guide) - [Portability](#portability)
- [Strings](#strings)
- [Matching Strings](#matching-strings)
- [Regular Expressions](#regular-expressions)
- [Dangerous commands](#dangerous-commands)
- [Fragile commands](#fragile-commands)
- [Catching Exceptions](#catching-exceptions)
- [General Guidelines](#general-guidelines)
- [Messaging](#messaging)
- [Type checking](#type-checking)
- [Python](#python)
- [Other Languages](#other-languages)
- [Plugin layout](#plugin-layout)
- [Functions](#functions)
- [Commands](#commands)
- [Autocommands](#autocommands)
- [Mappings](#mappings)
- [Errors](#errors)
- [Settings](#settings)
- [Style](#style)
- [Whitespace](#whitespace)
- [Line Continuations](#line-continuations)
- [Naming](#naming)
- [Markdown style guide](#markdown-style-guide)
- [Thanks:](#thanks)
<!-- vim-markdown-toc -->
## Commit emoji convention ## Commit emoji convention
@ -23,29 +49,35 @@ permalink: "/conventions"
- :beer: I'm happy like reduced code complexity. - :beer: I'm happy like reduced code complexity.
## Viml coding style guide ## Viml coding style guide
### Portability ### Portability
Vim is highly configurable. Users can change many of the default settings, including the case sensitivity, the regular expression rules, the substitution rules, and more. In order for your vimscript to work for all users, follow these guidelines: Vim is highly configurable. Users can change many of the default settings, including the case sensitivity, the regular expression rules, the substitution rules, and more. In order for your vimscript to work for all users, follow these guidelines:
#### Strings #### Strings
**Prefer single quoted strings** **Prefer single quoted strings**
Double quoted strings are semantically different in vimscript, and you probably don't want them (they break regexes). Double quoted strings are semantically different in vimscript, and you probably don't want them (they break regexes).
Use double quoted strings when you need an escape sequence (such as "\n") or if you know it doesn't matter and you need to embed single quotes. Use double quoted strings when you need an escape sequence (such as "\\n") or if you know it doesn't matter and you need to embed single quotes.
#### Matching Strings #### Matching Strings
**Use the =~# or =~? operator families over the =~ family.** **Use the =~# or =~? operator families over the =~ family.**
The matching behavior depends upon the user's ignorecase and smartcase settings and on whether you compare them with the =~, =~#, or =~? family of operators. Use the =~# and =~? operator families explicitly when comparing strings unless you explicitly need to honor the user's case sensitivity settings. The matching behavior depends upon the user's ignorecase and smartcase settings and on whether you compare them with the =~, =~#, or =~? family of operators. Use the =~# and =~? operator families explicitly when comparing strings unless you explicitly need to honor the user's case sensitivity settings.
#### Regular Expressions #### Regular Expressions
**Prefix all regexes with one of \m, \v, \M, or \V.**
In addition to the case sensitivity settings, regex behavior depends upon the user's nomagic setting. To make regexes act like nomagic and noignorecase are set, prepend all regexes with one of \m, \v, \M, or \V. **Prefix all regexes with one of \\m, \\v, \\M, or \\V.**
You are welcome to use other magic levels (\v) and case sensitivities (\c) so long as they are intentional and explicit. In addition to the case sensitivity settings, regex behavior depends upon the user's nomagic setting. To make regexes act like nomagic and noignorecase are set, prepend all regexes with one of \\m, \\v, \\M, or \\V.
You are welcome to use other magic levels (\\v) and case sensitivities (\\c) so long as they are intentional and explicit.
#### Dangerous commands #### Dangerous commands
**Avoid commands with unintended side effects.** **Avoid commands with unintended side effects.**
Avoid using :s[ubstitute] as it moves the cursor and prints error messages. Prefer functions (such as search()) better suited to scripts. Avoid using :s[ubstitute] as it moves the cursor and prints error messages. Prefer functions (such as search()) better suited to scripts.
@ -55,6 +87,7 @@ The meaning of the g flag depends upon the gdefault setting. If you do use :subs
For many vim commands, functions exist that do the same thing with fewer side effects. See :help functions() for a list of built-in functions. For many vim commands, functions exist that do the same thing with fewer side effects. See :help functions() for a list of built-in functions.
#### Fragile commands #### Fragile commands
**Avoid commands that rely on user settings.** **Avoid commands that rely on user settings.**
Always use normal! instead of normal. The latter depends upon the user's key mappings and could do anything. Always use normal! instead of normal. The latter depends upon the user's key mappings and could do anything.
@ -64,12 +97,15 @@ Avoid :s[ubstitute], as its behavior depends upon a number of local settings.
The same applies to other commands not listed here. The same applies to other commands not listed here.
#### Catching Exceptions #### Catching Exceptions
**Match error codes, not error text.** **Match error codes, not error text.**
Error text may be locale dependant. Error text may be locale dependant.
### General Guidelines ### General Guidelines
#### Messaging #### Messaging
**Message the user infrequently.** **Message the user infrequently.**
Loud scripts are annoying. Message the user only when: Loud scripts are annoying. Message the user only when:
@ -78,6 +114,7 @@ Loud scripts are annoying. Message the user only when:
- An error has occurred. - An error has occurred.
#### Type checking #### Type checking
**Use strict and explicit checks where possible.** **Use strict and explicit checks where possible.**
Vimscript has unsafe, unintuitive behavior when dealing with some types. For instance, 0 == 'foo' evaluates to true. Vimscript has unsafe, unintuitive behavior when dealing with some types. For instance, 0 == 'foo' evaluates to true.
@ -89,21 +126,25 @@ Check variable types explicitly before using them. Use functions from maktaba#en
Use :unlet for variables that may change types, particularly those assigned inside loops. Use :unlet for variables that may change types, particularly those assigned inside loops.
#### Python #### Python
**Use sparingly.** **Use sparingly.**
Use python only when it provides critical functionality, for example when writing threaded code. Use python only when it provides critical functionality, for example when writing threaded code.
#### Other Languages #### Other Languages
**Use vimscript instead.** **Use vimscript instead.**
Avoid using other scripting languages such as ruby and lua. We can not guarantee that the end user's vim has been compiled with support for non-vimscript languages. Avoid using other scripting languages such as ruby and lua. We can not guarantee that the end user's vim has been compiled with support for non-vimscript languages.
#### Plugin layout #### Plugin layout
**Organize functionality into modular plugins** **Organize functionality into modular plugins**
Group your functionality as a plugin, unified in one directory (or code repository) which shares your plugin's name (with a "vim-" prefix or ".vim" suffix if desired). It should be split into plugin/, autoload/, etc. subdirectories as necessary, and it should declare metadata in the addon-info.json format (see the VAM documentation for details). Group your functionality as a plugin, unified in one directory (or code repository) which shares your plugin's name (with a "vim-" prefix or ".vim" suffix if desired). It should be split into plugin/, autoload/, etc. subdirectories as necessary, and it should declare metadata in the addon-info.json format (see the VAM documentation for details).
#### Functions #### Functions
**In the autoload/ directory, defined with [!] and [abort].** **In the autoload/ directory, defined with [!] and [abort].**
Autoloading allows functions to be loaded on demand, which makes startuptime faster and enforces function namespacing. Autoloading allows functions to be loaded on demand, which makes startuptime faster and enforces function namespacing.
@ -117,6 +158,7 @@ Non-library plugins should expose commands instead of functions. Command logic s
[abort] forces the function to halt when it encounters an error. [abort] forces the function to halt when it encounters an error.
#### Commands #### Commands
**In the plugin/commands.vim or under the ftplugin/ directory, defined without [!].** **In the plugin/commands.vim or under the ftplugin/ directory, defined without [!].**
General commands go in plugin/commands.vim. Filetype-specific commands go in ftplugin/. General commands go in plugin/commands.vim. Filetype-specific commands go in ftplugin/.
@ -124,6 +166,7 @@ General commands go in plugin/commands.vim. Filetype-specific commands go in ftp
Excluding [!] prevents your plugin from silently clobbering existing commands. Command conflicts should be resolved by the user. Excluding [!] prevents your plugin from silently clobbering existing commands. Command conflicts should be resolved by the user.
#### Autocommands #### Autocommands
**Place them in plugin/autocmds.vim, within augroups.** **Place them in plugin/autocmds.vim, within augroups.**
Place all autocommands in augroups. Place all autocommands in augroups.
@ -133,6 +176,7 @@ The augroup name should be unique. It should either be, or be prefixed with, the
Clear the augroup with autocmd! before defining new autocommands in the augroup. This makes your plugin re-entrable. Clear the augroup with autocmd! before defining new autocommands in the augroup. This makes your plugin re-entrable.
#### Mappings #### Mappings
**Place them in plugin/mappings.vim, using maktaba#plugin#MapPrefix to get a prefix.** **Place them in plugin/mappings.vim, using maktaba#plugin#MapPrefix to get a prefix.**
All key mappings should be defined in plugin/mappings.vim. All key mappings should be defined in plugin/mappings.vim.
@ -148,6 +192,7 @@ Your plugins generally shouldn't introduce mappings, but if they do, the map com
When using catch, match the error code rather than the error text. When using catch, match the error code rather than the error text.
#### Settings #### Settings
**Change settings locally** **Change settings locally**
Use :setlocal and &l: instead of :set and & unless you have explicit reason to do otherwise. Use :setlocal and &l: instead of :set and & unless you have explicit reason to do otherwise.
@ -189,6 +234,7 @@ such as "noremap <leader>gf :grep -f ".
``` ```
#### Line Continuations #### Line Continuations
- Prefer line continuations on semantic boundaries. - Prefer line continuations on semantic boundaries.
```diff ```diff
@ -214,6 +260,7 @@ autocommand BufEnter <buffer>
- Do not continue multi-line commands when you can avoid it. Prefer function calls. - Do not continue multi-line commands when you can avoid it. Prefer function calls.
#### Naming #### Naming
In general, use plugin-names-like-this, FunctionNamesLikeThis, CommandNamesLikeThis, augroup_names_like_this, variable_names_like_this. In general, use plugin-names-like-this, FunctionNamesLikeThis, CommandNamesLikeThis, augroup_names_like_this, variable_names_like_this.
Always prefix variables with their scope. Always prefix variables with their scope.
@ -221,28 +268,29 @@ Always prefix variables with their scope.
- plugin-names-like-this - plugin-names-like-this
Keep them short and sweet. Keep them short and sweet.
- FunctionNamesLikeThis - FunctionNamesLikeThis
- Prefix script-local functions with s: - Prefix script-local functions with s:
- Autoloaded functions may not have a scope prefix. - Autoloaded functions may not have a scope prefix.
- Do not create global functions. Use autoloaded functions instead. - Do not create global functions. Use autoloaded functions instead.
- CommandNamesLikeThis - CommandNamesLikeThis
Prefer succinct command names over common command prefixes. Prefer succinct command names over common command prefixes.
- variable_names_like_this - variable_names_like_this
Augroup names count as variables for naming purposes. Augroup names count as variables for naming purposes.
- Prefix all variables with their scope. - Prefix all variables with their scope.
- Global variables with g: - Global variables with g:
- Script-local variables with s: - Script-local variables with s:
- Function arguments with a: - Function arguments with a:
- Function-local variables with l: - Function-local variables with l:
- Vim-predefined variables with v: - Vim-predefined variables with v:
- Buffer-local variables with b: - Buffer-local variables with b:
- g:, s:, and a: must always be used. - g:, s:, and a: must always be used.
- b: changes the variable semantics; use it when you want buffer-local semantics. - b: changes the variable semantics; use it when you want buffer-local semantics.
- l: and v: should be used for consistency, future proofing, and to avoid subtle bugs. They are not strictly required. Add them in new code but dont go out of your way to add them elsewhere. - l: and v: should be used for consistency, future proofing, and to avoid subtle bugs. They are not strictly required. Add them in new code but dont go out of your way to add them elsewhere.
## Markdown style guide ## Markdown style guide
## Thanks: ## Thanks:
- link : https://google.github.io/styleguide/vimscriptguide.xml
- link : https://google.github.io/styleguide/vimscriptfull.xml - link : <https://google.github.io/styleguide/vimscriptguide.xml>
- link : https://github.com/noahfrederick/vim-scripting-style-guide/blob/master/doc/scripting-style.txt - link : <https://google.github.io/styleguide/vimscriptfull.xml>
- link : <https://github.com/noahfrederick/vim-scripting-style-guide/blob/master/doc/scripting-style.txt>
- [google's markdown style guide](https://github.com/google/styleguide/blob/3591b2e540cbcb07423e02d20eee482165776603/docguide/style.md) - [google's markdown style guide](https://github.com/google/styleguide/blob/3591b2e540cbcb07423e02d20eee482165776603/docguide/style.md)

View File

@ -88,10 +88,12 @@ description: "General documentation about how to using SpaceVim, including the q
- [Auto-indent pasted text](#auto-indent-pasted-text) - [Auto-indent pasted text](#auto-indent-pasted-text)
- [Text manipulation commands](#text-manipulation-commands) - [Text manipulation commands](#text-manipulation-commands)
- [Text insertion commands](#text-insertion-commands) - [Text insertion commands](#text-insertion-commands)
- [Increase/Decrease numbers](#increasedecrease-numbers)
- [Commenting](#commenting) - [Commenting](#commenting)
- [Multi-Encodings](#multi-encodings) - [Multi-Encodings](#multi-encodings)
- [Errors handling](#errors-handling) - [Errors handling](#errors-handling)
- [Managing projects](#managing-projects) - [Managing projects](#managing-projects)
- [Searching files in project](#searching-files-in-project)
- [EditorConfig](#editorconfig) - [EditorConfig](#editorconfig)
- [Vim Server](#vim-server) - [Vim Server](#vim-server)
- [Connecting to the Vim server](#connecting-to-the-vim-server) - [Connecting to the Vim server](#connecting-to-the-vim-server)
@ -172,7 +174,7 @@ Community-driven configuration provides curated packages tuned by power users an
<kbd>[Window]</kbd> for all the window and buffer commands or <kbd>[Unite]</kbd> for the <kbd>[Window]</kbd> for all the window and buffer commands or <kbd>[Unite]</kbd> for the
unite work flow commands. unite work flow commands.
- **Fast boot time:** Lazy-load 90% of plugins with [dein.vim] - **Fast boot time:** Lazy-load 90% of plugins with [dein.vim]
- **Lower the risk of RSI:** by heavily using the space bar instead of modifiers. - **Lower the risk of RSI:** by heavily using the space bar instead of modifiers.
- **Batteries included:** discover hundreds of ready-to-use packages nicely - **Batteries included:** discover hundreds of ready-to-use packages nicely
organised in configuration layers following a set of organised in configuration layers following a set of
[conventions](http://spacevim.org/development/). [conventions](http://spacevim.org/development/).
@ -514,6 +516,40 @@ The letters displayed in the statusline correspond to the key bindings used to t
| `SPC t S` | Ⓢ | S | enabled in spell checking | | `SPC t S` | Ⓢ | S | enabled in spell checking |
| `SPC t w` | ⓦ | w | whitespace mode | | `SPC t w` | ⓦ | w | whitespace mode |
**colorscheme of statusline:**
current version only support `gruvbox`/`molokai`/`nord`/`one`/`onedark`, if you want to contribute theme please check the template of a statusline theme.
```vim
" the theme colors should be
" [
" \ [ a_guifg, a_guibg, a_ctermfg, a_ctermbg],
" \ [ b_guifg, b_guibg, b_ctermfg, b_ctermbg],
" \ [ c_guifg, c_guibg, c_ctermfg, c_ctermbg],
" \ [ z_guibg, z_ctermbg],
" \ [ i_guifg, i_guibg, i_ctermfg, i_ctermbg],
" \ [ v_guifg, v_guibg, v_ctermfg, v_ctermbg],
" \ [ r_guifg, r_guibg, r_ctermfg, r_ctermbg],
" \ ]
" group_a: window id
" group_b/group_c: stausline sections
" group_z: empty area
" group_i: window id in insert mode
" group_v: window id in visual mode
" group_r: window id in select mode
function! SpaceVim#mapping#guide#theme#gruvbox#palette() abort
return [
\ ['#282828', '#a89984', 246, 235],
\ ['#a89984', '#504945', 239, 246],
\ ['#a89984', '#3c3836', 237, 246],
\ ['#665c54', 241],
\ ['#282828', '#83a598', 235, 109],
\ ['#282828', '#fe8019', 235, 208],
\ ['#282828', '#8ec07c', 235, 108],
\ ]
endfunction
```
#### tabline #### tabline
Buffers will be listed on tabline if there is only one tab, each item contains the index, filetype icon and the bufname. if there are more than one tab, all tabs will be listed on the tabline. each item can be quickly accessed using `<Leader> number`. default `<Leader>` is `\`. Buffers will be listed on tabline if there is only one tab, each item contains the index, filetype icon and the bufname. if there are more than one tab, all tabs will be listed on the tabline. each item can be quickly accessed using `<Leader> number`. default `<Leader>` is `\`.
@ -530,6 +566,15 @@ Buffers will be listed on tabline if there is only one tab, each item contains t
| `<Leader> 8` | jump to index 8 on tabline | | `<Leader> 8` | jump to index 8 on tabline |
| `<Leader> 9` | jump to index 9 on tabline | | `<Leader> 9` | jump to index 9 on tabline |
SpaceVim tabline also support mouse click, left mouse button will switch to buffer, middle button will delete the buffer.
**NOTE:** this feature is only supported in neovim with `has('tablineat')`.
| Key Binding | Description |
| ---------------- | ------------------ |
| `<Mouse-left>` | jump to the buffer |
| `<Mouse-middle>` | delete the buffer |
## Manual ## Manual
### Completion ### Completion
@ -1177,18 +1222,18 @@ Background search keyword in a project, when searching done, the count will be s
key binding in FlyGrep buffer: key binding in FlyGrep buffer:
Key Binding Description | Key Binding | Description |
\-----------\| ----------- | ---------------- | --------------------------------- |
`<Esc>` | close FlyGrep buffer | `<Esc>` | close FlyGrep buffer |
`<Enter>` | open file at the cursor line | `<Enter>` | open file at the cursor line |
`<Tab>` | move cursor line down | `<Tab>` | move cursor line down |
`<S-Tab>` | move cursor line up | `<S-Tab>` | move cursor line up |
`<Bs>` | remove last character | `<Bs>` | remove last character |
`<C-w>` | remove the Word before the cursor | `<C-w>` | remove the Word before the cursor |
`<C-u>` | remove the Line before the cursor | `<C-u>` | remove the Line before the cursor |
`<C-k>` | remove the Line after the cursor | `<C-k>` | remove the Line after the cursor |
`<C-a>`/`<Home>` | Go to the beginning of the line | `<C-a>`/`<Home>` | Go to the beginning of the line |
`<C-e>`/`<End>` | Go to the end of the line | `<C-e>`/`<End>` | Go to the end of the line |
#### Persistent highlighting #### Persistent highlighting
@ -1279,6 +1324,23 @@ Text insertion commands (start with `i`):
| `SPC i U 4` | insert UUIDv4 (use universal argument to insert with CID format) | | `SPC i U 4` | insert UUIDv4 (use universal argument to insert with CID format) |
| `SPC i U U` | insert UUIDv4 (use universal argument to insert with CID format) | | `SPC i U U` | insert UUIDv4 (use universal argument to insert with CID format) |
#### Increase/Decrease numbers
| Key Binding | Description |
| ----------- | ------------------------------------------------------------------- |
| `SPC n +` | increase the number under point by one and initiate transient state |
| `SPC n -` | decrease the number under point by one and initiate transient state |
In transient state:
| Key Binding | Description |
| ------------- | -------------------------------------- |
| `+` | increase the number under point by one |
| `-` | decrease the number under point by one |
| Any other key | leave the transient state |
**Tips:** you can increase or decrease a value by more that once by using a prefix argument (i.e. `10 SPC n +` will add 10 to the number under point).
#### Commenting #### Commenting
Comments are handled by [nerdcommenter](https://github.com/scrooloose/nerdcommenter), its bound to the following keys. Comments are handled by [nerdcommenter](https://github.com/scrooloose/nerdcommenter), its bound to the following keys.
@ -1351,6 +1413,15 @@ project manager commands start with `p`:
| ----------- | ----------------------------------------------------- | | ----------- | ----------------------------------------------------- |
| `SPC p '` | open a shell in projects root (with the shell layer) | | `SPC p '` | open a shell in projects root (with the shell layer) |
#### Searching files in project
| Key Binding | Description |
| ----------- | ----------------------------------------------------- |
| `SPC p f` | find files in current project |
| `SPC p /` | fuzzy search for text in current project |
| `SPC p k` | kill all project buffers |
| `SPC p t` | find project root |
## EditorConfig ## EditorConfig
SpaceVim has support for [EditorConfig](http://editorconfig.org/), a configuration file to “define and maintain consistent coding styles between different editors and IDEs.” SpaceVim has support for [EditorConfig](http://editorconfig.org/), a configuration file to “define and maintain consistent coding styles between different editors and IDEs.”

View File

@ -14,7 +14,7 @@ SpaceVim is a community-driven vim distribution that supports vim and Neovim. S
Please star the project on github - it is a great way to show your appreciation while providing us motivation to continue working on this project. The extra visibility for the project doesn't hurt either! Please star the project on github - it is a great way to show your appreciation while providing us motivation to continue working on this project. The extra visibility for the project doesn't hurt either!
![welcome-page](https://cloud.githubusercontent.com/assets/13142418/26402270/28ad72b8-40bc-11e7-945e-003f41e057be.png) ![welcome-page](https://user-images.githubusercontent.com/13142418/33793078-3446cb6e-dc76-11e7-9998-376a355557a4.png)
See the [documentation](https://spacevim.org/documentation) or [the list of layers](http://spacevim.org/layers/) for more information. See the [documentation](https://spacevim.org/documentation) or [the list of layers](http://spacevim.org/layers/) for more information.
@ -52,11 +52,12 @@ The easist way is to download [install.cmd](https://spacevim.org/install.cmd) an
- **Great documentation:** access documentation in Vim with <kbd>SPC h SPC</kbd>. - **Great documentation:** access documentation in Vim with <kbd>SPC h SPC</kbd>.
![SPC h SPC](https://user-images.githubusercontent.com/13142418/31620230-48b53eea-b2c9-11e7-90d0-b717878875d4.gif) ![SPC h SPC](https://user-images.githubusercontent.com/13142418/31620230-48b53eea-b2c9-11e7-90d0-b717878875d4.gif)
- **Beautiful GUI:** you'll love the awesome UI and its useful features. - **Beautiful UI:** you'll love the awesome UI and its useful features.
![beautiful UI](https://user-images.githubusercontent.com/13142418/33804722-bc241f50-dd70-11e7-8dd8-b45827c0019c.png)
- **Mnemonic key bindings:** all key bindings have mnemonic prefixes. - **Mnemonic key bindings:** all key bindings have mnemonic prefixes.
![mapping guide](https://user-images.githubusercontent.com/13142418/31550099-c8173ff8-b062-11e7-967e-6378a9c3b467.gif) ![mapping guide](https://user-images.githubusercontent.com/13142418/31550099-c8173ff8-b062-11e7-967e-6378a9c3b467.gif)
- **Describe key bindings:** use <kbd>SPC h d k</kbd> to describe key bindings. - **Describe key bindings:** use <kbd>SPC h d k</kbd> to describe key bindings, and find definition of key bindings.
![describe key](https://user-images.githubusercontent.com/13142418/32134986-060a3b8a-bc2a-11e7-89a2-3ee4e616bf06.gif) ![describe key](https://user-images.githubusercontent.com/13142418/33804739-52dbc498-dd71-11e7-97e5-ed0fa6ec1719.gif)
- **Lazy load plugins:** Lazy-load 90% of plugins with [dein.vim](https://github.com/Shougo/dein.vim) - **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) ![UI for dein](https://user-images.githubusercontent.com/13142418/31309093-36c01150-abb3-11e7-836c-3ad406bdd71a.gif)
- **Neovim centric:** Dark powered mode of SpaceVim - **Neovim centric:** Dark powered mode of SpaceVim

View File

@ -1,5 +1,6 @@
--- ---
title: "SpaceVim autocomplete layer" title: "SpaceVim autocomplete layer"
description: "This layer provides auto-completion to SpaceVim"
--- ---
# [SpaceVim Layers:](https://spacevim.org/layers) autocomplete # [SpaceVim Layers:](https://spacevim.org/layers) autocomplete

View File

@ -1,4 +1,5 @@
--- ---
title: "SpaceVim chat layer"
description: "SpaceVim chatting layer provide chatting with qq and weixin in vim." description: "SpaceVim chatting layer provide chatting with qq and weixin in vim."
--- ---

View File

@ -1,5 +1,6 @@
--- ---
title: "SpaceVim checkers layer" title: "SpaceVim checkers layer"
description: "This layer provides syntax checking feature"
--- ---
# [SpaceVim Layers:](https://spacevim.org/layers) checkers # [SpaceVim Layers:](https://spacevim.org/layers) checkers

View File

@ -0,0 +1,18 @@
---
title: "SpaceVim chinese layer"
description: "Layer for chinese users, include chinese docs and runtime messages"
---
# [Layers](https://spacevim.org/layers) > chinese
## Description
This layer is for chinese users, and provide chinese docs and runtime messages.
## Layer Installation
To use this configuration layer, add `splayer 'chinese'` to your custom configuration file.
## Configuration
if you want to enable this feature, add `let g:spacevim_vim_help_language = 'cn'` to your custom config file.

View File

@ -1,8 +1,14 @@
# [Layers](https://spacevim.org/layers) > colorscheme ---
title: "SpaceVim colorscheme layer"
description: "colorscheme provides a list of colorscheme for SpaceVim, default colorscheme is gruvbox with dark theme."
---
# [SpaceVim Layers:](https://spacevim.org/layers) colorscheme
This layer provides many Vim colorschemes for SpaceVim, the default colorscheme is gruvbox. This layer provides many Vim colorschemes for SpaceVim, the default colorscheme is gruvbox.
To change the colorscheme: To change the colorscheme:
```vim ```vim
let g:spacevim_colorscheme = 'onedark' let g:spacevim_colorscheme = 'onedark'
``` ```

44
docs/layers/debug.md Normal file
View File

@ -0,0 +1,44 @@
---
title: "SpaceVim debug layer"
description: "This layer provide debug workflow support in SpaceVim"
---
# [SpaceVim Layers:](https://spacevim.org/layers) debug
<!-- vim-markdown-toc GFM -->
- [Description](#description)
- [Install](#install)
- [Key bindings](#key-bindings)
<!-- vim-markdown-toc -->
## Description
This layer provide a debug workflow for SpaceVim. All of the function is based on [vim-vebugger](https://github.com/idanarye/vim-vebugger).
## Install
To use this configuration layer, add `call SpaceVim#layers#load('debug')` to your custom configuration file.
## Key bindings
| Key Binding | Description |
| ----------- | ---------------------------------------- |
| `SPC d l` | launching debugger |
| `SPC d c` | Continue the execution |
| `SPC d b` | Toggle a breakpoint for the current line |
| `SPC d B` | Clear all breakpoints |
| `SPC d o` | step over |
| `SPC d i` | step into functions |
| `SPC d O` | step out of current function |
| `SPC d e s` | Evaluate and print the selected text |
| `SPC d e e` | Evaluate the `<cword>` under the cursor |
| `SPC d e S` | Execute the selected text |
| `SPC d k` | Terminates the debugger |
**Debug Transient State**
key bindings is too long? use `SPC d .` to open the debug transient state:
![Debug Transient State](https://user-images.githubusercontent.com/13142418/33996076-b03c05bc-e0a5-11e7-90fd-5f31e2703d7e.png)

View File

@ -1,5 +1,6 @@
--- ---
title: "SpaceVim git layer" title: "SpaceVim git layer"
description: "This layers adds extensive support for git"
--- ---
# [SpaceVim Layers:](https://spacevim.org/layers) git # [SpaceVim Layers:](https://spacevim.org/layers) git

View File

@ -17,21 +17,34 @@ call SpaceVim#layers#load('shell',
\ ) \ )
``` ```
<!-- SpaceVim layer list start -->
## Available layers ## Available layers
this a list of buildin layers: | Name | Description |
| --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| [autocomplete](https://spacevim.org/layers/autocomplete/) | This layer provides auto-completion to SpaceVim |
| [chat](https://spacevim.org/layers/chat/) | SpaceVim chatting layer provide chatting with qq and weixin in vim. |
| [checkers](https://spacevim.org/layers/checkers/) | This layer provides syntax checking feature |
| [chinese](https://spacevim.org/layers/chinese/) | Layer for chinese users, include chinese docs and runtime messages |
| [colorscheme](https://spacevim.org/layers/colorscheme/) | colorscheme provides a list of colorscheme for SpaceVim, default colorscheme is gruvbox with dark theme. |
| [default](https://spacevim.org/layers/default/) | lt layer contains none plugins, but it has some better default config for vim and neovim |
| [git](https://spacevim.org/layers/git/) | This layers adds extensive support for git |
| [index](https://spacevim.org/layers/index/) | list of available layers in SpaceVim |
| [lang#c](https://spacevim.org/layers/lang/c/) | This layer is for c/c++/object-c development |
| [lang#java](https://spacevim.org/layers/lang/java/) | This layer is for Java development |
| [lang#javascript](https://spacevim.org/layers/lang/javascript/) | This layer is for JaveScript development |
| [lang#lisp](https://spacevim.org/layers/lang/lisp/) | for lisp development |
| [lang#markdown](https://spacevim.org/layers/lang/markdown/) | Edit markdown within vim, autopreview markdown in the default browser, with this layer you can also format markdown file. |
| [lang#php](https://spacevim.org/layers/lang/php/) | This layer adds PHP language support to SpaceVim |
| [lang#python](https://spacevim.org/layers/lang/python/) | This layer is for Python development, provide autocompletion, syntax checking, code format for python file. |
| [lang#ruby](https://spacevim.org/layers/lang/ruby/) | This layer is for ruby development, provide autocompletion, syntax checking, code format for ruby file. |
| [lang#typescript](https://spacevim.org/layers/lang/typescript/) | This layer is for TypeScript development |
| [lang#vim](https://spacevim.org/layers/lang/vim/) | This layer is for writting vim script, including code completion, syntax checking and buffer formatting |
| [shell](https://spacevim.org/layers/shell/) | This layer provide shell support in SpaceVim |
| [tags](https://spacevim.org/layers/tags/) | This layer provide tags manager for project |
| [ui](https://spacevim.org/layers/ui/) | Awesome UI layer for SpaceVim, provide IDE-like UI for neovim and vim in both TUI and GUI |
| Name | Description | Documentation | <!-- SpaceVim layer list end -->
| ------------- | :-------------------------------: | ---------------------------------------------------------- |
| autocomplete | autocomplete in vim | [documentation](https://spacevim.org/layers/autocomplete) | <!-- vim:set nowrap: -->
| chat | chatting in vim | [documentation](https://spacevim.org/layers/chat) |
| checkers | checking in vim | [documentation](https://spacevim.org/layers/checkers) |
| chinese | layer for chinese vimer | [documentation](https://spacevim.org/layers/chinese) |
| colorscheme | all colorscheme in spacevim | [documentation](https://spacevim.org/layers/colorscheme) |
| default | better default for vim and neovim | [documentation](https://spacevim.org/layers/default) |
| lang#java | java development in vim | [documentation](https://spacevim.org/layers/lang/java) |
| lang#lisp | lisp development in vim | [documentation](https://spacevim.org/layers/lang/lisp) |
| lang#markdown | layer for editing markdown in vim | [documentation](https://spacevim.org/layers/lang/markdown) |
| lang#php | php development in vim | [documentation](https://spacevim.org/layers/lang/php) |
| shell | shell support for SpaceVim | [documentation](https://spacevim.org/layers/shell) |
| tags | tags manager in vim | [documentation](https://spacevim.org/layers/tags) |

60
docs/layers/lang/c.md Normal file
View File

@ -0,0 +1,60 @@
---
title: "SpaceVim lang#c layer"
description: "This layer is for c/c++/object-c development"
---
# [Layers](https://spacevim.org/layers) > lang#c
<!-- vim-markdown-toc GFM -->
- [Description](#description)
- [Layer Installation](#layer-installation)
- [Configuration](#configuration)
<!-- vim-markdown-toc -->
## Description
This layer is for c/c++/object-c development.
## Layer Installation
To use this configuration layer, add `SPLayer 'lang#c'` to your custom configuration file or load layer with custom options.
```vim
call SpaceVim#layers#load('lang#c',
\ {
\ 'enable_libclang' : 1,
\ }
\ )
```
## Configuration
- `clang_executable` (string)
set the path to the clang executable
- `enable_libclang` (boolean)
use libclang instead of `clang -cc1`, by default it is 0.
- `libclang_path` (string)
The libclang shared object (dynamic library) file path. by default it is empty.
- `clang_std` (dict)
```json
{
"c": "c11",
"cpp": "c++1z",
"objc": "c11",
"objcpp": "c++1z",
}
```
- `clang_flag`
Create a `.clang` file at your project root. You should be able to just paste most of your compile flags in there. You can also use a list ['-Iwhatever', ...] when loadding this layer.

View File

@ -1,18 +1,20 @@
--- ---
title: "SpaceVim lang#java layer" title: "SpaceVim lang#java layer"
description: "This layer is for Java development"
--- ---
# [SpaceVim Layers:](https://spacevim.org/layers) lang#java # [SpaceVim Layers:](https://spacevim.org/layers) lang#java
<!-- vim-markdown-toc GFM --> <!-- vim-markdown-toc GFM -->
* [Description](#description)
* [Layer Installation](#layer-installation) - [Description](#description)
* [Key bindings](#key-bindings) - [Layer Installation](#layer-installation)
* [Java language specified key bindings](#java-language-specified-key-bindings) - [Key bindings](#key-bindings)
* [Maven](#maven) - [Java language specified key bindings](#java-language-specified-key-bindings)
* [Jump](#jump) - [Maven](#maven)
* [Problems buffer](#problems-buffer) - [Jump](#jump)
* [Project buffer](#project-buffer) - [Problems buffer](#problems-buffer)
- [Project buffer](#project-buffer)
<!-- vim-markdown-toc --> <!-- vim-markdown-toc -->

View File

@ -7,10 +7,10 @@ description: "This layer is for JaveScript development"
<!-- vim-markdown-toc GFM --> <!-- vim-markdown-toc GFM -->
- [Description](#description) * [Description](#description)
- [Layer Installation](#layer-installation) * [Layer Installation](#layer-installation)
- [Features](#features) * [Features](#features)
- [Layer configuration](#layer-configuration) * [Layer configuration](#layer-configuration)
<!-- vim-markdown-toc --> <!-- vim-markdown-toc -->
@ -31,6 +31,7 @@ To use this configuration layer, add `call SpaceVim#layers#load('lang#javascript
## Layer configuration ## Layer configuration
`use_lsp`: Use language server if possible. The default value is `0`.
`auto_fix`: auto fix problems when save files, disabled by default. if you need this feature, you can load this layer via: `auto_fix`: auto fix problems when save files, disabled by default. if you need this feature, you can load this layer via:
```vim ```vim

View File

@ -1,16 +1,17 @@
--- ---
title: "SpaceVim lang#markdown layer" title: "SpaceVim lang#markdown layer"
description: "Edit markdown within vim, autopreview markdown in the default browser, with this layer you can also format markdown file."
--- ---
# [SpaceVim Layers:](https://spacevim.org/layers) lang#markdown # [SpaceVim Layers:](https://spacevim.org/layers) lang#markdown
<!-- vim-markdown-toc GFM --> <!-- vim-markdown-toc GFM -->
* [Description](#description) - [Description](#description)
* [Layer Installation](#layer-installation) - [Layer Installation](#layer-installation)
* [formatting](#formatting) - [formatting](#formatting)
* [options](#options) - [options](#options)
* [Key bindings](#key-bindings) - [Key bindings](#key-bindings)
<!-- vim-markdown-toc --> <!-- vim-markdown-toc -->

View File

@ -1,13 +1,15 @@
--- ---
title: "SpaceVim lang#php layer" title: "SpaceVim lang#php layer"
description: "This layer adds PHP language support to SpaceVim"
--- ---
# [SpaceVim Layers:](https://spacevim.org/layers) lang#php # [SpaceVim Layers:](https://spacevim.org/layers) lang#php
<!-- vim-markdown-toc GFM --> <!-- vim-markdown-toc GFM -->
* [Description](#description)
* [Layer Installation](#layer-installation) - [Description](#description)
* [Requirement](#requirement) - [Layer Installation](#layer-installation)
- [Requirement](#requirement)
<!-- vim-markdown-toc --> <!-- vim-markdown-toc -->

View File

@ -1,12 +1,24 @@
--- ---
title: "SpaceVim lang#python layer" title: "SpaceVim lang#python layer"
description: "This layer is for Python development, provide autocompletion, syntax checking, code format for python file."
--- ---
# [SpaceVim Layers:](https://spacevim.org/layers) lang#python # [SpaceVim Layers:](https://spacevim.org/layers) lang#python
<!-- vim-markdown-toc GFM --> <!-- vim-markdown-toc GFM -->
* [Description](#description)
* [Features](#features) - [Description](#description)
- [Features](#features)
- [Install](#install)
- [Layer](#layer)
- [Syntax Checking](#syntax-checking)
- [Buffer formatting](#buffer-formatting)
- [Format imports](#format-imports)
- [Key bindings](#key-bindings)
- [Inferior REPL process](#inferior-repl-process)
- [Running current script](#running-current-script)
- [Testing](#testing)
- [Refactoring](#refactoring)
<!-- vim-markdown-toc --> <!-- vim-markdown-toc -->
@ -18,3 +30,66 @@ This layer is for Python development.
- Aoto-completion using [deoplete-jedi](https://github.com/zchee/deoplete-jedi) or [jedi-vim](https://github.com/davidhalter/jedi-vim) - Aoto-completion using [deoplete-jedi](https://github.com/zchee/deoplete-jedi) or [jedi-vim](https://github.com/davidhalter/jedi-vim)
- Documentation Lookup using [jedi-vim](https://github.com/davidhalter/jedi-vim) - Documentation Lookup using [jedi-vim](https://github.com/davidhalter/jedi-vim)
## Install
### Layer
To use this configuration layer, add `SPLayer 'lang#python'` to your custom configuration file.
### Syntax Checking
`checker` layer provide syntax checking feature, and for python it uses `flake8` package:
```sh
pip install --user flake8
```
### Buffer formatting
The default key binding for formatting buffer is `SPC b f`, and you need to install `yapf`. To enable automatic buffer formatting on save, load this layer with setting `format-on-save` to `1`.
```sh
pip install --user yapf
```
### Format imports
To be able to suppress unused imports easily, install [autoflake](https://github.com/myint/autoflake):
```sh
pip install --user autoflake
```
To be able to sort your imports, install [isort](https://github.com/timothycrosley/isort)
```sh
pip install --user isort
```
## Key bindings
### Inferior REPL process
Start a Python or iPython inferior REPL process with `SPC l s i`. If `ipython` is available in system executable search paths, `ipython` will be used to launch python shell; otherwise, default `python` interpreter will be used. You may change your system executable search path by activating a virtual environment.
Send code to inferior process commands:
| Key Binding | Description |
| ----------- | ------------------------------------------------ |
| `SPC l s b` | send buffer and keep code buffer focused |
| `SPC l s l` | send line and keep code buffer focused |
| `SPC l s s` | send selection text and keep code buffer focused |
### Running current script
To running a python script, you can press `SPC l r` to run current file without loss focus, and the result will be shown in a runner buffer.
### Testing
### Refactoring
| Key Binding | Description |
| ----------- | ------------------------------------ |
| `SPC l i r` | remove unused imports with autoflake |
| `SPC l i s` | sort imports with isort |

View File

@ -1,13 +1,20 @@
--- ---
title: "SpaceVim lang#ruby layer" title: "SpaceVim lang#ruby layer"
description: "This layer is for ruby development, provide autocompletion, syntax checking, code format for ruby file."
--- ---
# [SpaceVim Layers:](https://spacevim.org/layers) lang#ruby # [SpaceVim Layers:](https://spacevim.org/layers) lang#ruby
<!-- vim-markdown-toc GFM --> <!-- vim-markdown-toc GFM -->
* [Description](#description)
* [Layer Installation](#layer-installation) - [Description](#description)
* [Key bindings](#key-bindings) - [Installation](#installation)
- [Layer](#layer)
- [Syntax checking && Code formatting](#syntax-checking--code-formatting)
- [Key bindings](#key-bindings)
- [Inferior REPL process](#inferior-repl-process)
- [RuboCop](#rubocop)
- [Running current script](#running-current-script)
<!-- vim-markdown-toc --> <!-- vim-markdown-toc -->
@ -15,8 +22,41 @@ title: "SpaceVim lang#ruby layer"
This layer is for ruby development. This layer is for ruby development.
## Layer Installation ## Installation
### Layer
To use this configuration layer, add `SPLayer 'lang#ruby'` to your custom configuration file. To use this configuration layer, add `SPLayer 'lang#ruby'` to your custom configuration file.
### Syntax checking && Code formatting
To enable syntax checking and code formatting in spacevim, you need to install [cobocop](https://github.com/bbatsov/rubocop).
```sh
gem install rubocop
```
## Key bindings ## Key bindings
### Inferior REPL process
Start a `irb` inferior REPL process with `SPC l s i`.
Send code to inferior process commands:
| Key Binding | Description |
| ----------- | ------------------------------------------------ |
| `SPC l s b` | send buffer and keep code buffer focused |
| `SPC l s l` | send line and keep code buffer focused |
| `SPC l s s` | send selection text and keep code buffer focused |
### RuboCop
| Key Binding | Description |
| ----------- | ------------------------------------------ |
| `SPC l c f` | Runs RuboCop on the currently visited file |
### Running current script
To running a python script, you can press `SPC l r` to run current file without loss focus, and the result will be shown in a runner buffer.

View File

@ -1,5 +1,6 @@
--- ---
title: "SpaceVim lang#typescript layer" title: "SpaceVim lang#typescript layer"
description: "This layer is for TypeScript development"
--- ---
# [SpaceVim Layers:](https://spacevim.org/layers) lang#typescript # [SpaceVim Layers:](https://spacevim.org/layers) lang#typescript

View File

@ -1,5 +1,6 @@
--- ---
title: "SpaceVim lang#vim layer" title: "SpaceVim lang#vim layer"
description: "This layer is for writting vim script, including code completion, syntax checking and buffer formatting"
--- ---
# [SpaceVim Layers:](https://spacevim.org/layers) lang#vim # [SpaceVim Layers:](https://spacevim.org/layers) lang#vim

View File

@ -1,16 +1,18 @@
--- ---
title: "SpaceVim shell layer" title: "SpaceVim shell layer"
description: "This layer provide shell support in SpaceVim"
--- ---
# [SpaceVim Layers:](https://spacevim.org/layers) shell # [SpaceVim Layers:](https://spacevim.org/layers) shell
<!-- vim-markdown-toc GFM --> <!-- vim-markdown-toc GFM -->
* [Description](#description)
* [Install](#install) - [Description](#description)
* [Configuration](#configuration) - [Install](#install)
* [Default shell](#default-shell) - [Configuration](#configuration)
* [Default shell position and height](#default-shell-position-and-height) - [Default shell](#default-shell)
* [Key bindings](#key-bindings) - [Default shell position and height](#default-shell-position-and-height)
- [Key bindings](#key-bindings)
<!-- vim-markdown-toc --> <!-- vim-markdown-toc -->

View File

@ -1,5 +1,6 @@
--- ---
title: "SpaceVim ui layer" title: "SpaceVim ui layer"
description: "Awesome UI layer for SpaceVim, provide IDE-like UI for neovim and vim in both TUI and GUI"
--- ---
# [SpaceVim Layers:](https://spacevim.org/layers) ui # [SpaceVim Layers:](https://spacevim.org/layers) ui

View File

@ -1,5 +1,6 @@
--- ---
title: "Sponsors" title: "Sponsors"
description: "the companies or individuals contributing a monthly amount to help sustain SpaceVim's development."
--- ---
![Bountysource](https://spacevim.org/img/bountysource.png) ![Bountysource](https://spacevim.org/img/bountysource.png)
@ -8,20 +9,20 @@ If you want to support SpaceVim, please check out our [Bountysource campaign](ht
Also, you can buy me a coffee: Also, you can buy me a coffee:
<a href='https://ko-fi.com/A538L6H' target='_blank'><img height='36' style='border:0px;height:36px;' src='https://az743702.vo.msecnd.net/cdn/kofi4.png?v=f' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a> <a href='https://ko-fi.com/A538L6H' target='_blank'><img height='36' style='border:0px;height:36px;' src='https://az743702.vo.msecnd.net/cdn/kofi4.png?v=f' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a>
if you are a chinese, It will be more easy in wechat. | wechat | alipay |
| ------------------------------------------------------------------------ | -------------------------------------------------------------------------- |
| <img src="https://spacevim.org/img/weixin.png" height="150" width="150"> | <img src="https://spacevim.org/img/zhifubao.png" height="150" width="150"> |
![Buy me a coffee](https://spacevim.org/img/buy_me_a_coffee.png) Bitcoin: 1DtuVeg81c2L9NEhDaVTAAbrCR3pN5xPFv
# Current Sponsors # Current Sponsors
These are the companies or individuals contributing a monthly amount to help sustain SpaceVim's development. These are the companies or individuals contributing a monthly amount to help sustain SpaceVim's development.
See the [Bountysource campaign](https://www.bountysource.com/teams/spacevim) for more details. See the [Bountysource campaign](https://www.bountysource.com/teams/spacevim) for more details.
Date | Description | Date | Description |
-------------- | ---------------------- | --------- | --------------------------------------------- |
2017-2-23 | user from wechat contributed ¥40 to SpaceVim | 2017-2-23 | user from wechat contributed ¥40 to SpaceVim |
2017-2-14 | user from wechat contributed ¥100 to SpaceVim | 2017-2-14 | user from wechat contributed ¥100 to SpaceVim |

View File

@ -1 +1,9 @@
"=============================================================================
" init.vim --- Entry file for neovim
" Copyright (c) 2016-2017 Shidong Wang & Contributors
" Author: Shidong Wang < wsdjeg at 163.com >
" URL: https://spacevim.org
" License: MIT license
"=============================================================================
execute 'source' fnamemodify(expand('<sfile>'), ':h').'/config/main.vim' execute 'source' fnamemodify(expand('<sfile>'), ':h').'/config/main.vim'

View File

@ -1,8 +1,8 @@
if exists("b:current_syntax") if exists("b:current_syntax")
finish finish
endif endif
let b:current_syntax = "SpaceVimFlyGrep" let b:current_syntax = "SpaceVimFlyGrep"
syntax case ignore syntax case ignore
syn match FileName /[^:]*:\d\+:/
hi def link FileName Comment hi def link FileName Comment
call matchadd('FileName', '[^:]*:\d\+:', 2)

20
syntax/SpaceVimRunner.vim Normal file
View File

@ -0,0 +1,20 @@
if exists("b:current_syntax")
finish
endif
let b:current_syntax = "SpaceVimRunner"
syntax case ignore
syn match KeyBindings /\[Running\]/
syn match KeyBindings /\[Compile\]/
syn match RunnerCmd /\(\[Running\]\ \)\@<=.*/
syn match RunnerCmd /\(\[Compile\]\ \)\@<=.*/
syn match DoneSucceeded /\[Done]\(\ exited\ with\ code=0\)\@=/
syn match DoneFailed /\[Done]\(\ exited\ with\ code=[^0]\)\@=/
syn match ExitCode /\(\[Done\]\ exited\ with \)\@<=code=0/
syn match ExitCodeFailed /\(\[Done\]\ exited\ with \)\@<=code=[^0]/
hi def link RunnerCmd Comment
hi def link KeyBindings String
hi def link DoneSucceeded String
hi def link DoneFailed WarningMsg
hi def link ExitCode MoreMsg
hi def link ExitCodeFailed WarningMsg

View File

@ -11,3 +11,4 @@ Execute ( SpaceVim api: data#list ):
AssertEqual list.char_range('a', 'c'), ['a', 'b', 'c'] AssertEqual list.char_range('a', 'c'), ['a', 'b', 'c']
AssertEqual list.has(['a', 'c'], 'a'), 1 AssertEqual list.has(['a', 'c'], 'a'), 1
AssertEqual list.has_index(['a', 'c'], 1), 1 AssertEqual list.has_index(['a', 'c'], 1), 1
AssertEqual list.replace([1, 2, 3, 4, 5, 6, 7], 3, 5, [0, 0, 0, 0]), [1, 2, 3, 0, 0, 0, 0, 7]

8
vimrc
View File

@ -1,3 +1,11 @@
"=============================================================================
" vimrc --- Entry file for vim
" Copyright (c) 2016-2017 Shidong Wang & Contributors
" Author: Shidong Wang < wsdjeg at 163.com >
" URL: https://spacevim.org
" License: MIT license
"=============================================================================
" Note: Skip initialization for vim-tiny or vim-small. " Note: Skip initialization for vim-tiny or vim-small.
if 1 if 1
execute 'source' fnamemodify(expand('<sfile>'), ':h').'/config/main.vim' execute 'source' fnamemodify(expand('<sfile>'), ':h').'/config/main.vim'

9
wiki/Development-tips.md Normal file
View File

@ -0,0 +1,9 @@
steps of sending a PR:
1. fork this repo
2. checkout new branch from dev branch
3. push your commits
4. sending pull request

View File

@ -1,11 +1,9 @@
## Introduction SpaceVim is a community-driven vim distribution that supports vim and Neovim. SpaceVim manages collections of plugins in layers. Layers make it easy for you, the user, to enable a new language or feature by grouping all the related plugins together.
[SpaceVim](https://github.com/SpaceVim/SpaceVim) is a community-driven vim distribution with a bundle of modular configuration, Please star the project on github - it is a great way to show your appreciation while providing us motivation to continue working on this project. The extra visibility for the project doesn't hurt either!
here we call these modules as layers, each layer has different plugins and config, users just need
to select the layers they need. It got inspired by [spacemacs](https://github.com/syl20bnr/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.
![2017-02-26_1365x739](https://cloud.githubusercontent.com/assets/13142418/23339920/590f2e9a-fc67-11e6-99ec-794f79ba0902.png) ![welcome-page](https://user-images.githubusercontent.com/13142418/33793078-3446cb6e-dc76-11e7-9998-376a355557a4.png)
If you are new to vim, you should learning about Vim in general, read [vim-galore](https://github.com/mhinz/vim-galore). See the [documentation](https://spacevim.org/documentation) or [the list of layers](http://spacevim.org/layers/) for more information.
If you are new to vim, you should learning about Vim in general, read [vim-galore](https://github.com/mhinz/vim-galore).

View File

@ -9,3 +9,16 @@ This is the project layout of SpaceVim org:
| [SpaceVim/vim-swig](https://github.com/SpaceVim/vim-swig) | Swig vim syntax highlighting | | [SpaceVim/vim-swig](https://github.com/SpaceVim/vim-swig) | Swig vim syntax highlighting |
| [SpaceVim/vim-luacomplete](https://github.com/SpaceVim/vim-luacomplete) | lua complete plugin for vim | | [SpaceVim/vim-luacomplete](https://github.com/SpaceVim/vim-luacomplete) | lua complete plugin for vim |
| [SpaceVim/unite-unicode](https://github.com/SpaceVim/unite-unicode) | Unite.vim plugin to insert unicode gyphs | | [SpaceVim/unite-unicode](https://github.com/SpaceVim/unite-unicode) | Unite.vim plugin to insert unicode gyphs |
In the main repo, the layout is:
├─ autoload/SpaceVim/api/ APIs
├─ autoload/SpaceVim/layers/ layers
├─ autoload/SpaceVim/plugins/ plugins
├─ autoload/SpaceVim/mapping/ mapping guide
├─ doc/SpaceVim.txt help
├─ docs/ website
├─ wiki/ wiki
├─ bin/ executeable
└─ test/ tests