From ae74fb6317a07ef312fe760309d901a66b167335 Mon Sep 17 00:00:00 2001 From: ray Date: Fri, 13 Sep 2019 15:27:38 +0100 Subject: [PATCH] update --- coc-settings.json | 5 +- init.plugins.vim | 321 ++++++++++++++++++++++++++++++++++++++++++++ init.statusline.vim | 303 +++++++++++++++++++++++++++++++++++++++++ init.tabline.vim | 80 +++++++++++ init.vim | 40 +++++- 5 files changed, 743 insertions(+), 6 deletions(-) create mode 100644 init.plugins.vim create mode 100644 init.statusline.vim create mode 100644 init.tabline.vim diff --git a/coc-settings.json b/coc-settings.json index 2eb1467..7e9376f 100644 --- a/coc-settings.json +++ b/coc-settings.json @@ -23,12 +23,11 @@ "python.formatting.blackPath": "/home/ray/.local/bin/black", "coc.preferences.formatOnSaveFiletypes": ["python", "scss", "css", "vue"], - "coc.preferences.triggerSignatureHelp": true, - "javascript.suggestionActions.enabled": false, "eslint.enable": true, "eslint.autoFixOnSave": true, "eslint.filetypes": [ "javascript", "vue" - ] + ], + "prettier.eslintIntegration": true } diff --git a/init.plugins.vim b/init.plugins.vim new file mode 100644 index 0000000..748bbf8 --- /dev/null +++ b/init.plugins.vim @@ -0,0 +1,321 @@ +" #vim-hexokinase {{{ + " https://github.com/RRethy/vim-hexokinase + Plug 'RRethy/vim-hexokinase' + let g:Hexokinase_highlighters = ['virtual'] + let g:Hexokinase_virtualText = '██████' + nnoremap cc :HexokinaseToggle + nnoremap cr :HexokinaseRefresh + + "}}} + +" #ALE {{{ + " https://github.com/w0rp/ale + + Plug 'w0rp/ale' + " let g:ale_completion_enabled = 1 + + let g:ale_disable_lsp = 1 + let g:ale_sign_column_always = 1 + let g:ale_open_list = 0 + let g:ale_fix_on_save = 1 + let g:ale_fix_on_save_ignore = { 'vue': ['eslint'] } + + let g:ale_linters = {'scss': [], 'javascript': [], 'json': [], 'php':['php'], 'python': [], 'html':['htmlhint'], 'vue': []} + let g:ale_fixers = {'scss': ['prettier'], 'javascript': [], 'json': ['jq'], 'python': [], 'vue': []} + + let g:ale_html_htmlhint_options = '-c ~/.htmlhintrc --format=unix' + + let g:ale_python_pyls_config = { +\ 'pyls': { +\ 'pycodestyle': { 'enabled': v:false }, +\ 'configurationSources': ['flake8'] +\ } +\ } + + let g:ale_sign_error = 'Α' + let g:ale_sign_warning = 'α' + + nmap gh (ale_hover) + nmap aa (ale_detail) + nmap af (ale_fix) + nmap ar (ale_find_references) + nmap ad (ale_go_to_definition) + nmap aD (ale_documentation) + nmap an (ale_next) + nmap ap (ale_previous) + + "}}} +" #coc.nvim{{{ + " https://github.com/neoclide/coc.nvim + + " SEE BOTTOM OF VIMRC FOR coc#add_extension statement + " for some reason fails when added some other places + + Plug 'neoclide/coc.nvim', {'tag': '*', 'do': { -> coc#util#install()}} + + let g:coc_snippet_next = '' + let g:coc_snippet_prev = '' + + inoremap coc#refresh() + nnoremap gH :call CocAction('doHover') + nnoremap cf :call CocAction('doQuickfix') + nnoremap cd :call CocAction('jumpDefinition') + nnoremap ci :call CocAction('jumpImplementation') + nnoremap cr :call CocAction('jumpReferences') + nnoremap cm :call CocAction('rename') + nnoremap ca :call CocAction('codeAction') + nnoremap cs :call CocAction('documentSymbols') + nnoremap cS :call CocAction('workspaceSymbols') + nnoremap cn :call CocAction('diagnosticNext') + nnoremap cp :call CocAction('diagnosticPrevious') + " vnoremap \f (coc-format-selected) + " nnoremap \f (coc-format-selected) + command! -nargs=0 Format :call CocAction('format') + command! -nargs=? Fold :call CocAction('fold', ) + + +" }}} +" #delimitMate{{{ +" https://github.com/Raimondi/delimitMate + Plug 'Raimondi/delimitMate' + let delimitMate_expand_cr = 1 + let delimitMate_expand_space = 1 + "}}} +" #echodoc.vim{{{ +" https://github.com/Shougo/echodoc.vim + Plug 'Shougo/echodoc.vim' + "}}} +" #emmet-vim {{{ + " https://github.com/mattn/emmet-vim + Plug 'mattn/emmet-vim' + let g:user_emmet_leader_key=',,' + let g:user_emmet_settings = { + \ 'indentation': ' ', + \} + + "}}} +" #vim-fugitive{{{ + " https://github.com/tpope/vim-fugitive/blob/master/README.markdown + Plug 'tpope/vim-fugitive' + nnoremap gs :Gstatus + nnoremap gd :tabedit %:Gdiff + nnoremap gc :Gcommit + nnoremap gl :Glog + nnoremap gp :Gpush:copen + nnoremap gp :Gpushjob:copen + + "}}} +" #gitgutter {{{ + " https://github.com/airblade/vim-gitgutter/blob/master/README.mkd + Plug 'airblade/vim-gitgutter' + + nmap ]h GitGutterNextHunk + nmap [h GitGutterPrevHunk + omap ih GitGutterTextObjectInnerPending + omap ah GitGutterTextObjectOuterPending + xmap ih GitGutterTextObjectInnerVisual + xmap ah GitGutterTextObjectOuterVisual + + "}}} +" #MatchTagAlways{{{ + " https://github.com/Valloric/MatchTagAlways + Plug 'Valloric/MatchTagAlways' +let g:mta_filetypes = { + \ 'jinja' : 1, + \ 'html' : 1, + \ 'vue' : 1, + \ 'xhtml' : 1, + \ 'xml' : 1, + \} + "}}} +" #phpcomplete.vim{{{ + " https://github.com/shawncplus/phpcomplete.vim + Plug 'shawncplus/phpcomplete.vim' + " https://github.com/dsawardekar/wordpress.vim + " For up to date Wordpress Files see: + " https://github.com/joseluis/wordpress.vim-generator + + "}}} +" #quickscope{{{ + " https://github.com/unblevable/quick-scope + Plug 'unblevable/quick-scope' + let g:qs_highlight_on_keys = ['f', 'F', 't', 'T'] + "}}} +" #rainbow{{{ + " https://github.com/luochen1990/rainbow/blob/master/README.md + Plug 'luochen1990/rainbow' + let g:rainbow_active = 0 + nnoremap 9 :RainbowToggle + nnoremap ( :RainbowToggle + "}}} +" #switch {{{ + "https://github.com/AndrewRadev/switch.vim + Plug 'AndrewRadev/switch.vim' + + let g:switch_mapping = '-' + let g:switch_custom_definitions = [ + \ ['0', '1'], + \ ['ease-in', 'ease-out', 'ease-in-out', 'linear'], + \ ['auto', 'none'], + \ ['left', 'right'], + \ ['top', 'bottom'], + \ ['row', 'column'], + \ ['relative', 'absolute', 'fixed'], + \ ['private', 'public', 'protected'] + \ ] + + "}}} +" #tagbar {{{ + " Plug 'majutsushi/tagbar' + " + " nnoremap tb :TagbarOpen fj + " nnoremap ] :tag /[.#@]=expand('') + " let g:tagbar_autoclose = 1 + " " let g:tagbar_autopreview = 1 + " " let g:tagbar_previewwin_pos = '' + " + " let g:tagbar_type_css = { + " \ 'ctagstype' : 'css', + " \ 'kinds' : [ + " \ 'c:classes', + " \ 'i:ids', + " \ 't:tags', + " \ 'm:medias' + " \ ] + " \} + " + " let g:tagbar_type_scss = { + " \ 'ctagstype' : 'scss', + " \ 'kinds' : [ + " \ 'v:variables', + " \ 'c:classes', + " \ 'i:ids', + " \ 't:tags', + " \ 'd:medias', + " \ 'm:mixins', + " \ 'f:functions' + " \ ] + " \} + " + " let g:tagbar_type_vue = { + " \ 'ctagstype' : 'vue', + " \ 'kinds' : [ + " \ 'o:objects', + " \ 'f:functions', + " \ 'a:array', + " \ 's:string', + " \ 'b:boolean', + " \ 'n:number', + " \ 'v:variable' + " \ ] + " \ } + + "}}} +" #ultisnips {{{ + " https://github.com/sirver/UltiSnips + Plug 'SirVer/ultisnips' + " and some snippets + " https://github.com/honza/vim-snippets + " Plug 'honza/vim-snippets' + + nnoremap ul :call ListUltisnips() + inoremap jkul :call ListUltisnips() + + let g:UltiSnipsSnippetsDir='~/.vim/UltiSnips' + " Trigger configuration. Do not use if you use https://github.com/Valloric/YouCompleteMe. + let g:UltiSnipsExpandTrigger='' + let g:UltiSnipsJumpForwardTrigger='' + let g:UltiSnipsJumpBackwardTrigger='' + let g:UltiSnipsEditSplit='horizontal' + + function! ListUltisnips() abort"{{{ + let l:snips = UltiSnips#SnippetsInCurrentScope(1) + let l:keylist = sort(keys(l:snips)) + echo ' --------------------------------------------------' + for l:key in l:keylist + echo printf(" %-10s\t%s", l:key, l:snips[l:key]) + endfor + echo '---------------------------------------------------' + endfunction + + "}}} + function! CompleteSnippets(findstart, base)"{{{ + if a:findstart + let l:line = getline('.') + let l:start = col('.') - 1 + while l:start > 0 && l:line[l:start - 1] =~ '\a' + let l:start -= 1 + endwhile + return l:start + else + let l:res = [] + let l:snips = UltiSnips#SnippetsInCurrentScope(1) + let l:keylist = sort(keys(l:snips)) + for l:key in l:keylist + if l:key =~ '^' . a:base + let l:item = {'word': l:key, 'menu': l:snips[l:key]} + call add(l:res, l:item) + endif + endfor + return l:res + endif + endfunction + + "}}} + + set completefunc=CompleteSnippets + + "}}} +" #vim-dispatch{{{ + " https://github.com/tpope/vim-dispatch + Plug 'tpope/vim-dispatch' + + "}}} +" #vim-easy-align {{{ + " https://github.com/junegunn/vim-easy-align + Plug 'junegunn/vim-easy-align' + + xmap ga (EasyAlign) + nmap ga (EasyAlign) + + "}}} +" #vim-gutentags {{{ + " https://github.com/ludovicchabant/vim-gutentags + Plug 'ludovicchabant/vim-gutentags' + + let g:gutentags_ctags_tagfile = '.tags' + let g:gutentags_ctags_exclude = ['package.json', 'Session.vim', 'package-lock.json', 'TODO.txt'] + let g:gutentags_resolve_symlinks = 1 + + "}}} +" #vim-Jinja2-Syntax{{{ +" https://github.com/studio-vx/Vim-Jinja2-Syntax +" original: https://github.com/Glench/Vim-Jinja2-Syntax + Plug 'studio-vx/Vim-Jinja2-Syntax' + + "}}} +" #vim-SyntaxRange{{{ +" https://github.com/inkarkat/vim-SyntaxRange + " Plug 'inkarkat/vim-SyntaxRange' + " command! HiJinja call SyntaxRange#Include('{{', '}}', 'jinja', 'jinjaBraces', 'jinjaVariable') + " command! HiJinja call SyntaxRange#IncludeEx('start=/{{-\?/hs=s+2 end=/-\?}}/he=s-1', 'jinja') +"}}} +" #wordpress.vim{{{ + " doesn't support universal ctags +" #Plug 'dsawardekar/wordpress.vim' + " This fork does: + " https://github.com/DArcMattr/wordpress.vim/tree/universal-ctags + " Using studio-vx fork + " Plug 'studio-vx/wordpress.vim', { 'branch': 'universal-ctags' } + + "}}} +" #vim-git{{{ + " https://github.com/tpope/vim-git + Plug 'tpope/vim-git' + + "}}} + + + + +" vim: set fdm=marker ft=vim: diff --git a/init.statusline.vim b/init.statusline.vim new file mode 100644 index 0000000..d2c59e0 --- /dev/null +++ b/init.statusline.vim @@ -0,0 +1,303 @@ +function! GetLinterStatus(key) abort "{{{ + + let l:statuscount = 0 + + if exists('b:ale_linted') + let l:linter = ale#statusline#Count(bufnr('')) + else + let l:linter = GetDiagnosticCountsFromSigns(bufnr('')) + endif + + if has_key(l:linter, a:key) + let l:statuscount = l:linter[a:key] + endif + return l:statuscount +endfunction +"}}} + +function! GetStatusFrag(condition, colorname, conditionprefix, text) abort "{{{ +" TODO better name + let l:frag='%#' . a:colorname . '#' + let l:frag.=a:conditionprefix + let l:frag.='%{(' . a:condition . ")?'" . a:text . "':''}" + return l:frag +endfunction +"}}} + +function! GetDiagnosticCountsFromSigns(buffer) abort "{{{ + let l:error = 0 + let l:warn = 0 + let l:info = 0 + let l:hint = 0 + + redir => l:result + silent exec 'sign place buffer=' . a:buffer + redir end + + let l:lines = split(l:result, '\n') + + for l:line in l:lines + if l:line =~? 'Error' + let l:error += 1 + endif + if l:line =~? 'Warning' + let l:warn += 1 + endif + if l:line =~? 'Info' + let l:info += 1 + endif + if l:line =~? 'Hint' + let l:hint += 1 + endif + endfor + + return {'error': l:error, 'warning': l:warn, 'info': l:info, 'hint': l:hint} + +endfunction + +"}}} + +augroup statusline "{{{ + autocmd! + autocmd WinNew,WinEnter * setlocal statusline=%!GetStatus(1) + autocmd WinLeave * setlocal statusline=%!GetStatus(0) + autocmd Filetype qf setlocal statusline=%!GetStatus(1) + autocmd Filetype help setlocal statusline=%!GetStatus(1) +augroup END +"}}} + +function! GetStatus(isactive) abort "{{{ + " let l:linter = ale#statusline#Count(bufnr('')) + let l:divider = '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - >' + let l:separator = '%#StatusLineSeparator# ' + let l:normal = '%#StatusLineNormal#' + let l:active = '%#StatusLineActive#' + let l:linterdash = '%#LinterDash#·' + let l:linterdashactive = '%#LinterDashActive#·' + let l:statusline = l:separator + + "buffer number {{{ + if a:isactive + let l:statusline .= '%#StatusLineBufferNrActive#' + else + let l:statusline .= '%#StatusLineBufferNr#' + endif + let l:statusline .= ' %n ' . l:separator +"}}} + + " file percentage {{{ + if a:isactive + let l:statusline .= '%#StatusLinePercentActive#' + let l:statusline .= ' %P %#StatusLineNoiseActive#of %#StatusLineLinecountActive#%L ' + else + let l:statusline .= '%#StatusLinePercent#' + let l:statusline .= ' %P %#StatusLineNoise#of %#StatusLineLinecount#%L ' + endif"}}} + + " non-empty buftype (help, quickfix, etc) {{{ + if a:isactive + let l:statusline .= l:active . "%{&buftype == '' ? '' : ' '}%q%h%w%#StatusLineActiveNoText#" + else + let l:statusline .= l:normal . "%{&buftype == '' ? '' : ' '}%q%h%w%#StatusLineNormalNoText#" + endif + let l:statusline .= "%{&buftype == '' ? '' : ' '}%s" +"}}} + + " right/left divider {{{ + let l:statusline.=l:separator + " modified version + let l:color = 'StatusLineDivMod' . (a:isactive?'Active':'') + let l:statusline .= GetStatusFrag("&modified && mode() != 'i'", l:color, '%<', l:divider) + + " unmodified version + let l:color = 'StatusLineDiv' . (a:isactive?'Active':'') + let l:statusline .= GetStatusFrag("!&modified && mode() != 'i'", l:color, '%<', l:divider) + + " input mode version + if a:isactive + let l:statusline .= GetStatusFrag("mode() == 'i'", 'StatusLineDivInput', '%<', l:divider) + endif + + let l:statusline.= l:separator . '%*%=' +"}}} + + " file info{{{ + if a:isactive == 1 + " let l:statusline.=l:active + let l:statusline.='%#StatusLineFileInfo#' + " let l:statusline.=" %{strlen(&ft)?&ft:'none'} " + " let l:statusline.=l:separator . l:active + let l:statusline.='%{strlen(&fenc)?&fenc:&enc}' + " let l:statusline.=l:separator . l:active + let l:statusline.=' %{&fileformat}' + let l:statusline.="%{strlen(expand('%:e')) > 1?' ' . expand('%:e'):''}" + " let l:statusline.=l:separator . l:active + " let l:statusline.=' %{&spelllang} ' + let l:statusline .= l:separator + endif +"}}} + + " path/filename.extension {{{ + if a:isactive + if &readonly + let l:statusline .= '%#StatusLineWarningActive# %r ' + let l:statusline .= '%#StatusLineFileReadOnlyActive#' + " let l:statusline.='%#StatusLineDirActive# ' + let l:statusline.="%{expand('%:p:h:t')}/" + " let l:statusline.='%#StatusLineFileActive#' + + let l:statusline.="%{expand('%:t:r')}" + + " let l:statusline.='%#StatusLineDotActive#' + let l:statusline.="%{strlen(expand('%:e'))?'.':''}" + " let l:statusline.='%#StatusLineExtActive#' + let l:statusline.="%{expand('%:e')} " + else + let l:statusline.='%#StatusLineDirActive# ' + let l:statusline.="%{expand('%:p:h:t')}/" + let l:statusline.='%#StatusLineFileActive#' + + let l:statusline.="%{expand('%:t:r')}" + + let l:statusline.='%#StatusLineDotActive#' + let l:statusline.="%{strlen(expand('%:e'))?'.':''}" + let l:statusline.='%#StatusLineExtActive#' + let l:statusline.="%{expand('%:e')} " + endif + else + let l:statusline .= ' %#StatusLineWarning#%r' + let l:statusline.='%#StatusLineDir# ' + let l:statusline.="%{fnamemodify(expand('%:p:h'),':~')}/" + let l:statusline.='%#StatusLineFile#' + + let l:statusline.="%{expand('%:t:r')}" + + let l:statusline.='%#StatusLineDot#' + let l:statusline.="%{strlen(expand('%:e'))?'.':''}" + let l:statusline.='%#StatusLineExt#' + let l:statusline.="%{strlen(expand('%:e'))?expand('%:e'):expand('%:e')} " + endif + "}}} + + let l:statusline.='%*' . l:separator + + " linter status {{{ + if a:isactive + " errors + let l:statusline .= "%#LinterDashActive#%{(GetLinterStatus('error') == 0?'-':'')}" + let l:statusline .= "%#LinterErrorActive#%{(GetLinterStatus('error') == 0?'':GetLinterStatus('error'))}" + " style errors + let l:statusline .= l:linterdashactive + let l:statusline .= "%#LinterDashActive#%{(GetLinterStatus('style_error') == 0?'-':'')}" + let l:statusline .= "%#LinterErrorStyleActive#%{(GetLinterStatus('style_error') == 0?'':GetLinterStatus('style_error'))} " + + " warnings + let l:statusline .= "%#LinterDashActive#%{(GetLinterStatus('warning') == 0?'-':'')}" + let l:statusline .= "%#LinterWarningActive#%{(GetLinterStatus('warning') == 0?'':GetLinterStatus('warning'))}" + " style warnings + let l:statusline .= l:linterdashactive + let l:statusline .= "%#LinterDashActive#%{(GetLinterStatus('style_warning') == 0?'-':'')}" + let l:statusline .= "%#LinterWarningStyleActive#%{(GetLinterStatus('style_warning') == 0?'':GetLinterStatus('style_warning'))} " + + " info + let l:statusline .= "%#LinterDashActive#%{(GetLinterStatus('info') == 0?'-':'')}" + let l:statusline .= "%#LinterInfoActive#%{(GetLinterStatus('info') == 0?'':GetLinterStatus('info'))}" + else + " errors + let l:statusline .= "%#LinterDash#%{(GetLinterStatus('error') == 0?'-':'')}" + let l:statusline .= "%#LinterError#%{(GetLinterStatus('error') == 0?'':GetLinterStatus('error'))}" + " style errors + let l:statusline .= l:linterdash + let l:statusline .= "%{(GetLinterStatus('style_error') == 0?'-':'')}" + let l:statusline .= "%#LinterErrorStyle#%{(GetLinterStatus('style_error') == 0?'':GetLinterStatus('style_error'))} " + + " warnings + let l:statusline .= "%#LinterDash#%{(GetLinterStatus('warning') == 0?'-':'')}" + let l:statusline .= "%#LinterWarning#%{(GetLinterStatus('warning') == 0?'':GetLinterStatus('warning'))}" + " style warnings + let l:statusline .= l:linterdash + let l:statusline .= "%{(GetLinterStatus('style_warning') == 0?'-':'')}" + let l:statusline .= "%#LinterWarningStyle#%{(GetLinterStatus('style_warning') == 0?'':GetLinterStatus('style_warning'))} " + + " info + let l:statusline .= "%#LinterInfo#%{GetLinterStatus('info') == 0 ? '-' : GetLinterStatus('info')}" + endif +"}}} + + let l:statusline .= ' ' . l:separator + + if exists('gutentags#statusline') + let l:statusline .= '%#StatusLineWarning#%{gutentags#statusline("", "", "☢")}' + endif + + return l:statusline + +endfunction +"}}} + +" highlight groups {{{ +hi def link StatusLineSeparator Ignore +hi def link StatusLineNormal StatusLineNC +hi def link StatusLineActive StatusLine +hi def link StatusLineNormalNoText TabLineFill +hi def link StatusLineActiveNoText TabLineFill + +hi def link StatusLineNoise StatusLineNormal +hi def link StatusLineNoiseActive StatusLineNormal + +hi def link StatusLineBufferNr StatusLineNormal +hi def link StatusLineBufferNrActive StatusLineActive + +hi def link StatusLinePercent StatusLineNormal +hi def link StatusLinePercentActive StatusLineActive +hi def link StatusLineLinecount StatusLinePercent +hi def link StatusLineLinecountActive StatusLinePercentActive + +hi DivActive ctermbg=darkgray ctermfg=darkgray guibg=#666666 guifg=#666666 +hi DivMod ctermbg=darkred ctermfg=darkred guibg=#660000 guifg=#660000 +hi DivModActive ctermbg=red ctermfg=red guibg=#aa0000 guifg=#aa0000 +hi DivInput ctermbg=darkblue ctermfg=darkblue guibg=#000022 guifg=#000022 +hi def link StatusLineDiv TabLineFill +hi def link StatusLineDivActive DivActive +hi def link StatusLineDivMod DivMod +hi def link StatusLineDivModActive DivModActive +hi def link StatusLineDivInput DivInput + +hi def link StatusLineFileInfo StatusLineActive + +hi def link StatusLineFile StatusLineNormal +hi def link StatusLineFileActive StatusLineActive +hi def link StatusLineDir StatusLineFile +hi def link StatusLineDirActive StatusLineFileActive +hi def link StatusLineDot StatusLineDir +hi def link StatusLineDotActive StatusLineDirActive +hi def link StatusLineExt StatusLineDir +hi def link StatusLineExtActive StatusLineDirActive + +hi def link StatusLineFileReadOnlyActive WarningMsg +hi def link StatusLineWarning StatusLineNormal +hi def link StatusLineWarningActive WarningMsg + +hi def link LinterDash Normal +hi def link LinterDashActive Normal + +hi def link LinterError Normal +hi def link LinterErrorActive ErrorMsg + +hi def link LinterErrorStyle Normal +hi def link LinterErrorStyleActive SpellBad + +hi def link LinterWarning Normal +hi def link LinterWarningActive SpellCap + +hi def link LinterWarningStyle Normal +hi def link LinterWarningStyleActive LinterWarningActive + +hi def link LinterInfo Normal +hi def link LinterInfoActive SpellRare +"}}} + +set statusline=%!GetStatus(1) + + +" vim: set foldmethod=marker: diff --git a/init.tabline.vim b/init.tabline.vim new file mode 100644 index 0000000..a29d323 --- /dev/null +++ b/init.tabline.vim @@ -0,0 +1,80 @@ +" Rename tabs to show tab number. +" based on: +" http://stackoverflow.com/questions/5927952/whats-implementation-of-vims-default-tabline-function + +function! MyTabLine() "{{{ + let l:customtabline = '' + let l:currenttabnum = tabpagenr() + let l:lasttabnumber = tabpagenr('$') + let l:tabnumber = 1 + while l:tabnumber <= l:lasttabnumber + let l:buflist = tabpagebuflist(l:tabnumber) + let l:winnr = tabpagewinnr(l:tabnumber) + + if l:lasttabnumber > 1 + let l:customtabline .= '%' . l:tabnumber . 'T' + let l:customtabline .= (l:tabnumber == l:currenttabnum ? '%1*' : '%2*') + + let l:customtabline .= (l:tabnumber == l:currenttabnum ? '%#TabLineNumSel#' : '%#TabLineNum#') + let l:customtabline .= ' ' . l:tabnumber . ' ' + let l:customtabline .= (l:tabnumber == l:currenttabnum ? '%#TabLineItemSel#' : '%#TabLineItem#') + endif + + let l:bufnr = l:buflist[l:winnr - 1] + let l:file = bufname(l:bufnr) + let l:buftype = getbufvar(l:bufnr, '&buftype') + + if l:buftype ==# 'help' + let l:file = 'help:' . fnamemodify(l:file, ':t:r') + + elseif l:buftype ==# 'quickfix' + let l:file = 'quickfix' + + elseif l:buftype ==# 'nofile' + if l:file =~# '\/.' + let l:file = substitute(l:file, '.*\/\ze.', '', '') + endif + + else + let l:file = fnamemodify(l:file, ':p:t') + + endif + + if l:file ==# '' + let l:file = "''" + endif + + let l:customtabline .= l:file . ' ' + + let l:tabnumber = l:tabnumber + 1 + + endwhile + + let l:customtabline .= '%T%#TabLineFill#%=' + + if exists('*gutentags#statusline') + let l:customtabline .= '%#TabLineItemSel# %{gutentags#statusline("[ ", " ☢ ] ")}' + endif + let l:customtabline .= '%#TabLineItem# %{getcwd()}% ' + if exists('*fugitive#statusline') + let l:customtabline .= '%#TabLineItem# %{fugitive#statusline()}% ' + endif + if exists('*ObsessionStatus') + let l:customtabline .= "%#TabLineItemSel# %{ObsessionStatus(fnamemodify(v:this_session,':t'),'---')} %*" + endif + + return l:customtabline + +endfunction +"}}} + +hi def link TabLineItem TabLine +hi def link TabLineItemSel TabLineSel +hi def link TabLineNum TabLine +hi def link TabLineNumSel TabLineSel + +set tabline=%!MyTabLine() +set showtabline=2 + + +" vim: set foldmethod=marker: diff --git a/init.vim b/init.vim index 1a70129..dcedd6d 100644 --- a/init.vim +++ b/init.vim @@ -8,8 +8,42 @@ source ~/.config/vim/vimrc " problems if I ever use ruby virtual environments or RVM or similar. let g:ruby_host_prog = '~/.gem/ruby/2.6.0/bin/neovim-ruby-host' -set showtabline=2 -source ~/.config/vim/config/tabline.vim -source ~/.config/vim/config/statusline.vim +" TODO - try 'coc-tsserver' + call coc#add_extension( 'coc-vetur', 'coc-python', 'coc-phpls', 'coc-json', 'coc-css', 'coc-prettier', 'coc-eslint', 'coc-vimlsp') + +" source ~/.config/nvim/init.statusline.vim +source ~/.config/nvim/init.tabline.vim + +set statusline+=\ nvim\ + +" set foldtext=foldtext() +set fillchars=stl:\ ,stlnc:\ ,vert:┃,fold:\ + +"auto_window_settings {{{ +function! WinEnterColorColumn() abort"{{{ + if &buftype != '' + setlocal colorcolumn=0 + elseif exists('b:colorcolumn_restore') + execute 'setlocal colorcolumn=' . b:colorcolumn_restore + endif +endfunction + +"}}} +function! WinLeaveColorColumn() abort"{{{ + let b:colorcolumn_restore = &colorcolumn + setlocal colorcolumn=0 +endfunction + +"}}} +augroup auto_window_settings "{{{ + autocmd! + autocmd WinEnter * call WinEnterColorColumn() + autocmd WinEnter * set cursorline | set cursorcolumn + " autocmd WinLeave * setlocal colorcolumn=0 + autocmd WinLeave * call WinLeaveColorColumn() + autocmd WinLeave * set nocursorline | set nocursorcolumn +augroup END +"}}} augroup auto_window_settings +" }}} auto_window_settings " vim: set foldmethod=marker: