@ -0,0 +1,135 @@ | |||||
" Use tab for trigger completion with characters ahead and navigate. | |||||
" NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by | |||||
" other plugin before putting this into your config. | |||||
inoremap <silent><expr> <TAB> | |||||
\ pumvisible() ? "\<C-n>" : | |||||
\ <SID>check_back_space() ? "\<TAB>" : | |||||
\ coc#refresh() | |||||
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>" | |||||
function! s:check_back_space() abort | |||||
let col = col('.') - 1 | |||||
return !col || getline('.')[col - 1] =~# '\s' | |||||
endfunction | |||||
" Use <c-space> to trigger completion. | |||||
if has('nvim') | |||||
inoremap <silent><expr> <c-space> coc#refresh() | |||||
else | |||||
inoremap <silent><expr> <c-@> coc#refresh() | |||||
endif | |||||
" Make <CR> auto-select the first completion item and notify coc.nvim to | |||||
" format on enter, <cr> could be remapped by other vim plugin | |||||
inoremap <silent><expr> <cr> pumvisible() ? coc#_select_confirm() | |||||
\: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>" | |||||
" Use `[g` and `]g` to navigate diagnostics | |||||
" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list. | |||||
nmap <silent> [g <Plug>(coc-diagnostic-prev) | |||||
nmap <silent> ]g <Plug>(coc-diagnostic-next) | |||||
" GoTo code navigation. | |||||
nmap <silent> gd <Plug>(coc-definition) | |||||
nmap <silent> gy <Plug>(coc-type-definition) | |||||
nmap <silent> gi <Plug>(coc-implementation) | |||||
nmap <silent> gr <Plug>(coc-references) | |||||
" Use K to show documentation in preview window. | |||||
nnoremap <silent> K :call <SID>show_documentation()<CR> | |||||
function! s:show_documentation() | |||||
if (index(['vim','help'], &filetype) >= 0) | |||||
execute 'h '.expand('<cword>') | |||||
elseif (coc#rpc#ready()) | |||||
call CocActionAsync('doHover') | |||||
else | |||||
execute '!' . &keywordprg . " " . expand('<cword>') | |||||
endif | |||||
endfunction | |||||
" Highlight the symbol and its references when holding the cursor. | |||||
autocmd CursorHold * silent call CocActionAsync('highlight') | |||||
" Symbol renaming. | |||||
nmap <leader>rn <Plug>(coc-rename) | |||||
" Formatting selected code. | |||||
xmap <leader>f <Plug>(coc-format-selected) | |||||
nmap <leader>f <Plug>(coc-format-selected) | |||||
augroup mygroup | |||||
autocmd! | |||||
" Setup formatexpr specified filetype(s). | |||||
autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') | |||||
" Update signature help on jump placeholder. | |||||
autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') | |||||
augroup end | |||||
" Applying codeAction to the selected region. | |||||
" Example: `<leader>aap` for current paragraph | |||||
xmap <leader>a <Plug>(coc-codeaction-selected) | |||||
nmap <leader>a <Plug>(coc-codeaction-selected) | |||||
" Remap keys for applying codeAction to the current buffer. | |||||
nmap <leader>ac <Plug>(coc-codeaction) | |||||
" Apply AutoFix to problem on the current line. | |||||
nmap <leader>qf <Plug>(coc-fix-current) | |||||
" Map function and class text objects | |||||
" NOTE: Requires 'textDocument.documentSymbol' support from the language server. | |||||
xmap if <Plug>(coc-funcobj-i) | |||||
omap if <Plug>(coc-funcobj-i) | |||||
xmap af <Plug>(coc-funcobj-a) | |||||
omap af <Plug>(coc-funcobj-a) | |||||
xmap ic <Plug>(coc-classobj-i) | |||||
omap ic <Plug>(coc-classobj-i) | |||||
xmap ac <Plug>(coc-classobj-a) | |||||
omap ac <Plug>(coc-classobj-a) | |||||
" Remap <C-f> and <C-b> for scroll float windows/popups. | |||||
if has('nvim-0.4.0') || has('patch-8.2.0750') | |||||
nnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>" | |||||
nnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>" | |||||
inoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>" | |||||
inoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>" | |||||
vnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>" | |||||
vnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>" | |||||
endif | |||||
" Use CTRL-S for selections ranges. | |||||
" Requires 'textDocument/selectionRange' support of language server. | |||||
nmap <silent> <C-s> <Plug>(coc-range-select) | |||||
xmap <silent> <C-s> <Plug>(coc-range-select) | |||||
" Add `:Format` command to format current buffer. | |||||
command! -nargs=0 Format :call CocAction('format') | |||||
" Add `:Fold` command to fold current buffer. | |||||
command! -nargs=? Fold :call CocAction('fold', <f-args>) | |||||
" Add `:OR` command for organize imports of the current buffer. | |||||
command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport') | |||||
" Add (Neo)Vim's native statusline support. | |||||
" NOTE: Please see `:h coc-status` for integrations with external plugins that | |||||
" provide custom statusline: lightline.vim, vim-airline. | |||||
set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')} | |||||
" Mappings for CoCList | |||||
" Show all diagnostics. | |||||
nnoremap <silent><nowait> <space>a :<C-u>CocList diagnostics<cr> | |||||
" Manage extensions. | |||||
nnoremap <silent><nowait> <space>e :<C-u>CocList extensions<cr> | |||||
" Show commands. | |||||
nnoremap <silent><nowait> <space>c :<C-u>CocList commands<cr> | |||||
" Find symbol of current document. | |||||
nnoremap <silent><nowait> <space>o :<C-u>CocList outline<cr> | |||||
" Search workspace symbols. | |||||
nnoremap <silent><nowait> <space>s :<C-u>CocList -I symbols<cr> | |||||
" Do default action for next item. | |||||
nnoremap <silent><nowait> <space>j :<C-u>CocNext<CR> | |||||
" Do default action for previous item. | |||||
nnoremap <silent><nowait> <space>k :<C-u>CocPrev<CR> | |||||
" Resume latest coc list. | |||||
nnoremap <silent><nowait> <space>p :<C-u>CocListResume<CR> |
@ -0,0 +1,32 @@ | |||||
set showtabline=2 | |||||
let g:lightline#bufferline#show_number = 2 | |||||
let g:lightline#bufferline#shorten_path = 0 | |||||
let g:lightline#bufferline#unnamed = '[No Name]' | |||||
let g:lightline#bufferline#enable_nerdfont = 1 | |||||
let g:lightline#bufferline#modified = ' *' | |||||
let g:lightline#bufferline#read_only = ' ' | |||||
" Movement bindings | |||||
nmap <Leader>1 <Plug>lightline#bufferline#go(1) | |||||
nmap <Leader>2 <Plug>lightline#bufferline#go(2) | |||||
nmap <Leader>3 <Plug>lightline#bufferline#go(3) | |||||
nmap <Leader>4 <Plug>lightline#bufferline#go(4) | |||||
nmap <Leader>5 <Plug>lightline#bufferline#go(5) | |||||
nmap <Leader>6 <Plug>lightline#bufferline#go(6) | |||||
nmap <Leader>7 <Plug>lightline#bufferline#go(7) | |||||
nmap <Leader>8 <Plug>lightline#bufferline#go(8) | |||||
nmap <Leader>9 <Plug>lightline#bufferline#go(9) | |||||
nmap <Leader>0 <Plug>lightline#bufferline#go(10) | |||||
" Deletion Bindings | |||||
nmap <Leader>c1 <Plug>lightline#bufferline#delete(1) | |||||
nmap <Leader>c2 <Plug>lightline#bufferline#delete(2) | |||||
nmap <Leader>c3 <Plug>lightline#bufferline#delete(3) | |||||
nmap <Leader>c4 <Plug>lightline#bufferline#delete(4) | |||||
nmap <Leader>c5 <Plug>lightline#bufferline#delete(5) | |||||
nmap <Leader>c6 <Plug>lightline#bufferline#delete(6) | |||||
nmap <Leader>c7 <Plug>lightline#bufferline#delete(7) | |||||
nmap <Leader>c8 <Plug>lightline#bufferline#delete(8) | |||||
nmap <Leader>c9 <Plug>lightline#bufferline#delete(9) | |||||
nmap <Leader>c0 <Plug>lightline#bufferline#delete(10) |
@ -0,0 +1,161 @@ | |||||
let g:lightline = { | |||||
\ 'colorscheme': 'material_vim', | |||||
\ 'active': { | |||||
\ 'left': [ [ 'mode', 'paste' ], [ 'readonly', 'filename', 'modified' ] ], | |||||
\ 'right':[[ 'filetype', 'percent', 'lineinfo' ], [ 'cocstatus' ]] | |||||
\ }, | |||||
\ 'tabline': { | |||||
\ 'left': [['explorer_pad'], ['buffers']], | |||||
\ 'right': [['gitbranch', 'smarttabs']] | |||||
\ }, | |||||
\ 'component_expand': { | |||||
\ 'buffers': 'lightline#bufferline#buffers', | |||||
\ 'smarttabs': 'SmartTabsIndicator', | |||||
\ 'trailing': 'lightline#trailing_whitespace#component' | |||||
\ }, | |||||
\ 'component_function': { | |||||
\ 'explorer_pad': 'lightline#explorer_pad#left_pad', | |||||
\ 'percent': 'LightlinePercent', | |||||
\ 'lineinfo': 'LightlineLineinfo', | |||||
\ 'filename': 'LightlineFilename', | |||||
\ 'fullname': 'LightlineFullname', | |||||
\ 'mode': 'LightlineMode', | |||||
\ 'gitbranch': 'LightlineGitbranch', | |||||
\ 'readonly': 'LightlineReadonly', | |||||
\ 'modified': 'LightlineModified', | |||||
\ 'filetype': 'LightlineFiletype', | |||||
\ 'cocstatus': 'LightlineCoc', | |||||
\ }, | |||||
\ 'component_type': { | |||||
\ 'buffers': 'tabsel', | |||||
\ 'trailing': 'warning' | |||||
\ }, | |||||
\ } | |||||
function! s:trim(maxlen, str) abort | |||||
let trimed = len(a:str) > a:maxlen ? a:str[0:a:maxlen] . '..' : a:str | |||||
return trimed | |||||
endfunction | |||||
function! LightlineCoc() abort | |||||
if winwidth(0) < 60 | |||||
return '' | |||||
endif | |||||
return coc#status() | |||||
endfunction | |||||
function! LightlinePercent() abort | |||||
if winwidth(0) < 60 | |||||
return '' | |||||
endif | |||||
let l:percent = line('.') * 100 / line('$') . '%' | |||||
return printf('%-4s', l:percent) | |||||
endfunction | |||||
function! LightlineLineinfo() abort | |||||
if winwidth(0) < 86 | |||||
return '' | |||||
endif | |||||
let l:current_line = printf('%-3s', line('.')) | |||||
let l:max_line = printf('%-3s', line('$')) | |||||
let l:lineinfo = ' ' . l:current_line . '/' . l:max_line | |||||
return l:lineinfo | |||||
endfunction | |||||
function! LightlineFilename() abort | |||||
let l:prefix = expand('%:p') =~? "fugitive://" ? '(fugitive) ' : '' | |||||
let l:maxlen = winwidth(0) - winwidth(0) / 2 | |||||
let l:relative = expand('%:.') | |||||
let l:tail = expand('%:t') | |||||
let l:noname = 'No Name' | |||||
if winwidth(0) < 50 | |||||
return '' | |||||
endif | |||||
if winwidth(0) < 86 | |||||
return l:tail ==# '' ? l:noname : l:prefix . s:trim(l:maxlen, l:tail) | |||||
endif | |||||
return l:relative ==# '' ? l:noname : l:prefix . s:trim(l:maxlen, l:relative) | |||||
endfunction | |||||
function! LightlineFullname() abort | |||||
let l:relative = expand('%') | |||||
return l:relative | |||||
endfunction | |||||
function! LightlineModified() abort | |||||
return &modified ? '*' : '' | |||||
endfunction | |||||
function! LightlineMode() abort | |||||
let ftmap = { | |||||
\ 'coc-explorer': 'EXPLORER', | |||||
\ 'fugitive': 'FUGITIVE', | |||||
\ 'vista': 'OUTLINE' | |||||
\ } | |||||
return get(ftmap, &filetype, lightline#mode()) | |||||
endfunction | |||||
let g:lightline.component_function = { 'lineinfo': 'LightlineLineinfo' } | |||||
function! LightlineLineinfo() abort | |||||
if winwidth(0) < 86 | |||||
return '' | |||||
endif | |||||
let l:current_line = printf('%-3s', line('.')) | |||||
let l:max_line = printf('%-3s', line('$')) | |||||
let l:lineinfo = ' ' . l:current_line . '/' . l:max_line | |||||
return l:lineinfo | |||||
endfunction | |||||
function! LightlineReadonly() abort | |||||
let ftmap = { | |||||
\ 'coc-explorer': '', | |||||
\ 'fugitive': '', | |||||
\ 'vista': '' | |||||
\ } | |||||
let l:char = get(ftmap, &filetype, '') | |||||
return &readonly ? l:char : '' | |||||
endfunction | |||||
function! LightlineGitbranch() abort | |||||
if exists('*fugitive#head') | |||||
let maxlen = 20 | |||||
let branch = fugitive#head() | |||||
return branch !=# '' ? ' '. s:trim(maxlen, branch) : '' | |||||
endif | |||||
return fugitive#head() | |||||
endfunction | |||||
function! LightlineFiletype() abort | |||||
let l:icon = WebDevIconsGetFileTypeSymbol() | |||||
return winwidth(0) > 86 ? (strlen(&filetype) ? &filetype . ' ' . l:icon : l:icon) : '' | |||||
endfunction | |||||
function! String2() | |||||
return 'BUFFERS' | |||||
endfunction | |||||
function! SmartTabsIndicator() abort | |||||
let tabs = lightline#tab#tabnum(tabpagenr()) | |||||
let tab_total = tabpagenr('$') | |||||
return tabpagenr('$') > 1 ? ('TABS ' . tabs . '/' . tab_total) : '' | |||||
endfunction | |||||
" autoreload | |||||
command! LightlineReload call LightlineReload() | |||||
function! LightlineReload() abort | |||||
call lightline#init() | |||||
call lightline#colorscheme() | |||||
call lightline#update() | |||||
endfunction | |||||
let g:lightline#trailing_whitespace#indicator = '' |
@ -1,3 +0,0 @@ | |||||
let g:lightline#bufferline#show_number = 1 | |||||
let g:lightline#bufferline#shorten_path = 0 | |||||
let g:lightline#bufferline#unnamed = '[No Name]' |
@ -1,16 +0,0 @@ | |||||
let g:lightline = { | |||||
\ 'colorscheme': 'material_vim', | |||||
\ 'active': { | |||||
\ 'left': [ [ 'mode', 'paste' ], [ 'readonly', 'filename', 'modified' ] ] | |||||
\ }, | |||||
\ 'tabline': { | |||||
\ 'left': [ ['buffers'] ], | |||||
\ 'right': [ ['close'] ] | |||||
\ }, | |||||
\ 'component_expand': { | |||||
\ 'buffers': 'lightline#bufferline#buffers' | |||||
\ }, | |||||
\ 'component_type': { | |||||
\ 'buffers': 'tabsel' | |||||
\ } | |||||
\ } |