1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-03-13 02:05:40 +08:00

Merge branch 'dev' into signatures

This commit is contained in:
wsdjeg 2017-12-09 22:18:41 +08:00
commit 557d14eb9c
68 changed files with 2338 additions and 1514 deletions

View File

@ -11,8 +11,10 @@ if [ "$TRAVIS_PULL_REQUEST" != "false" ] ; then
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
spacevim/vims neovim-stable -u /.ci/common/github_commenter.vim
rm build_log
fi
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
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
spacevim/vims neovim-stable -u /.ci/common/github_commenter.vim
rm build_log
fi
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,10 @@
exe 'set nocp'
set rtp+=build/GitHub.vim
set rtp+=/API/
so build/GitHub.vim/plugin/github.vim
so build/GitHub.vim/autoload/github/api/issues.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') : ''
function! s:update_log(log, summary, new_log) abort
let log = split(a:log, "\n")
@ -16,8 +18,12 @@ function! s:update_log(log, summary, new_log) abort
let end = i
endif
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
if !empty(s:log)
if $LINT == 'vader'
@ -44,5 +50,26 @@ if !empty(s:log)
\ {'body': s:update_log(s:comment.body, s:summary, s:log)}, 'SpaceVimBot', $BOTSECRET)
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
quit

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!
![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.

View File

@ -195,7 +195,7 @@ let g:spacevim_statusline_inactive_separator = 'arrow'
" \ 'version control info'
" \ ]
" <
let g:spacevim_statusline_left_sections = ['winnr', 'filename', 'major mode', '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:
" >

View File

@ -7,7 +7,7 @@ let s:COP = SpaceVim#api#import('vim#compatible')
" this is for vim command completion
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)
endif
let result = s:COP.systemlist([s:completer, a:CmdLine])
@ -18,7 +18,7 @@ endfunction
" this is for vim input()
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)
endif
let result = s:COP.systemlist([s:completer, a:CmdLine])

View File

@ -10,6 +10,7 @@ function! SpaceVim#api#data#list#get() abort
\ 'has' : '',
\ 'has_index' : '',
\ 'listpart' : '',
\ 'replace' : '',
\ },
\ "function('s:' . v:key)"
\ )
@ -101,4 +102,12 @@ function! s:has_index(list, index) abort
return 0 <= a:index && a:index < len(a:list)
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:

View File

@ -120,7 +120,6 @@ function! s:self._update_content() abort
if type(key.key) == 1 " is a string
let right_max_key_len = max([len(key.key), right_max_key_len])
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])
elseif type(key.key) == 4 " is a dict
let right_max_key_len = max([len(key.key.name), right_max_key_len])

View File

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

View File

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

View File

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

View File

@ -4,7 +4,14 @@ function! SpaceVim#layers#chat#plugins() abort
\ ]
endfunction
let s:BASE64 = SpaceVim#api#import('data#base64')
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', 'o'], 'call chat#chatting#OpenMsgWin()', 'open spacevim community', 1)
endfunction

View File

@ -40,7 +40,9 @@ function! SpaceVim#layers#checkers#config() abort
augroup SpaceVim_layer_checker
autocmd!
if g:spacevim_enable_ale
if g:spacevim_enable_neomake
autocmd User NeomakeFinished nested let &l:statusline = SpaceVim#layers#core#statusline#get(1)
elseif g:spacevim_enable_ale
autocmd User ALELint let &l:statusline = SpaceVim#layers#core#statusline#get(1)
endif
" when move cursor, the error message will be shown below current line

View File

@ -131,7 +131,7 @@ function! s:git_branch() abort
call fugitive#detect(getcwd())
let l:head = fugitive#head()
endif
return empty(l:head) ? '' : ' '.l:head . ' '
return empty(l:head) ? '' : ' '.l:head . ' '
endif
return ''
endfunction
@ -151,7 +151,7 @@ endfunction
function! s:date() abort
return ' ' . s:TIME.current_date() . ' '
endfunction
function! s:whitespace() abort
@ -184,14 +184,72 @@ function! s:battery_status() abort
endif
endfunction
if g:spacevim_enable_neomake
function! s:syntax_checking()
if !exists('g:loaded_neomake')
return ''
endif
let counts = neomake#statusline#LoclistCounts()
let warnings = get(counts, 'W', 0)
let errors = get(counts, 'E', 0)
let l = warnings ? ' %#SpaceVim_statusline_warn#●' . warnings . ' ' : ''
let l .= errors ? (warnings ? '' : ' ') . '%#SpaceVim_statusline_error#●' . errors . ' ' : ''
return l
endfunction
elseif g:spacevim_enable_ale
function! s:syntax_checking()
if !exists('g:ale_enabled')
return ''
endif
let counts = ale#statusline#Count(bufnr(''))
let warnings = counts.warning + counts.style_warning
let errors = counts.error + counts.style_error
let l = warnings ? ' %#SpaceVim_statusline_warn#●' . warnings . ' ' : ''
let l .= errors ? (warnings ? '' : ' ') . '%#SpaceVim_statusline_error#●' . errors . ' ' : ''
return l
endfunction
else
function! s:syntax_checking()
if !exists(':SyntasticCheck')
return ''
endif
let l = SyntasticStatuslineFlag()
if strlen(l) > 0
return l
else
return ''
endif
endfunction
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 = {
\ 'winnr' : function('s:winnr'),
\ 'syntax checking' : function('s:syntax_checking'),
\ 'filename' : function('s:filename'),
\ 'fileformat' : function('s:fileformat'),
\ 'major mode' : function('s:major_mode'),
\ 'minor mode lighters' : function('s:modes'),
\ 'version control info' : function('s:git_branch'),
\ 'hunks' : function('s:hunks'),
\ 'cursorpos' : function('s:cursorpos'),
\ 'percentage' : function('s:percentage'),
\ 'time' : function('s:time'),
@ -236,43 +294,6 @@ function! s:search_status() abort
return ' ' . (str2nr(tt) - str2nr(ct) + 1) . '/' . tt . ' '
endfunction
if g:spacevim_enable_neomake
function! s:syntax_checking()
if !exists('g:loaded_neomake')
return ''
endif
let counts = neomake#statusline#LoclistCounts()
let warnings = get(counts, 'W', 0)
let errors = get(counts, 'E', 0)
let l = warnings ? ' %#SpaceVim_statusline_warn#●' . warnings . ' ' : ''
let l .= errors ? (warnings ? '' : ' ') . '%#SpaceVim_statusline_error#●' . errors . ' ' : ''
return l
endfunction
elseif g:spacevim_enable_ale
function! s:syntax_checking()
if !exists('g:ale_enabled')
return ''
endif
let counts = ale#statusline#Count(bufnr(''))
let warnings = counts.warning + counts.style_warning
let errors = counts.error + counts.style_error
let l = warnings ? ' %#SpaceVim_statusline_warn#●' . warnings . ' ' : ''
let l .= errors ? (warnings ? '' : ' ') . '%#SpaceVim_statusline_error#●' . errors . ' ' : ''
return l
endfunction
else
function! s:syntax_checking()
if !exists(':SyntasticCheck')
return ''
endif
let l = SyntasticStatuslineFlag()
if strlen(l) > 0
return l
else
return ''
endif
endfunction
endif
function! s:filesize() abort
@ -292,6 +313,9 @@ function! s:filesize() abort
endfunction
function! SpaceVim#layers#core#statusline#get(...) abort
for nr in range(1, winnr('$'))
call setwinvar(nr, 'winwidth', winwidth(nr))
endfor
if &filetype ==# 'vimfiler'
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
@ -354,19 +378,25 @@ function! s:active() abort
endfor
let fname = s:buffer_name()
return s:STATUSLINE.build(lsec, rsec, s:lsep, s:rsep, fname,
\ 'SpaceVim_statusline_a', 'SpaceVim_statusline_b', 'SpaceVim_statusline_c', 'SpaceVim_statusline_z')
\ 'SpaceVim_statusline_a', 'SpaceVim_statusline_b', 'SpaceVim_statusline_c', 'SpaceVim_statusline_z', winwidth(winnr()))
endfunction
function! s:inactive() abort
return '%#SpaceVim_statusline_ia#' . s:winnr() . '%#SpaceVim_statusline_ia_SpaceVim_statusline_b#' . s:lsep
\ . '%#SpaceVim_statusline_b#' . s:filename() . s:ilsep
\ . ' ' . &filetype . ' ' . s:ilsep
\ . s:modes() . s:ilsep
\ . s:git_branch() . s:ilsep
\ . ' %='
\ . s:irsep . '%{" " . &ff . "|" . (&fenc!=""?&fenc:&enc) . " "}'
\ . s:irsep . ' %P '
let l = '%#SpaceVim_statusline_ia#' . s:winnr() . '%#SpaceVim_statusline_ia_SpaceVim_statusline_b#' . s:lsep . '%#SpaceVim_statusline_b#'
let secs = [s:filename(), &filetype, s:modes(), s:git_branch()]
let base = 10
for sec in secs
let len = s:STATUSLINE.len(sec)
let base += len
let l .= '%{ get(w:, "winwidth", 150) < ' . base . ' ? "" : (" ' . s:STATUSLINE.eval(sec) . ' ' . s:ilsep . '")}'
endfor
if get(w:, 'winwidth', 150) > base + 10
let l .= join(['%=', '%{" " . &ff . "|" . (&fenc!=""?&fenc:&enc) . " "}', ' %P '], s:irsep)
endif
return l
endfunction
function! s:gitgutter() abort
if exists('b:gitgutter_summary')
let l:summary = get(b:, 'gitgutter_summary')
@ -473,10 +503,12 @@ function! SpaceVim#layers#core#statusline#config() abort
\ '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',
\ '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
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, '',
\ '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
let g:tagbar_status_func = 'TagbarStatusline'
let g:unite_force_overwrite_statusline = 0
@ -508,7 +540,7 @@ endfunction
function! SpaceVim#layers#core#statusline#ctrlp(focus, byfname, regex, prev, item, next, marked) abort
return s:STATUSLINE.build([' Ctrlp ', ' ' . a:prev . ' ', ' ' . a:item . ' ', ' ' . a:next . ' '],
\ [' ' . a:focus . ' ', ' ' . a:byfname . ' ', ' ' . getcwd() . ' '], s:lsep, s:rsep, '',
\ '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
" @vimlint(EVL103, 0, a:regex)
" @vimlint(EVL103, 0, a:marked)
@ -518,7 +550,7 @@ endfunction
function! SpaceVim#layers#core#statusline#ctrlp_status(str) abort
return s:STATUSLINE.build([' Ctrlp ', ' ' . a:str . ' '],
\ [' ' . 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
function! SpaceVim#layers#core#statusline#jump(i) abort
@ -590,14 +622,14 @@ endfunction
function! SpaceVim#layers#core#statusline#register_sections(name, func)
if has_key(s:registed_sections, a:name)
call SpaceVim#logger#info('statusline build-in section ' . a:name . ' has been changed!')
call extend(s:registed_sections, {a:name : a:func})
else
call extend(s:registed_sections, {a:name : a:func})
endif
if has_key(s:registed_sections, a:name)
call SpaceVim#logger#info('statusline build-in section ' . a:name . ' has been changed!')
call extend(s:registed_sections, {a:name : a:func})
else
call extend(s:registed_sections, {a:name : a:func})
endif
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
let s:separators = {
\ 'arrow' : ["\ue0b0", "\ue0b2"],
\ 'curve' : ["\ue0b4", "\ue0b6"],
\ 'slant' : ["\ue0b8", "\ue0ba"],
\ 'brace' : ["\ue0d2", "\ue0d4"],
\ 'fire' : ["\ue0c0", "\ue0c2"],
\ 'nil' : ['', ''],
\ }
\ 'arrow' : ["\ue0b0", "\ue0b2"],
\ 'curve' : ["\ue0b4", "\ue0b6"],
\ 'slant' : ["\ue0b8", "\ue0ba"],
\ 'brace' : ["\ue0d2", "\ue0d4"],
\ 'fire' : ["\ue0c0", "\ue0c2"],
\ 'nil' : ['', ''],
\ }
let s:i_separators = {
\ 'arrow' : ["\ue0b1", "\ue0b3"],
\ 'bar' : ["|", "|"],
\ 'nil' : ['', ''],
\ }
\ 'arrow' : ["\ue0b1", "\ue0b3"],
\ 'bar' : ["|", "|"],
\ 'nil' : ['', ''],
\ }
function! s:tabname(id) abort
if g:spacevim_buffer_index_type == 3
let id = s:messletters.index_num(a:id)
elseif g:spacevim_buffer_index_type == 4
let id = a:id
else
let id = s:messletters.bubble_num(a:id, g:spacevim_buffer_index_type) . ' '
endif
let fn = fnamemodify(bufname(a:id), ':t')
if g:spacevim_enable_tabline_filetype_icon
let icon = s:file.fticon(fn)
if !empty(icon)
let fn = icon . ' ' . fn
endif
endif
if empty(fn)
return 'No Name'
else
return id . fn
if g:spacevim_buffer_index_type == 3
let id = s:messletters.index_num(a:id)
elseif g:spacevim_buffer_index_type == 4
let id = a:id
else
let id = s:messletters.bubble_num(a:id, g:spacevim_buffer_index_type) . ' '
endif
let fn = fnamemodify(bufname(a:id), ':t')
if g:spacevim_enable_tabline_filetype_icon
let icon = s:file.fticon(fn)
if !empty(icon)
let fn = icon . ' ' . fn
endif
endif
if empty(fn)
return 'No Name'
else
return id . fn
endif
endfunction
function! s:need_show_bfname(stack, nr) abort
let dupbufs = filter(a:stack, "fnamemodify(bufname(v:val), ':t') ==# fnamemodify(bufname(a:nr), ':t')")
if len(dupbufs) >= 2
for i in dupbufs
call setbufvar(i, '_spacevim_statusline_showbfname', 1)
endfor
endif
let dupbufs = filter(a:stack, "fnamemodify(bufname(v:val), ':t') ==# fnamemodify(bufname(a:nr), ':t')")
if len(dupbufs) >= 2
for i in dupbufs
call setbufvar(i, '_spacevim_statusline_showbfname', 1)
endfor
endif
endfunction
function! s:is_modified(nr) abort
return getbufvar(a:nr, '&modified', 0)
endfunction
function! SpaceVim#layers#core#tabline#get() abort
let nr = tabpagenr('$')
let t = ''
" the stack should be the bufnr stack of tabline
let stack = []
if nr > 1
let ct = tabpagenr()
if ct == 1
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 '
let nr = tabpagenr('$')
let t = ''
" the stack should be the bufnr stack of tabline
let stack = []
if nr > 1
let ct = tabpagenr()
if ct == 1
let t = '%#SpaceVim_tabline_a# '
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)
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 '
let t = '%#SpaceVim_tabline_b# '
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
function! SpaceVim#layers#core#tabline#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:separators['arrow'])
set tabline=%!SpaceVim#layers#core#tabline#get()
augroup SpaceVim_tabline
autocmd!
autocmd ColorScheme * call SpaceVim#layers#core#tabline#def_colors()
augroup END
for i in range(1, 9)
exe "call SpaceVim#mapping#def('nmap <silent>', '<leader>" . i
\ . "', ':call SpaceVim#layers#core#tabline#jump("
\ . i . ")<cr>', 'Switch to airline tab " . i
\ . "', '', 'tabline index " . i . "')"
endfor
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#space#def('nmap', ['-'], 'bprevious', 'window previous', 1)
"call SpaceVim#mapping#space#def('nmap', ['+'], 'bnext', 'window next', 1)
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'])
set tabline=%!SpaceVim#layers#core#tabline#get()
augroup SpaceVim_tabline
autocmd!
autocmd ColorScheme * call SpaceVim#layers#core#tabline#def_colors()
augroup END
for i in range(1, 9)
exe "call SpaceVim#mapping#def('nmap <silent>', '<leader>" . i
\ . "', ':call SpaceVim#layers#core#tabline#jump("
\ . i . ")<cr>', 'Switch to airline tab " . i
\ . "', '', 'tabline index " . i . "')"
endfor
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#space#def('nmap', ['-'], 'bprevious', 'window previous', 1)
"call SpaceVim#mapping#space#def('nmap', ['+'], 'bnext', 'window next', 1)
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
let bid = s:buffers[a:id - 1]
exe 'silent b' . bid
let bid = s:buffers[a:id - 1]
exe 'silent b' . bid
bd
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
function! SpaceVim#layers#core#tabline#def_colors() abort
if !empty(g:spacevim_custom_color_palette)
let t = g:spacevim_custom_color_palette
else
let name = get(g:, 'colors_name', 'gruvbox')
try
let t = SpaceVim#mapping#guide#theme#{name}#palette()
catch /^Vim\%((\a\+)\)\=:E117/
let t = SpaceVim#mapping#guide#theme#gruvbox#palette()
endtry
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_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')
if !empty(g:spacevim_custom_color_palette)
let t = g:spacevim_custom_color_palette
else
let name = get(g:, 'colors_name', 'gruvbox')
try
let t = SpaceVim#mapping#guide#theme#{name}#palette()
catch /^Vim\%((\a\+)\)\=:E117/
let t = SpaceVim#mapping#guide#theme#gruvbox#palette()
endtry
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_b ctermbg=' . t[1][2] . ' ctermfg=' . t[1][3] . ' guibg=' . t[1][1] . ' guifg=' . t[1][0]
" 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

View File

@ -5,439 +5,497 @@
let s:filename = expand('<sfile>:~')
function! SpaceVim#layers#default#plugins() abort
let plugins = []
let plugins = []
return plugins
return plugins
endfunction
let s:lnum = expand('<slnum>') + 3
function! SpaceVim#layers#default#config() abort
" Unimpaired bindings
" 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>
" Unimpaired bindings
" 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>
"]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 +'. v:count1<cr>
"]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 +'. v:count1<cr>
" [b or ]n go to previous or next buffer
nnoremap <silent> [b :<c-u>bN<cr>
nnoremap <silent> ]b :<c-u>bn<cr>
" [b or ]n go to previous or next buffer
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
nnoremap <silent> ]f :<c-u>call <SID>next_file()<cr>
nnoremap <silent> [f :<c-u>call <SID>previous_file()<cr>
" [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>previous_file()<cr>
" [l or ]l go to next and previous error
nnoremap <silent> [l :lprevious<cr>
nnoremap <silent> ]l :lnext<cr>
" [l or ]l go to next and previous error
nnoremap <silent> [l :lprevious<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
nnoremap <silent> [w :call <SID>previous_window()<cr>
nnoremap <silent> ]w :call <SID>next_window()<cr>
" [w or ]w go to next or previous window
nnoremap <silent> [w :call <SID>previous_window()<cr>
nnoremap <silent> ]w :call <SID>next_window()<cr>
" [t or ]t for next and previous tab
nnoremap <silent> [t :tabprevious<cr>
nnoremap <silent> ]t :tabnext<cr>
" [t or ]t for next and previous tab
nnoremap <silent> [t :tabprevious<cr>
nnoremap <silent> ]t :tabnext<cr>
" [p or ]p for p and P
nnoremap <silent> [p P
nnoremap <silent> ]p p
" [p or ]p for p and P
nnoremap <silent> [p P
nnoremap <silent> ]p p
" Select last paste
nnoremap <silent><expr> gp '`['.strpart(getregtype(), 0, 1).'`]'
" Select last paste
nnoremap <silent><expr> gp '`['.strpart(getregtype(), 0, 1).'`]'
let lnum = expand('<slnum>') + s:lnum - 1
if has('python3')
let cmd = 'DeniteBufferDir file_rec'
elseif has('python')
let cmd = "exe 'LeaderfFile ' . fnamemodify(bufname('%'), ':h')"
else
let cmd = "exe 'CtrlP ' . fnamemodify(bufname('%'), ':h')"
endif
call SpaceVim#mapping#space#def('nnoremap', ['f', 'f'],
\ cmd,
\ ['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 +python support will use leaderf',
\ 'otherwise will use ctrlp',
\ '',
\ 'Definition: ' . s:filename . ':' . lnum,
\ ]
\ ]
\ , 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', 'W'], 'write !sudo tee % >/dev/null', 'save buffer with sudo', 1)
" help mappings
call SpaceVim#mapping#space#def('nnoremap', ['h', 'I'], 'call SpaceVim#issue#report()', 'Reporting an issue of SpaceVim', 1)
if has('python3')
call SpaceVim#mapping#space#def('nnoremap', ['h', 'i'], 'DeniteCursorWord help', 'get help with the symbol at point', 1)
else
call SpaceVim#mapping#space#def('nnoremap', ['h', 'i'], 'UniteWithCursorWord help', 'get help with the symbol at point', 1)
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', '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', '[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', '$'], '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', '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', '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-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('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', '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('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', 's'], 'call call('
\ . string(s:_function('s:split_string')) . ', [0])',
\ 'split sexp', 1)
call SpaceVim#mapping#space#def('nnoremap', ['j', 'S'], 'call call('
\ . string(s:_function('s:split_string')) . ', [1])',
\ 'split-and-add-newline', 1)
call SpaceVim#mapping#space#def('nnoremap', ['w', 'r'], 'call call('
\ . string(s:_function('s:next_window')) . ', [])',
\ 'rotate windows forward', 1)
call SpaceVim#mapping#space#def('nnoremap', ['w', 'R'], 'call call('
\ . string(s:_function('s:previous_window')) . ', [])',
\ 'rotate windows backward', 1)
call SpaceVim#mapping#space#def('nnoremap', ['j', 'u'], 'call call('
\ . string(s:_function('s:jump_to_url')) . ', [])',
\ 'jump to url', 1)
call SpaceVim#mapping#space#def('nnoremap', ['<Tab>'], 'try | b# | catch | endtry', 'last buffer', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', '.'], 'call call('
\ . string(s:_function('s:buffer_transient_state')) . ', [])',
\ '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#kill_visible_buffer_choosewin()',
\ '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'], 'call SpaceVim#mapping#clear_saved_buffers()', 'clear all saved buffers', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', 'e'], 'call call('
\ . string(s:_function('s:safe_erase_buffer')) . ', [])',
\ 'safe-erase-buffer', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', 'h'], 'Startify', 'home', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', 'm'], 'call call('
\ . string(s:_function('s:open_message_buffer')) . ', [])',
\ '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', 'R'], 'call call('
\ . string(s:_function('s:safe_revert_buffer')) . ', [])',
\ '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', 'w'], 'setl readonly!', 'read-only-mode', 1)
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', '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', 'l'], 'rightbelow vertical new', 'new-empty-buffer-right', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', 'N', 'n'], 'enew', 'new-empty-buffer', 1)
let lnum = expand('<slnum>') + s:lnum - 1
if has('python3')
let cmd = 'DeniteBufferDir file_rec'
elseif has('python')
let cmd = "exe 'LeaderfFile ' . fnamemodify(bufname('%'), ':h')"
else
let cmd = "exe 'CtrlP ' . fnamemodify(bufname('%'), ':h')"
endif
call SpaceVim#mapping#space#def('nnoremap', ['f', 'f'],
\ cmd,
\ ['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 +python support will use leaderf',
\ 'otherwise will use ctrlp',
\ '',
\ 'Definition: ' . s:filename . ':' . lnum,
\ ]
\ ]
\ , 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', 'W'], 'write !sudo tee % >/dev/null', 'save buffer with sudo', 1)
" help mappings
call SpaceVim#mapping#space#def('nnoremap', ['h', 'I'], 'call SpaceVim#issue#report()', 'Reporting an issue of SpaceVim', 1)
if has('python3')
call SpaceVim#mapping#space#def('nnoremap', ['h', 'i'], 'DeniteCursorWord help', 'get help with the symbol at point', 1)
else
call SpaceVim#mapping#space#def('nnoremap', ['h', 'i'], 'UniteWithCursorWord help', 'get help with the symbol at point', 1)
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', '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', '[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', '$'], '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', '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', '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-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('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', '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('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', 's'], 'call call('
\ . string(s:_function('s:split_string')) . ', [0])',
\ 'split sexp', 1)
call SpaceVim#mapping#space#def('nnoremap', ['j', 'S'], 'call call('
\ . string(s:_function('s:split_string')) . ', [1])',
\ 'split-and-add-newline', 1)
call SpaceVim#mapping#space#def('nnoremap', ['w', 'r'], 'call call('
\ . string(s:_function('s:next_window')) . ', [])',
\ 'rotate windows forward', 1)
call SpaceVim#mapping#space#def('nnoremap', ['w', 'R'], 'call call('
\ . string(s:_function('s:previous_window')) . ', [])',
\ 'rotate windows backward', 1)
call SpaceVim#mapping#space#def('nnoremap', ['j', 'u'], 'call call('
\ . string(s:_function('s:jump_to_url')) . ', [])',
\ 'jump to url', 1)
call SpaceVim#mapping#space#def('nnoremap', ['<Tab>'], 'try | b# | catch | endtry', 'last buffer', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', '.'], 'call call('
\ . string(s:_function('s:buffer_transient_state')) . ', [])',
\ '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#kill_visible_buffer_choosewin()',
\ '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'], 'call SpaceVim#mapping#clear_saved_buffers()', 'clear all saved buffers', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', 'e'], 'call call('
\ . string(s:_function('s:safe_erase_buffer')) . ', [])',
\ 'safe-erase-buffer', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', 'h'], 'Startify', 'home', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', 'm'], 'call call('
\ . string(s:_function('s:open_message_buffer')) . ', [])',
\ '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', 'R'], 'call call('
\ . string(s:_function('s:safe_revert_buffer')) . ', [])',
\ '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', 'w'], 'setl readonly!', 'read-only-mode', 1)
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', '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', 'l'], 'rightbelow vertical new', 'new-empty-buffer-right', 1)
call SpaceVim#mapping#space#def('nnoremap', ['b', 'N', 'n'], 'enew', 'new-empty-buffer', 1)
" file mappings
call SpaceVim#mapping#space#def('nnoremap', ['f', 'b'], 'Unite vim_bookmarks', 'unite-filtered-bookmarks', 1)
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', 'u'], 'update | e ++ff=dos | setlocal ff=unix | w', 'dos2unix', 1)
call SpaceVim#mapping#space#def('nnoremap', ['f', 'D'], 'call call('
\ . string(s:_function('s:delete_current_buffer_file')) . ', [])',
\ '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', 'r'], 'Unite file_mru', 'open-recent-file', 1)
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 -no-toggle', 'show_file_tree', 1)
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'], 'NERDTree', 'toggle_file_tree', 1)
endif
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)'}
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)
" file mappings
call SpaceVim#mapping#space#def('nnoremap', ['f', 'b'], 'Unite vim_bookmarks', 'unite-filtered-bookmarks', 1)
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', 'u'], 'update | e ++ff=dos | setlocal ff=unix | w', 'dos2unix', 1)
call SpaceVim#mapping#space#def('nnoremap', ['f', 'D'], 'call call('
\ . string(s:_function('s:delete_current_buffer_file')) . ', [])',
\ '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', 'r'], 'Unite file_mru', 'open-recent-file', 1)
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 -no-toggle', 'show_file_tree', 1)
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'], 'NERDTree', 'toggle_file_tree', 1)
endif
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)'}
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)
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
let s:file = SpaceVim#api#import('file')
let s:MESSAGE = SpaceVim#api#import('vim#message')
function! s:next_file() abort
let dir = expand('%:p:h')
let f = expand('%:t')
let file = s:file.ls(dir, 1)
if index(file, f) == -1
call add(file,f)
endif
call sort(file)
if len(file) != 1
if index(file, f) == len(file) - 1
exe 'e ' . dir . s:file.separator . file[0]
else
exe 'e ' . dir . s:file.separator . file[index(file, f) + 1]
endif
let dir = expand('%:p:h')
let f = expand('%:t')
let file = s:file.ls(dir, 1)
if index(file, f) == -1
call add(file,f)
endif
call sort(file)
if len(file) != 1
if index(file, f) == len(file) - 1
exe 'e ' . dir . s:file.separator . file[0]
else
exe 'e ' . dir . s:file.separator . file[index(file, f) + 1]
endif
endif
endfunction
function! s:previous_file() abort
let dir = expand('%:p:h')
let f = expand('%:t')
let file = s:file.ls(dir, 1)
if index(file, f) == -1
call add(file,f)
endif
call sort(file)
if len(file) != 1
if index(file, f) == 0
exe 'e ' . dir . s:file.separator . file[-1]
else
exe 'e ' . dir . s:file.separator . file[index(file, f) - 1]
endif
let dir = expand('%:p:h')
let f = expand('%:t')
let file = s:file.ls(dir, 1)
if index(file, f) == -1
call add(file,f)
endif
call sort(file)
if len(file) != 1
if index(file, f) == 0
exe 'e ' . dir . s:file.separator . file[-1]
else
exe 'e ' . dir . s:file.separator . file[index(file, f) - 1]
endif
endif
endfunction
function! s:next_window() abort
try
exe (winnr() + 1 ) . 'wincmd w'
catch
exe 1 . 'wincmd w'
endtry
try
exe (winnr() + 1 ) . 'wincmd w'
catch
exe 1 . 'wincmd w'
endtry
endfunction
function! s:previous_window() abort
try
if winnr() == 1
exe winnr('$') . 'wincmd w'
else
exe (winnr() - 1 ) . 'wincmd w'
endif
catch
exe winnr('$') . 'wincmd w'
endtry
try
if winnr() == 1
exe winnr('$') . 'wincmd w'
else
exe (winnr() - 1 ) . 'wincmd w'
endif
catch
exe winnr('$') . 'wincmd w'
endtry
endfunction
function! s:split_string(newline) abort
let syn_name = synIDattr(synID(line("."), col("."), 1), "name")
if syn_name == &filetype . 'String'
let c = col('.')
let sep = ''
while c > 0
if s:is_string(line('.'), c)
let c = c - 1
else
let sep = getline('.')[c]
break
endif
endwhile
if a:newline
let save_register_m = @m
let @m = sep . "\n" . sep
normal! "mp
let @m = save_register_m
else
let save_register_m = @m
let @m = sep . sep
normal! "mp
let @m = save_register_m
endif
let syn_name = synIDattr(synID(line("."), col("."), 1), "name")
if syn_name == &filetype . 'String'
let c = col('.')
let sep = ''
while c > 0
if s:is_string(line('.'), c)
let c = c - 1
else
let sep = getline('.')[c]
break
endif
endwhile
if a:newline
let save_register_m = @m
let @m = sep . "\n" . sep
normal! "mp
let @m = save_register_m
else
let save_register_m = @m
let @m = sep . sep
normal! "mp
let @m = save_register_m
endif
endif
endfunction
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
" function() wrapper
if v:version > 703 || v:version == 703 && has('patch1170')
function! s:_function(fstr) abort
return function(a:fstr)
endfunction
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
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
function! s:jump_to_url() abort
let g:EasyMotion_re_anywhere = 'http[s]*://'
call feedkeys("\<Plug>(easymotion-jumptoanywhere)")
let g:EasyMotion_re_anywhere = 'http[s]*://'
call feedkeys("\<Plug>(easymotion-jumptoanywhere)")
endfunction
function! s:safe_erase_buffer() abort
if s:MESSAGE.confirm('Erase content of buffer ' . expand('%:t'))
normal! ggdG
endif
redraw!
if s:MESSAGE.confirm('Erase content of buffer ' . expand('%:t'))
normal! ggdG
endif
redraw!
endfunction
function! s:open_message_buffer() abort
vertical topleft edit __Message_Buffer__
setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline nospell nonumber norelativenumber
setf message
normal! ggdG
silent put =execute(':message')
normal! G
setlocal nomodifiable
nnoremap <silent> <buffer> q :silent bd<CR>
vertical topleft edit __Message_Buffer__
setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline nospell nonumber norelativenumber
setf message
normal! ggdG
silent put =execute(':message')
normal! G
setlocal nomodifiable
nnoremap <silent> <buffer> q :silent bd<CR>
endfunction
function! s:safe_revert_buffer() abort
if s:MESSAGE.confirm('Revert buffer form ' . expand('%:p'))
edit!
endif
redraw!
if s:MESSAGE.confirm('Revert buffer form ' . expand('%:p'))
edit!
endif
redraw!
endfunction
function! s:delete_current_buffer_file() abort
if s:MESSAGE.confirm('Are you sure you want to delete this file')
let f = fnameescape(expand('%:p'))
call SpaceVim#mapping#close_current_buffer()
if delete(f) == 0
echo "File '" . f . "' successfully removed"
endif
if s:MESSAGE.confirm('Are you sure you want to delete this file')
let f = fnameescape(expand('%:p'))
call SpaceVim#mapping#close_current_buffer()
if delete(f) == 0
echo "File '" . f . "' successfully removed"
endif
redraw!
endif
redraw!
endfunction
function! s:swap_buffer_with_nth_win(nr) abort
if a:nr <= winnr('$') && a:nr != winnr()
let cb = bufnr('%')
let tb = winbufnr(a:nr)
if cb != tb
exe a:nr . 'wincmd w'
exe 'b' . cb
wincmd p
exe 'b' . tb
endif
if a:nr <= winnr('$') && a:nr != winnr()
let cb = bufnr('%')
let tb = winbufnr(a:nr)
if cb != tb
exe a:nr . 'wincmd w'
exe 'b' . cb
wincmd p
exe 'b' . tb
endif
endif
endfunction
function! s:move_buffer_to_nth_win(nr) abort
if a:nr <= winnr('$') && a:nr != winnr()
let cb = bufnr('%')
bp
exe a:nr . 'wincmd w'
exe 'b' . cb
wincmd p
endif
if a:nr <= winnr('$') && a:nr != winnr()
let cb = bufnr('%')
bp
exe a:nr . 'wincmd w'
exe 'b' . cb
wincmd p
endif
endfunction
function! s:buffer_transient_state() abort
let state = SpaceVim#api#import('transient_state')
call state.set_title('Buffer Selection Transient State')
call state.defind_keys(
\ {
\ 'layout' : 'vertical split',
\ 'left' : [
\ {
\ 'key' : {
\ 'name' : 'C-1..C-9',
\ 'pos' : [[1,4], [6,9]],
\ 'handles' : [
\ ["\<C-1>" , ''],
\ ["\<C-2>" , ''],
\ ["\<C-3>" , ''],
\ ["\<C-4>" , ''],
\ ["\<C-5>" , ''],
\ ["\<C-6>" , ''],
\ ["\<C-7>" , ''],
\ ["\<C-8>" , ''],
\ ["\<C-9>" , ''],
\ ],
\ },
\ 'desc' : 'goto nth window',
\ 'func' : '',
\ 'cmd' : '',
\ 'exit' : 0,
\ },
\ {
\ 'key' : {
\ 'name' : '1..9',
\ 'pos' : [[1,2], [4,5]],
\ 'handles' : [
\ ['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])'],
\ ['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])'],
\ ['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])'],
\ ['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])'],
\ ['9' , 'call call(' . string(s:_function('s:move_buffer_to_nth_win')) . ', [9])'],
\ ],
\ },
\ 'desc' : 'move buffer to nth window',
\ 'func' : '',
\ 'cmd' : '',
\ 'exit' : 0,
\ },
\ {
\ 'key' : {
\ 'name' : 'M-1..M-9',
\ 'pos' : [[1,4], [6,9]],
\ 'handles' : [
\ ["\<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-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-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-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-9>" , 'call call(' . string(s:_function('s:swap_buffer_with_nth_win')) . ', [9])'],
\ ],
\ },
\ 'desc' : 'swap buffer with nth window',
\ 'func' : '',
\ 'cmd' : '',
\ 'exit' : 0,
\ },
\ ],
\ 'right' : [
\ {
\ 'key' : 'n',
\ 'desc' : 'next buffer',
\ 'func' : '',
\ 'cmd' : 'bnext',
\ 'exit' : 0,
\ },
\ {
\ 'key' : ['N', 'p'],
\ 'desc' : 'previous buffer',
\ 'func' : '',
\ 'cmd' : 'bp',
\ 'exit' : 0,
\ },
\ {
\ 'key' : 'd',
\ 'desc' : 'kill buffer',
\ 'func' : '',
\ 'cmd' : 'call SpaceVim#mapping#close_current_buffer()',
\ 'exit' : 0,
\ },
\ {
\ 'key' : 'q',
\ 'desc' : 'quit',
\ 'func' : '',
\ 'cmd' : '',
\ 'exit' : 1,
\ },
\ ],
\ }
\ )
call state.open()
let state = SpaceVim#api#import('transient_state')
call state.set_title('Buffer Selection Transient State')
call state.defind_keys(
\ {
\ 'layout' : 'vertical split',
\ 'left' : [
\ {
\ 'key' : {
\ 'name' : 'C-1..C-9',
\ 'pos' : [[1,4], [6,9]],
\ 'handles' : [
\ ["\<C-1>" , ''],
\ ["\<C-2>" , ''],
\ ["\<C-3>" , ''],
\ ["\<C-4>" , ''],
\ ["\<C-5>" , ''],
\ ["\<C-6>" , ''],
\ ["\<C-7>" , ''],
\ ["\<C-8>" , ''],
\ ["\<C-9>" , ''],
\ ],
\ },
\ 'desc' : 'goto nth window',
\ 'func' : '',
\ 'cmd' : '',
\ 'exit' : 0,
\ },
\ {
\ 'key' : {
\ 'name' : '1..9',
\ 'pos' : [[1,2], [4,5]],
\ 'handles' : [
\ ['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])'],
\ ['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])'],
\ ['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])'],
\ ['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])'],
\ ['9' , 'call call(' . string(s:_function('s:move_buffer_to_nth_win')) . ', [9])'],
\ ],
\ },
\ 'desc' : 'move buffer to nth window',
\ 'func' : '',
\ 'cmd' : '',
\ 'exit' : 0,
\ },
\ {
\ 'key' : {
\ 'name' : 'M-1..M-9',
\ 'pos' : [[1,4], [6,9]],
\ 'handles' : [
\ ["\<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-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-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-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-9>" , 'call call(' . string(s:_function('s:swap_buffer_with_nth_win')) . ', [9])'],
\ ],
\ },
\ 'desc' : 'swap buffer with nth window',
\ 'func' : '',
\ 'cmd' : '',
\ 'exit' : 0,
\ },
\ ],
\ 'right' : [
\ {
\ 'key' : 'n',
\ 'desc' : 'next buffer',
\ 'func' : '',
\ 'cmd' : 'bnext',
\ 'exit' : 0,
\ },
\ {
\ 'key' : ['N', 'p'],
\ 'desc' : 'previous buffer',
\ 'func' : '',
\ 'cmd' : 'bp',
\ 'exit' : 0,
\ },
\ {
\ 'key' : 'd',
\ 'desc' : 'kill buffer',
\ 'func' : '',
\ 'cmd' : 'call SpaceVim#mapping#close_current_buffer()',
\ 'exit' : 0,
\ },
\ {
\ 'key' : 'q',
\ 'desc' : 'quit',
\ 'func' : '',
\ 'cmd' : '',
\ 'exit' : 1,
\ },
\ ],
\ }
\ )
call state.open()
endfunction

View File

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

View File

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

View File

@ -1,23 +1,56 @@
function! SpaceVim#layers#lang#haskell#plugins() abort
let plugins = []
call add(plugins,['neovimhaskell/haskell-vim', { 'on_ft' : 'haskell'}])
call add(plugins,['pbrisbin/vim-syntax-shakespeare', { 'on_ft' : 'haskell'}])
call add(plugins,['eagletmt/neco-ghc', { 'on_ft' : 'haskell'}])
return plugins
let plugins = [
\ ['neovimhaskell/haskell-vim', { 'on_ft': 'haskell' }],
\ ['pbrisbin/vim-syntax-shakespeare', { 'on_ft': 'haskell' }],
\ ]
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
function! SpaceVim#layers#lang#haskell#config() abort
let g:haskellmode_completion_ghc = 0
call SpaceVim#plugins#runner#reg_runner('haskell', ['ghc -v0 --make %s -o #TEMP#', '#TEMP#'])
call SpaceVim#mapping#space#regesit_lang_mappings('haskell', funcref('s:language_specified_mappings'))
call SpaceVim#plugins#runner#reg_runner('haskell', [
\ '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
autocmd!
autocmd FileType haskell setlocal omnifunc=necoghc#omnifunc
if !s:use_lsp
autocmd FileType haskell setlocal omnifunc=necoghc#omnifunc
endif
augroup END
endfunction
function! s:language_specified_mappings() abort
call SpaceVim#mapping#space#langSPC('nmap', ['l', 'r'], 'call SpaceVim#plugins#runner#open()', 'execute current file', 1)
function! s:on_ft() abort
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

View File

@ -5,22 +5,30 @@ function! SpaceVim#layers#lang#javascript#plugins() abort
\ ['othree/es.next.syntax.vim', { 'on_ft' : 'javascript' }],
\ ['othree/javascript-libraries-syntax.vim', { 'on_ft' : ['javascript', 'coffee', 'ls', 'typescript'] }],
\ ['MaxMEllon/vim-jsx-pretty', { 'on_ft' : 'javascript' }],
\ ['ternjs/tern_for_vim', { 'on_ft' : 'javascript', 'build' : 'npm install' }],
\ ['Galooshi/vim-import-js', { 'on_ft' : 'javascript', 'build' : 'npm install -g import-js' }],
\ ['maksimr/vim-jsbeautify', { 'on_ft' : 'javascript' }],
\ ['mmalecki/vim-node.js', { 'on_ft' : 'javascript' }],
\ ]
if has('nvim')
call add(plugins,['carlitux/deoplete-ternjs', { 'on_ft' : ['javascript'] }])
if !s:use_lsp
call add(plugins, ['ternjs/tern_for_vim', {
\ 'on_ft': 'javascript', 'build' : 'npm install' }])
if has('nvim')
call add(plugins, ['carlitux/deoplete-ternjs', { 'on_ft': [
\ 'javascript'] }])
endif
endif
return plugins
endfunction
let s:use_lsp = 0
let s:auto_fix = 0
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)
endfunction
@ -34,9 +42,17 @@ function! SpaceVim#layers#lang#javascript#config() abort
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#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
" Only use eslint
@ -52,12 +68,7 @@ function! SpaceVim#layers#lang#javascript#config() abort
endif
endfunction
function! s:language_specified_mappings() 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)
" }}}
function! s:on_ft() abort
" Galooshi/vim-import-js {{{
nnoremap <silent><buffer> <F4> :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
" }}}
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
function! s:gotodef() abort
function! s:tern_go_to_def() abort
if exists(':TernDef')
TernDef
endif
endfunction
" vim:set et sw=2 cc=80:
" vi: et sw=2 cc=80

View File

@ -1,7 +1,12 @@
function! SpaceVim#layers#lang#javascript#plugins() abort
return [
\ ['chrisbra/vim-zsh', { 'on_ft' : 'zsh' }]
\ ]
function! SpaceVim#layers#lang#sh#plugins() abort
let l:plugins = []
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
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'
endif
let g:LanguageClient_autoStart = 0
let g:LanguageClient_autoStart = 1
" }}}
endfunction

View File

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

View File

@ -73,25 +73,9 @@ function! SpaceVim#layers#tools#config() abort
endif
map <Leader>td <Plug>TaskList
noremap <silent> <F8> :TlistToggle<CR>
function! OpenOrCloseNERDTree() abort
exec 'normal! A'
endfunction
if g:spacevim_filemanager ==# 'nerdtree'
noremap <silent> <F3> :NERDTreeToggle<CR>
endif
let g:NERDTreeWinPos=get(g:,'NERDTreeWinPos','right')
let g:NERDTreeWinSize=get(g:,'NERDTreeWinSize',31)
let g:NERDTreeChDirMode=get(g:,'NERDTreeChDirMode',1)
augroup nerdtree_zvim
autocmd!
autocmd bufenter *
\ if (winnr('$') == 1 && exists('b:NERDTree')
\ && b:NERDTree.isTabTree())
\| q
\| endif
autocmd FileType nerdtree nnoremap <silent><buffer><Space>
\ :call OpenOrCloseNERDTree()<cr>
augroup END
endfunction
" vim:set et sw=2 cc=80:

View File

@ -26,7 +26,7 @@ function! SpaceVim#layers#ui#config() abort
let g:indentLine_char = get(g:, 'indentLine_char', '¦')
let g:indentLine_concealcursor = 'niv'
let g:indentLine_conceallevel = 2
let g:indentLine_fileTypeExclude = ['help', 'startify', 'vimfiler']
let g:indentLine_fileTypeExclude = ['help', 'man', 'startify', 'vimfiler']
let g:signify_disable_by_default = 0
let g:signify_line_highlight = 0
noremap <silent> <F2> :silent TagbarToggle<CR>

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
endfunction
function! SpaceVim#mapping#shift_tab() abort
return pumvisible() ? "\<C-p>" : "\<Plug>delimitMateS-Tab"
endfunction
if g:spacevim_snippet_engine ==# 'neosnippet'
function! SpaceVim#mapping#shift_tab() abort
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
return SpaceVim#mapping#tab#i_tab()

View File

@ -17,6 +17,7 @@ function! SpaceVim#mapping#space#init() abort
let g:_spacevim_mappings_space.w = {'name' : '+Windows'}
let g:_spacevim_mappings_space.p = {'name' : '+Projects'}
let g:_spacevim_mappings_space.h = {'name' : '+Help'}
let g:_spacevim_mappings_space.n = {'name' : '+Narrow/Numbers'}
let g:_spacevim_mappings_space.q = {'name' : '+Quit'}
let g:_spacevim_mappings_space.l = {'name' : '+Language Specified'}
let g:_spacevim_mappings_space.s = {'name' : '+Searching'}

View File

@ -20,9 +20,23 @@ if g:spacevim_snippet_engine ==# 'neosnippet'
endif
endfunction
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
return "\<tab>"
if getline('.')[col('.')-2] ==# '{'&& pumvisible()
return "\<C-n>"
endif
return "\<C-R>=SpaceVim#mapping#tab#expandable()\<cr>"
endfunction
endif
" vim:set et sw=2 cc=80:

View File

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

View File

@ -232,6 +232,7 @@ endfunction
" here if a:data == 0, git pull succeed
function! s:on_pull_exit(id, data, event) abort
call SpaceVim#logger#info(string(a:data))
if a:id == -1
let id = s:jobpid
else
@ -287,6 +288,7 @@ endfunction
" @vimlint(EVL103, 1, a:event)
function! s:on_install_stdout(id, data, event) abort
call SpaceVim#logger#info(string(a:data))
if a:id == -1
let id = s:jobpid
else
@ -302,7 +304,7 @@ endfunction
" @vimlint(EVL103, 0, a:event)
function! s:lock_revision(repo) abort
let cmd = ['git', '-C', a:repo.path, 'checkout', a:repo.rev]
let cmd = ['git', '--git-dir', a:repo.path . '/.git', 'checkout', a:repo.rev]
call s:VIM_CO.system(cmd)
endfunction
@ -356,7 +358,8 @@ endfunction
function! s:pull(repo) abort
let s:pct += 1
let s:ui_buf[a:repo.name] = s:pct
let argv = ['git', '-C', a:repo.path, '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
let jobid = s:JOB.start(argv,{
\ 'on_stderr' : function('s:on_install_stdout'),

View File

@ -10,6 +10,7 @@ let s:JOB = SpaceVim#api#import('job')
let s:BUFFER = SpaceVim#api#import('vim#buffer')
let s:STRING = SpaceVim#api#import('data#string')
let s:runners = {}
let s:bufnr = 0
@ -33,6 +34,8 @@ let s:target = ''
function! s:async_run(runner) abort
if type(a:runner) == type('')
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:job_id = s:JOB.start(cmd,{
\ 'on_stdout' : function('s:on_stdout'),
@ -42,6 +45,12 @@ function! s:async_run(runner) abort
elseif type(a:runner) == type([])
let s:target = tempname()
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:job_id = s:JOB.start(compile_cmd,{
\ '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_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
endfunction
@ -84,27 +100,67 @@ function! SpaceVim#plugins#runner#open() abort
call s:update_statusline()
endif
endfunction
" @vimlint(EVL103, 1, a:job_id)
" @vimlint(EVL103, 1, a:data)
" @vimlint(EVL103, 1, a:event)
function! s:on_stdout(job_id, data, event) abort
call s:BUFFER.buf_set_lines(s:bufnr, s:lines , s:lines + 1, 0, a:data)
let s:lines += len(a:data)
call s:update_statusline()
endfunction
function! s:on_stderr(job_id, data, event) abort
let s:status.has_errors = 1
call s:BUFFER.buf_set_lines(s:bufnr, s:lines , s:lines + 1, 0, a:data)
let s:lines += len(a:data)
call s:update_statusline()
endfunction
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']
call s:BUFFER.buf_set_lines(s:bufnr, s:lines , s:lines + 1, 0, done)
call s:update_statusline()
endfunction

View File

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

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'])
call deoplete#custom#set('racer', 'mark', '')
" vim
let g:deoplete#ignore_sources.vim = get(g:deoplete#ignore_sources, 'vim', ['tag'])
" clojure
let g:deoplete#keyword_patterns.clojure = '[\w!$%&*+/:<=>?@\^_~\-\.#]*'

View File

@ -0,0 +1,41 @@
let s:VCOP = SpaceVim#api#import('vim#compatible')
let g:NERDTreeWinPos=get(g:,'NERDTreeWinPos','right')
let g:NERDTreeWinSize=get(g:,'NERDTreeWinSize',31)
let g:NERDTreeChDirMode=get(g:,'NERDTreeChDirMode',1)
augroup nerdtree_zvim
autocmd!
autocmd bufenter *
\ if (winnr('$') == 1 && exists('b:NERDTree')
\ && b:NERDTree.isTabTree())
\| q
\| endif
autocmd FileType nerdtree call s:nerdtreeinit()
augroup END
function! s:nerdtreeinit() abort
nnoremap <silent><buffer> yY :<C-u>call <SID>copy_to_system_clipboard()<CR>
nnoremap <silent><buffer> P :<C-u>call <SID>paste_to_file_manager()<CR>
endfunction
function! s:paste_to_file_manager() abort
let path = g:NERDTreeFileNode.GetSelected().path.str()
if !isdirectory(path)
let path = fnamemodify(path, ':p:h')
endif
let old_wd = getcwd()
if old_wd == path
call s:VCOP.systemlist(['xclip-pastefile'])
else
noautocmd exe 'cd' fnameescape(path)
call s:VCOP.systemlist(['xclip-pastefile'])
noautocmd exe 'cd' fnameescape(old_wd)
endif
endfunction
function! s:copy_to_system_clipboard() abort
let filename = g:NERDTreeFileNode.GetSelected().path.str()
call s:VCOP.systemlist(['xclip-copyfile', filename])
echo 'Yanked:' . (type(filename) == 3 ? len(filename) : 1 ) . ( isdirectory(filename) ? 'directory' : 'file' )
endfunction

View File

@ -1,4 +1,7 @@
scriptencoding utf-8
let s:VCOP = SpaceVim#api#import('vim#compatible')
let g:vimfiler_as_default_explorer = get(g:, 'vimfiler_as_default_explorer', 1)
let g:vimfiler_restore_alternate_file = get(g:, 'vimfiler_restore_alternate_file', 1)
let g:vimfiler_tree_indentation = get(g:, 'vimfiler_tree_indentation', 1)
@ -15,7 +18,8 @@ let g:vimfiler_ignore_pattern = get(g:, 'vimfiler_ignore_pattern', [
\ '^\.DS_Store$',
\ '^\.init\.vim-rplugin\~$',
\ '^\.netrwhist$',
\ '\.class$'
\ '\.class$',
\ '^\.'
\])
if has('mac')
@ -80,6 +84,8 @@ function! s:vimfilerinit()
nnoremap <silent><buffer><expr> sg vimfiler#do_action('vsplit')
nnoremap <silent><buffer><expr> sv vimfiler#do_action('split')
nnoremap <silent><buffer><expr> st vimfiler#do_action('tabswitch')
nnoremap <silent><buffer> yY :<C-u>call <SID>copy_to_system_clipboard()<CR>
nnoremap <silent><buffer> P :<C-u>call <SID>paste_to_file_manager()<CR>
nmap <buffer> gx <Plug>(vimfiler_execute_vimfiler_associated)
nmap <buffer> ' <Plug>(vimfiler_toggle_mark_current_line)
nmap <buffer> v <Plug>(vimfiler_quick_look)
@ -92,4 +98,37 @@ function! s:vimfilerinit()
nmap <buffer> <Right> <Plug>(vimfiler_smart_l)
endf
function! s:paste_to_file_manager() abort
let path = vimfiler#get_filename()
if !isdirectory(path)
let path = fnamemodify(path, ':p:h')
endif
let old_wd = getcwd()
if old_wd == path
call s:VCOP.systemlist(['xclip-pastefile'])
else
noautocmd exe 'cd' fnameescape(path)
call s:VCOP.systemlist(['xclip-pastefile'])
noautocmd exe 'cd' fnameescape(old_wd)
endif
endfunction
function! s:copy_to_system_clipboard() abort
let filename = vimfiler#get_marked_filenames(b:vimfiler)
if empty(filename)
" Use cursor filename.
let filename = vimfiler#get_filename()
if filename ==# '..' || empty(vimfiler#get_file(b:vimfiler))
let filename = b:vimfiler.current_dir
else
let filename = vimfiler#get_file(b:vimfiler).action__path
endif
call s:VCOP.systemlist(['xclip-copyfile', filename])
else
call s:VCOP.systemlist(['xclip-copyfile'] + filename)
endif
echo 'Yanked:' . (type(filename) == 3 ? len(filename) : 1 ) . ' files'
endfunction
" vim:set et sw=2:

View File

@ -1,22 +1,39 @@
"let g:ycm_global_ycm_extra_conf = '~/.ycm_extra_conf.py'
"let g:ycm_confirm_extra_conf = 0
let g:ycm_collect_identifiers_from_tags_files = 1
let g:ycm_collect_identifiers_from_comments_and_strings = 1
let g:ycm_key_list_select_completion = ['<C-TAB>', '<Down>']
let g:ycm_key_list_previous_completion = ['<C-S-TAB>','<Up>']
let g:ycm_seed_identifiers_with_syntax = 1
let g:ycm_key_invoke_completion = '<leader><tab>'
let g:ycm_semantic_triggers = {
\ 'c' : ['->', '.'],
\ 'objc' : ['->', '.'],
\ 'ocaml' : ['.', '#'],
\ 'cpp,objcpp' : ['->', '.', '::'],
\ 'perl' : ['->'],
\ 'php' : ['->', '::'],
\ 'cs,javascript,d,python,perl6,scala,vb,elixir,go' : ['.'],
\ 'java,jsp' : ['.'],
\ 'vim' : ['re![_a-zA-Z]+[_\w]*\.'],
\ 'ruby' : ['.', '::'],
\ 'lua' : ['.', ':'],
\ 'erlang' : [':'],
\ }
let g:ycm_collect_identifiers_from_tags_files =
\ get(g:, 'ycm_collect_identifiers_from_tags_files', 1)
let g:ycm_collect_identifiers_from_comments_and_strings =
\ get(g:, 'ycm_collect_identifiers_from_comments_and_strings', 1)
let g:ycm_key_list_select_completion =
\ get(g:, 'ycm_key_list_select_completion', ['<C-TAB>', '<Down>'])
let g:ycm_key_list_previous_completion =
\ get(g:, 'ycm_key_list_previous_completion', ['<C-S-TAB>','<Up>'])
let g:ycm_seed_identifiers_with_syntax =
\ get(g:, 'ycm_seed_identifiers_with_syntax', 1)
let g:ycm_key_invoke_completion =
\ get(g:, 'ycm_key_invoke_completion', '<leader><tab>')
let g:ycm_semantic_triggers = get(g:, 'ycm_semantic_triggers', {})
function! s:set_ft_triggers(ft, expr, override) abort
if a:override
let g:ycm_semantic_triggers[a:ft] = a:expr
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.
let g:UltiSnipsEditSplit="vertical"
let g:UltiSnipsExpandTrigger='<tab>'
let g:UltiSnipsJumpBackwardTrigger="<c-z>"
let g:UltiSnipsJumpForwardTrigger='<tab>'
let g:UltiSnipsExpandTrigger='<Nop>'
let g:UltiSnipsJumpBackwardTrigger='<Nop>'
let g:UltiSnipsJumpForwardTrigger='<Nop>'
let g:UltiSnipsSnippetsDir = '~/.SpaceVim.d/UltiSnips'

View File

@ -282,9 +282,9 @@ Set the information symbol for SpaceVim's syntax maker. Default is '🛈'.
*g:spacevim_terminal_cursor_shape*
Set the SpaceVim cursor shape in the terminal. Set to 0 to prevent Nvim from
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
cursor. Host terminal must support the DECSCUSR CSI escape sequence.
changing the cursor shape. Set to 1 to enable non-blinking mode-sensitive
cursor. Set to 2 to enable blinking mode-sensitive cursor (this is the
default). 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:

View File

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

View File

@ -1,122 +1,115 @@
<!doctype html>
<html>
<head>
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<script>
(adsbygoogle = window.adsbygoogle || []).push({
google_ad_client: "ca-pub-5073224535135889",
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'
<head>
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<script>
(adsbygoogle = window.adsbygoogle || []).push({
google_ad_client: "ca-pub-5073224535135889",
enable_page_level_ads: true
});
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l != 'dataLayer' ? '&l=' + l : '';
j.async = true;
j.src =
'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', 'GTM-PCLWNCD');
</script>
<!-- End Google Tag Manager -->
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<title>{{ page.title | default: Home }} - SpaceVim</title>
<link rel="stylesheet" href="{{ '/assets/css/style.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>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<!--[if lt IE 8]>
<link rel="stylesheet" href="{{ '/assets/css/ie.css' | relative_url }}">
<![endif]-->
<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>
</script>
<meta name="baidu-site-verification" content="TUNbZyzuOn" />
{% seo %}
<script type="text/javascript" src="http://tajs.qq.com/stats?sId=60680063" charset="UTF-8"></script>
<script>
(function(w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({
'gtm.start': new Date().getTime(),
event: 'gtm.js'
});
</script>
<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>
<!-- 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],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-PCLWNCD');
</script>
<!-- End Google Tag Manager -->
<meta charset="utf-8">
<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>
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-PCLWNCD"
<body>
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-PCLWNCD"
height="0" width="0" style="display:none;visibility:hidden"></iframe>
</noscript>
<!-- End Google Tag Manager (noscript) -->
<a href="https://github.com/SpaceVim/SpaceVim">
<!-- End Google Tag Manager (noscript) -->
<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;"/>
</a>
<div class="wrapper">
<div class="wrapper">
<section>
<div id="title">
<h1>{{ site.title | default: site.github.repository_name }}</h1>
<p>{{ site.description | default: site.github.project_tagline }}</p>
<hr>
<p align="center">
<b><a href="{{ site.url }}">Home</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 }}/development">Development</a></b> |
<b><a href="{{ site.url }}/community">Community</a></b> |
<b><a href="{{ site.url }}/sponsors">Sponsors</a></b>
</p>
<hr>
</div>
<section>
<div id="title">
<h1>{{ site.title | default: site.github.repository_name }}</h1>
<p>{{ site.description | default: site.github.project_tagline }}</p>
<hr>
<p align="center">
<b><a href="{{ site.url }}">Home</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 }}/development">Development</a></b> |
<b><a href="{{ site.url }}/community">Community</a></b> |
<b><a href="{{ site.url }}/sponsors">Sponsors</a></b>
</p>
<hr>
</div>
{{ content }}
{{ content }}
</section>
</section>
</div>
</div>
{% if site.google_analytics %}
<script type="text/javascript">
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"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("{{ site.google_analytics }}");
pageTracker._trackPageview();
} catch (err) {}
</script>
{% endif %}
<script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=ra-58a01d3aac22bd89"></script>
</body>
<root>
<p align="center">
<span class="credits right">Hosted on GitHub &mdash; Theme by <a href="https://twitter.com/michigangraham">mattgraham</a></span>
</p>
</root>
{% if site.google_analytics %}
<script type="text/javascript">
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"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("{{ site.google_analytics }}");
pageTracker._trackPageview();
} catch (err) {}
</script>
{% endif %}
<script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=ra-58a01d3aac22bd89"></script>
</body>
<root>
<p align="center">
<span class="credits right">Hosted on GitHub &mdash; Theme by <a href="https://twitter.com/michigangraham">mattgraham</a></span>
</p>
</root>
</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 */
/* ============================================================================= HTML5 display definitions ========================================================================== */
/* 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 { font-size: 28px; }
h1 { font-size: $h1-font-size; }
h2 { font-size: 24px; }
h2 { font-size: $h2-font-size; }
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: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"
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,
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.
[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.
If you encounter any bugs or have feature requests, just open an issue
report on Github.
## Goals
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)
- [vimdoc](https://github.com/google/vimdoc) generate doc file for SpaceVim
- [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,32 @@
---
title: "Community"
description: "A list for community channels for SpaceVim."
---
# Community
Try these SpaceVim hangouts for any questions, problems or comments.
Visit these resources for help or general questions.
## Ask
- [issue tracker](https://github.com/SpaceVim/SpaceVim/issues) for issue and feature requests
- vi StackExchange for "how to" & configuration questions
- Try [vi.stackexchange.com](https://vi.stackexchange.com/) for **usage and configuration questions**.
- [Twitter](https://twitter.com/SpaceVim) for hugs & pithy comments
- [Facebook](https://www.facebook.com/SpaceVim)
## Chat
- [![Gitter](https://badges.gitter.im/SpaceVim/SpaceVim.svg)](https://gitter.im/SpaceVim/SpaceVim?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) (bridged to #spacevim IRC)
All of these channels are bridged together. Click on one of the badges below to join the chat, In all of these channels, messages from `SpaceVimBot` is sent by remote user, and the format of the remote messages is:
"[{PROTOCOL}] <{NICK}> {MESSAGE}"
- [`SpaceVim/SpaceVim` on gitter](https://gitter.im/SpaceVim/SpaceVim)
- [`#spacevim` on FreeNode](https://webchat.freenode.net/?channels=spacevim)
- [![QQ](https://img.shields.io/badge/QQ群-121056965-blue.svg)](https://jq.qq.com/?_wv=1027&k=43DB6SG)
- [![Facebook](https://img.shields.io/badge/FaceBook-SpaceVim-blue.svg)](https://www.facebook.com/SpaceVim)
- [/r/spacevim on Reddit](https://reddit.com/r/spacevim)
- [`t.me/SpaceVim` on telegram](t.me/SpaceVim)
- [`#spacevim:matrix.org` on Matrix](https://riot.im/app/#/room/%23spacevim:matrix.org)
- [`#spacevim` on slack](https://spacevim.slack.com/messages/C88CTJ62J)
## Discuss
- [google mailing list](https://groups.google.com/forum/#!forum/spacevim)
- [/r/spacevim on Reddit](https://reddit.com/r/spacevim)

View File

@ -1,23 +1,37 @@
---
title: "Development"
description: "A guide for contributing to SpaceVim."
description: "Development information about SpaceVim, including contributing guidelines and changelog."
---
# 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:
[![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
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
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.
- [SpaceVim documentation](https://spacevim.org/documentation): It is the general documentation of SpaceVim.
### Reporting issues
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 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.
@ -50,6 +66,7 @@ Code contributions are welcome. Please read the following sections carefully. In
#### License
The license is MIT for all the parts of SpaceVim. this includes:
- The initialization and core 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:
```
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
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
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
two together.
More detailed explanatory text, if necessary. Wrap it to about 72
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
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
two together.
Write your commit message in the imperative: "Fix bug" and not "Fixed bug"
or "Fixes bug." This convention matches up with commit messages generated
by commands like git merge and git revert.
Write your commit message in the imperative: "Fix bug" and not "Fixed bug"
or "Fixes bug." This convention matches up with commit messages generated
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
single space, with blank lines in between, but conventions vary here
- Typically a hyphen or asterisk is used for the bullet, followed by a
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.
@ -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.
#### Contributing a statusline theme
## Build with SpaceVim

View File

@ -1,16 +1,42 @@
---
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"
---
# Conventions
## Content
<!-- vim-markdown-toc GFM -->
- [commit emoji convention](#commit-emoji-convention)
- [viml coding style guild](#viml-coding-style-guide)
- [markdown style guide](#markdown-style-guide)
- [Commit emoji convention](#commit-emoji-convention)
- [Viml coding style guide](#viml-coding-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
@ -23,29 +49,35 @@ permalink: "/conventions"
- :beer: I'm happy like reduced code complexity.
## Viml coding style guide
### 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:
#### Strings
**Prefer single quoted strings**
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
**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.
#### 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
**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.
@ -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.
#### Fragile commands
**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.
@ -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.
#### Catching Exceptions
**Match error codes, not error text.**
Error text may be locale dependant.
### General Guidelines
#### Messaging
**Message the user infrequently.**
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.
#### Type checking
**Use strict and explicit checks where possible.**
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.
#### Python
**Use sparingly.**
Use python only when it provides critical functionality, for example when writing threaded code.
#### Other Languages
**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.
#### Plugin layout
**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).
#### Functions
**In the autoload/ directory, defined with [!] and [abort].**
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.
#### Commands
**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/.
@ -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.
#### Autocommands
**Place them in plugin/autocmds.vim, within 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.
#### Mappings
**Place them in plugin/mappings.vim, using maktaba#plugin#MapPrefix to get a prefix.**
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.
#### Settings
**Change settings locally**
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
- Prefer line continuations on semantic boundaries.
```diff
@ -214,6 +260,7 @@ autocommand BufEnter <buffer>
- Do not continue multi-line commands when you can avoid it. Prefer function calls.
#### Naming
In general, use plugin-names-like-this, FunctionNamesLikeThis, CommandNamesLikeThis, augroup_names_like_this, variable_names_like_this.
Always prefix variables with their scope.
@ -221,28 +268,29 @@ Always prefix variables with their scope.
- plugin-names-like-this
Keep them short and sweet.
- FunctionNamesLikeThis
- Prefix script-local functions with s:
- Autoloaded functions may not have a scope prefix.
- Do not create global functions. Use autoloaded functions instead.
- Prefix script-local functions with s:
- Autoloaded functions may not have a scope prefix.
- Do not create global functions. Use autoloaded functions instead.
- CommandNamesLikeThis
Prefer succinct command names over common command prefixes.
- variable_names_like_this
Augroup names count as variables for naming purposes.
- Prefix all variables with their scope.
- Global variables with g:
- Script-local variables with s:
- Function arguments with a:
- Function-local variables with l:
- Vim-predefined variables with v:
- Buffer-local variables with b:
- g:, s:, and a: must always be used.
- 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.
- Global variables with g:
- Script-local variables with s:
- Function arguments with a:
- Function-local variables with l:
- Vim-predefined variables with v:
- Buffer-local variables with b:
- g:, s:, and a: must always be used.
- 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.
## Markdown style guide
## Thanks:
- link : https://google.github.io/styleguide/vimscriptguide.xml
- link : https://google.github.io/styleguide/vimscriptfull.xml
- link : https://github.com/noahfrederick/vim-scripting-style-guide/blob/master/doc/scripting-style.txt
- link : <https://google.github.io/styleguide/vimscriptguide.xml>
- 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)

View File

@ -88,6 +88,7 @@ description: "General documentation about how to using SpaceVim, including the q
- [Auto-indent pasted text](#auto-indent-pasted-text)
- [Text manipulation commands](#text-manipulation-commands)
- [Text insertion commands](#text-insertion-commands)
- [Increase/Decrease numbers](#increasedecrease-numbers)
- [Commenting](#commenting)
- [Multi-Encodings](#multi-encodings)
- [Errors handling](#errors-handling)
@ -514,6 +515,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 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
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 +565,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> 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
### Completion
@ -881,27 +925,31 @@ VCS integration is supported, there will be a column status, this feature maybe
Navigation is centered on the `hjkl` keys with the hope of providing a fast navigation experience like in [vifm](https://github.com/vifm):
| Key Binding | Description |
| ----------------------------- | ------------------------------------------------- |
| `<F3>` or `SPC f t` | Toggle file explorer |
| **Within _VimFiler_ buffers** | |
| `<Left>` or `h` | go to parent node and collapse expanded directory |
| `<Down>` or `j` | select next file or directory |
| `<Up>` or `k` | select previous file or directory |
| `<Right>` or `l` | open selected file or expand directory |
| `Ctrl`+`j` | Un-map |
| `Ctrl`+`l` | Un-map |
| `E` | Un-map |
| `.` | toggle visible ignored files |
| `sv` | Split edit |
| `sg` | Vertical split edit |
| `p` | Preview |
| `i` | Switch to directory history |
| `v` | Quick look |
| `gx` | Execute with vimfiler associated |
| `'` | Toggle mark current line |
| `V` | Clear all marks |
| `Ctrl`+`r` | Redraw |
| Key Binding | Description |
| ------------------------------ | ------------------------------------------------- |
| `<F3>` or `SPC f t` | Toggle file explorer |
| **Within _file tree_ buffers** | |
| `<Left>` or `h` | go to parent node and collapse expanded directory |
| `<Down>` or `j` | select next file or directory |
| `<Up>` or `k` | select previous file or directory |
| `<Right>` or `l` | open selected file or expand directory |
| `Ctrl`+`j` | Un-map |
| `Ctrl`+`l` | Un-map |
| `E` | Un-map |
| `N` | Create new file under corsor |
| `yy` | Copy file full path to system clipboard |
| `yY` | Copy file to system clipboard |
| `P` | Paste file to the position under the cursor |
| `.` | toggle visible ignored files |
| `sv` | Split edit |
| `sg` | Vertical split edit |
| `p` | Preview |
| `i` | Switch to directory history |
| `v` | Quick look |
| `gx` | Execute with vimfiler associated |
| `'` | Toggle mark current line |
| `V` | Clear all marks |
| `Ctrl`+`r` | Redraw |
##### Open file with file tree.
@ -1173,18 +1221,18 @@ Background search keyword in a project, when searching done, the count will be s
key binding in FlyGrep buffer:
Key Binding Description
\-----------\| -----------
`<Esc>` | close FlyGrep buffer
`<Enter>` | open file at the cursor line
`<Tab>` | move cursor line down
`<S-Tab>` | move cursor line up
`<Bs>` | remove last character
`<C-w>` | remove the Word before the cursor
`<C-u>` | remove the Line before the cursor
`<C-k>` | remove the Line after the cursor
`<C-a>`/`<Home>` | Go to the beginning of the line
`<C-e>`/`<End>` | Go to the end of the line
| Key Binding | Description |
| ---------------- | --------------------------------- |
| `<Esc>` | close FlyGrep buffer |
| `<Enter>` | open file at the cursor line |
| `<Tab>` | move cursor line down |
| `<S-Tab>` | move cursor line up |
| `<Bs>` | remove last character |
| `<C-w>` | remove the Word before the cursor |
| `<C-u>` | remove the Line before the cursor |
| `<C-k>` | remove the Line after the cursor |
| `<C-a>`/`<Home>` | Go to the beginning of the line |
| `<C-e>`/`<End>` | Go to the end of the line |
#### Persistent highlighting
@ -1275,6 +1323,23 @@ Text insertion commands (start with `i`):
| `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) |
#### 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
Comments are handled by [nerdcommenter](https://github.com/scrooloose/nerdcommenter), its bound to the following keys.
@ -1335,7 +1400,7 @@ Custom sign symbol:
| ------ | ----------- | --------------------------- |
| `✖` | Error | `g:spacevim_error_symbol` |
| `➤` | warning | `g:spacevim_warning_symbol` |
| `🛈` | Info | `g:spacevim_info_symbol` |
| `🛈` | Info | `g:spacevim_info_symbol` |
### Managing projects
@ -1347,7 +1412,6 @@ project manager commands start with `p`:
| ----------- | ----------------------------------------------------- |
| `SPC p '` | open a shell in projects root (with the shell layer) |
## EditorConfig
SpaceVim has support for [EditorConfig](http://editorconfig.org/), a configuration file to “define and maintain consistent coding styles between different editors and IDEs.”
@ -1362,32 +1426,31 @@ SpaceVim starts a server at launch. This server is killed whenever you close you
If you are using neovim, you need to install [neovim-remote](https://github.com/mhinz/neovim-remote), then add this to your bashrc.
```
export PATH=$PATH:$HOME/.SpaceVim/bin
```
export PATH=$PATH:$HOME/.SpaceVim/bin
Use `svc` to open a file in the existing Vim server, or using `nsvc` to open a file in the existing neovim server.
![server-and-client](https://user-images.githubusercontent.com/13142418/32554968-7164fe9c-c4d6-11e7-95f7-f6a6ea75e05b.gif)
<!-- SpaceVim Achievements start -->
## Achievements
### issues
Achievements | Account
----- | -----
[100th issue(issue)](https://github.com/SpaceVim/SpaceVim/issues/100) | [BenBergman](https://github.com/BenBergman)
| Achievements | Account |
| --------------------------------------------------------------------- | ------------------------------------------- |
| [100th issue(issue)](https://github.com/SpaceVim/SpaceVim/issues/100) | [BenBergman](https://github.com/BenBergman) |
### Stars, forks and watchers
Achievements | Account
----- | -----
First stargazers | [monkeydterry](https://github.com/monkeydterry)
100th stargazers | [iwillalwaysbe](https://github.com/iwillalwaysbe)
1000th stargazers | [elvin-du](https://github.com/elvin-du)
2000th stargazers | [tobiasgoecke](https://github.com/tobiasgoecke)
3000th stargazers | [WellerQu](https://github.com/WellerQu)
| Achievements | Account |
| ----------------- | ------------------------------------------------- |
| First stargazers | [monkeydterry](https://github.com/monkeydterry) |
| 100th stargazers | [iwillalwaysbe](https://github.com/iwillalwaysbe) |
| 1000th stargazers | [elvin-du](https://github.com/elvin-du) |
| 2000th stargazers | [tobiasgoecke](https://github.com/tobiasgoecke) |
| 3000th stargazers | [WellerQu](https://github.com/WellerQu) |
<!-- SpaceVim Achievements end -->

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!
![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.

View File

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

View File

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

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.
To change the colorscheme:
```vim
let g:spacevim_colorscheme = 'onedark'
```

View File

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

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

View File

@ -7,10 +7,10 @@ description: "This layer is for JaveScript development"
<!-- vim-markdown-toc GFM -->
- [Description](#description)
- [Layer Installation](#layer-installation)
- [Features](#features)
- [Layer configuration](#layer-configuration)
* [Description](#description)
* [Layer Installation](#layer-installation)
* [Features](#features)
* [Layer configuration](#layer-configuration)
<!-- vim-markdown-toc -->
@ -31,6 +31,7 @@ To use this configuration layer, add `call SpaceVim#layers#load('lang#javascript
## 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:
```vim

View File

@ -1,16 +1,17 @@
---
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
<!-- vim-markdown-toc GFM -->
* [Description](#description)
* [Layer Installation](#layer-installation)
* [formatting](#formatting)
* [options](#options)
* [Key bindings](#key-bindings)
- [Description](#description)
- [Layer Installation](#layer-installation)
- [formatting](#formatting)
- [options](#options)
- [Key bindings](#key-bindings)
<!-- vim-markdown-toc -->

View File

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

View File

@ -1,12 +1,14 @@
---
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
<!-- vim-markdown-toc GFM -->
* [Description](#description)
* [Features](#features)
- [Description](#description)
- [Features](#features)
<!-- vim-markdown-toc -->

View File

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

View File

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

View File

@ -1,5 +1,6 @@
---
title: "Sponsors"
description: "the companies or individuals contributing a monthly amount to help sustain SpaceVim's development."
---
![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:
<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
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.
Date | Description
-------------- | ----------------------
2017-2-23 | user from wechat contributed ¥40 to SpaceVim
2017-2-14 | user from wechat contributed ¥100 to SpaceVim
| Date | Description |
| --------- | --------------------------------------------- |
| 2017-2-23 | user from wechat contributed ¥40 to SpaceVim |
| 2017-2-14 | user from wechat contributed ¥100 to SpaceVim |

View File

@ -1,8 +1,8 @@
if exists("b:current_syntax")
finish
finish
endif
let b:current_syntax = "SpaceVimFlyGrep"
syntax case ignore
syn match FileName /[^:]*:\d\+:/
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.has(['a', 'c'], 'a'), 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]