diff --git a/.gitignore b/.gitignore index 1e10d06..83909e5 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,5 @@ fishd.tmp.* # TODO: should be unnecessary once color generation is homegrown /colors/gen/vendor /colors/gen/tmp + +/tags diff --git a/common/neovim/init.lua b/common/neovim/init.lua index 3f2ab62..049454c 100644 --- a/common/neovim/init.lua +++ b/common/neovim/init.lua @@ -1,193 +1,189 @@ -local execute = vim.api.nvim_command -local kmap = vim.api.nvim_set_keymap -local kmapnore = function(mode, keys, command) - kmap(mode, keys, command, {noremap=true}) -end +vim.g.vimdir = vim.fn.getenv('XDG_CONFIG_HOME')..'/nvim' -- plugin manager -local vimdir = vim.fn.getenv("XDG_CONFIG_HOME")..'/nvim' local packer_install_path = vim.fn.stdpath('data')..'/site/pack/packer/start/packer.nvim' +local execute = vim.api.nvim_command + if vim.fn.empty(vim.fn.glob(packer_install_path)) > 0 then - execute("!git clone https://github.com/wbthomason/packer.nvim "..packer_install_path) + vim.fn.system{'git', 'clone', 'https://github.com/wbthomason/packer.nvim', packer_install_path} + execute'packadd packer.nvim' end vim.api.nvim_exec([[ - augroup Packer - autocmd! - autocmd BufWritePost init.lua PackerCompile - augroup end + augroup Packer + autocmd! + autocmd BufWritePost init.lua PackerCompile + augroup end ]], false) local use = require('packer').use require('packer').startup(function() - use 'wbthomason/packer.nvim' + use 'wbthomason/packer.nvim' use 'editorconfig/editorconfig-vim' use 'tpope/vim-sleuth' use 'vim-scripts/LargeFile' use 'vim-scripts/restore_view.vim' use 'christoomey/vim-tmux-navigator' - use 'tpope/vim-fugitive' - use 'tpope/vim-rhubarb' - use 'tpope/vim-commentary' + use 'tpope/vim-fugitive' + use 'tpope/vim-rhubarb' + use 'tpope/vim-commentary' use 'tpope/vim-repeat' use 'machakann/vim-sandwich' use 'michaeljsmith/vim-indent-object' use 'wellle/targets.vim' use 'bkad/CamelCaseMotion' - use 'ludovicchabant/vim-gutentags' + use 'ludovicchabant/vim-gutentags' use 'tpope/vim-obsession' use 'dhruvasagar/vim-prosession' - use {'nvim-telescope/telescope.nvim', requires = {{'nvim-lua/popup.nvim'}, {'nvim-lua/plenary.nvim'}}} - use 'joshdick/onedark.vim' - use {'lukas-reineke/indent-blankline.nvim', branch="lua"} - use {'lewis6991/gitsigns.nvim', requires = {'nvim-lua/plenary.nvim'}} - use 'neovim/nvim-lspconfig' - use 'hrsh7th/nvim-compe' + use {'nvim-telescope/telescope.nvim', requires={{'nvim-lua/popup.nvim'}, {'nvim-lua/plenary.nvim'}}} + use 'joshdick/onedark.vim' + use {'lukas-reineke/indent-blankline.nvim', branch='lua'} + use {'lewis6991/gitsigns.nvim', requires={'nvim-lua/plenary.nvim'}} + use 'neovim/nvim-lspconfig' + use 'hrsh7th/nvim-compe' use 'sheerun/vim-polyglot' + use {'neoclide/coc.nvim', branch='release'} end) local globals = { - mapleader=" ", - maplocalleader=" ", - completion_enable_auto_popup=0, - indent_guide_auto_colors=1, - indent_guides_enable_on_vim_startup=1, - skipview_files={'COMMIT_EDITMSG'}, - indent_blankline_char="┊", - indent_blankline_filetype_exclude={'help', 'packer'}, - indent_blankline_buftype_exclude={'terminal', 'nofile'}, - indent_blankline_char_highlight='LineNr', + mapleader=' ', + maplocalleader=' ', + completion_enable_auto_popup=0, + skipview_files={'COMMIT_EDITMSG'}, + indent_blankline_char='▏', + indent_blankline_filetype_exclude={'help', 'packer'}, + indent_blankline_buftype_exclude={'terminal', 'nofile'}, + indent_blankline_char_highlight='LineNr', } for k,v in pairs(globals) do - vim.g[k] = v + vim.g[k] = v end local options = { - inccommand="nosplit", - tabstop=2, - softtabstop=2, - smartindent=true, - list=true, - listchars='trail:-,tab: ,trail:~', - linebreak=true, - formatoptions='crql1jn', - synmaxcol=200, - lazyredraw=true, - scrolloff=8, - sidescrolloff=15, - mouse='a', - splitright=true, - splitbelow=true, - errorbells=false, - visualbell=true, - backup=false, - writebackup=false, - swapfile=false, - timeout=true, - timeoutlen=150, - hidden=true, - shortmess='filnxToOFIac', - history=100000, - undofile=true, - undofir=vimdir..'/undo', - undolevels=100000, - undoreload=100000, - spellfile=vimdir..'/spell/en.utf-8.add', - ignorecase=true, - smartcase=true, - incsearch=true, - wrapscan=true, - hlsearch=true, - foldmethod='syntax', - foldlevel=99, - foldnextmax=10, - foldlevelstart=99, - autowrite=false, - autochdir=true, - autoread=true, - modeline=false, - showmode=false, - showcmd=false, - laststatus=2, - ruler=false, - termguicolors=true, + inccommand='nosplit', + tabstop=2, + softtabstop=2, + shiftwidth=2, + smartindent=true, + list=true, + listchars='trail:·,tab: ,trail:~', + linebreak=true, + formatoptions='crql1jn', + synmaxcol=200, + lazyredraw=true, + scrolloff=8, + sidescrolloff=15, + mouse='a', + splitright=true, + splitbelow=true, + errorbells=false, + visualbell=true, + backup=false, + writebackup=false, + swapfile=false, + timeout=true, + timeoutlen=150, + hidden=true, + shortmess='filnxToOFIac', + history=1000, + undofile=true, + undodir=vim.g.vimdir..'/undo', + undolevels=1000, + undoreload=1000, + spellfile=vim.g.vimdir..'/spell/en.utf-8.add', + ignorecase=true, + smartcase=true, + incsearch=true, + wrapscan=true, + hlsearch=true, + foldmethod='syntax', + foldlevel=99, + foldnestmax=10, + foldlevelstart=99, + autowrite=false, + autochdir=true, + autoread=true, + modeline=false, + showmode=false, + showcmd=false, + laststatus=2, + ruler=false, + termguicolors=true, } for k,v in pairs(options) do - vim.o[k] = v + -- print(tostring(k)..tostring(v)) + vim.o[k] = v end -- let &fcs = 'eob: ' vim.cmd[[colorscheme base16-donokai]] --- hi Search cterm=NONE ctermbg=blue ctermfg=black --- hi LineNr ctermbg=none ctermfg=8 --- hi CursorLineNr ctermbg=18 ctermfg=gray --- hi IndentGuidesEven ctermbg=18 --- hi Normal ctermbg=NONE --- hi ColorColumn ctermbg=18 --- hi TooLongColorColumn ctermbg=18 ctermfg=1 --- hi ActiveBuffer ctermbg=4 ctermfg=0 --- hi DirtyBuffer ctermbg=3 ctermfg=0 --- hi StatusLine ctermbg=18 ctermfg=7 --- hi StatusLineNC ctermbg=18 ctermfg=7 +vim.cmd[[ +hi Search cterm=NONE ctermbg=blue ctermfg=black +hi LineNr ctermbg=none ctermfg=8 +hi CursorLineNr ctermbg=18 ctermfg=gray +hi IndentGuidesEven ctermbg=18 +hi Normal ctermbg=NONE +hi ColorColumn ctermbg=18 +hi TooLongColorColumn ctermbg=18 ctermfg=1 +hi ActiveBuffer ctermbg=4 ctermfg=0 +hi DirtyBuffer ctermbg=3 ctermfg=0 +hi StatusLine ctermbg=18 ctermfg=7 +hi StatusLineNC ctermbg=18 ctermfg=7 +]] execute[[call matchadd('ColorColumn', '\\%81v', 100)]] execute[[call matchadd('TooLongColorColumn', '\\%121v', 200)]] vim.cmd[[command! W write]] -local escapes = {'jj', 'jJ', 'Jj', 'JJ', 'jk', 'jK', 'Jk', 'JK'} -for keys in escapes do - kmap('i', keys, '') +function kmap(mode, keys, command, opts) + if opts == nil then opts = {} end + vim.api.nvim_set_keymap(mode, keys, command, opts) end -kmapnore('n', '', ':qa') +function kmapnore(mode, keys, command) + kmap(mode, keys, command, {noremap=true}) +end + +local escapes = {'jj', 'jJ', 'Jj', 'JJ', 'jk', 'jK', 'Jk', 'JK'} +for _,keys in ipairs(escapes) do + kmap('i', keys, '') +end + +kmapnore('n', '', ':qa') kmapnore('n', '', '') -require('telescope').setup{ - defaults={ - mappings={ - i={ - [""]=false, - [""]=false, - }, - }, - generic_sorter=require'telescope.sorters'.get_fzy_sorter, - file_sorter=require'telescope.sorters'.get_fzy_sorter, - } -} +kmapnore('n', '', 'Telescope git_files') +kmapnore('n', '', 'Telescope live_grep') +kmapnore('n', '', 'Telescope buffers') +-- kmapnore('n', '???', 'Telescope help_tags') --- TODO: telescope bindings --- kmapnore('n', '', ':GitFiles') --- nnoremap :Files --- nnoremap :GFiles? --- nnoremap :Buffers +kmapnore('n', '', ':TmuxNavigateLeft') +kmapnore('n', '', ':TmuxNavigateDown') +kmapnore('n', '', ':TmuxNavigateUp') +kmapnore('n', '', ':TmuxNavigateRight') +kmapnore('t', '', ':TmuxNavigateLeft') +kmapnore('t', '', ':TmuxNavigateDown') +kmapnore('t', '', ':TmuxNavigateUp') +kmapnore('t', '', ':TmuxNavigateRight') -kmapnore('n', '', ':TmuxNavigateLeft') -kmapnore('n', '', ':TmuxNavigateDown') -kmapnore('n', '', ':TmuxNavigateUp') -kmapnore('n', '', ':TmuxNavigateRight') -kmapnore('t', '', ':TmuxNavigateLeft') -kmapnore('t', '', ':TmuxNavigateDown') -kmapnore('t', '', ':TmuxNavigateUp') -kmapnore('t', '', ':TmuxNavigateRight') +kmap('', ',w', 'CamelCaseMotion_w', {silent=true}) +kmap('', ',b', 'CamelCaseMotion_b', {silent=true}) +kmap('', ',e', 'CamelCaseMotion_e', {silent=true}) +kmap('', ',ge', 'CamelCaseMotion_ge', {silent=true}) +kmap('o', 'ib', 'CamelCaseMotion_ib', {silent=true}) +kmap('x', 'ib', 'CamelCaseMotion_ib', {silent=true}) +kmap('o', 'ie', 'CamelCaseMotion_ie', {silent=true}) +kmap('x', 'ie', 'CamelCaseMotion_ie', {silent=true}) -kmap('', ' ,w', 'CamelCaseMotion_w') -kmap('', ' ,b', 'CamelCaseMotion_b') -kmap('', ' ,e', 'CamelCaseMotion_e') -kmap('', ' ,ge', 'CamelCaseMotion_ge') -kmap('o', ' ib', 'CamelCaseMotion_ib') -kmap('x', ' ib', 'CamelCaseMotion_ib') -kmap('o', ' ie', 'CamelCaseMotion_ie') -kmap('x', ' ie', 'CamelCaseMotion_ie') - -kmap('', '', 'mw:%s/\\s\\+$//:let @/ = ""\'w') -kmap('', '', ':setlocal spell!') +kmap('', '', 'mw:%s/\\s\\+$//:let @/ = ""\'w') +kmap('', '', ':setlocal spell!') kmapnore('n', ' n', "'Nn'[v:searchforward]") kmapnore('n', ' N', "'nN'[v:searchforward]") kmapnore('c', '', '') @@ -198,101 +194,40 @@ kmapnore('x', '>', '>gv') -- TODO: learn about the wildmenu `q:` kmap('', '', '', {noremap=true, silent=true}) -kmap('n', ' r', ':source '..vimdir..'/init.vim:echo \'Reloaded init.vim\'') -kmap('n', ' gv', ':e '..vimdir..'/init.vim') -kmap('n', ' w', ':bd') -kmap('n', ' h', ':b#') -kmap('n', ' k', ':bnext') -kmap('n', ' j', ':bprevious') -kmap('n', '/', ':let @/ = "":') -kmapnore('n', 't', ':split:term:resize 24:startinsert') -kmapnore('t', '', ':q!') +kmap('n', 'r', ':luafile '..vim.g.vimdir..'/init.lua:echo \'Reloaded init.lua\'', {silent=true}) +kmap('n', 'gv', ':e '..vim.g.vimdir..'/init.lua', {silent=true}) +kmap('n', 'w', ':bd', {silent=true}) +kmap('n', 'h', ':b#', {silent=true}) +kmap('n', 'k', ':bnext', {silent=true}) +kmap('n', 'j', ':bprevious', {silent=true}) +kmap('n', '/', ':let @/ = "":', {silent=true}) +kmapnore('n', 't', ':split:term:resize 24:startinsert', {silent=true}) +kmapnore('t', '', ':q!', {silent=true}) -function neatFoldText() - -- TODO: finish this! - -- local lines_count = vim.foldend - vim.foldstart + 1 - -- local foldchar = vim.fn.matchstr(vim.fillchars, 'fold:\\zs.') - -- local foldtextstart = vim.fn.strpart('^' . repeat(foldchar, v:foldlevel*2) . line, 0, (winwidth(0)*2)/3) - -- let foldtextend = printf("%s %".(winwidth(0)-20)."dL", foldtextstart, getline(v:foldstart), lines_count) - -- let foldtextlength = strlen(substitute(foldtextstart . foldtextend, '.', 'x', 'g')) + &foldcolumn - -- return printf("%s%d", substitute(getline(v:foldstart), "^.", ">"), lines_count) -end --- set foldtext=NeatFoldText() - --- TODO: only update this portion when needed instead of every render? -function statusLineBufferByNum(bufnum) - local bufinfo = vim.fn.getbufinfo(bufnum)[0] - local prefix = ' %#InactiveBuffer#' - local suffix = '%* ' - - if bufinfo.changed then - prefix = '%#DirtyBuffer# ' - suffix = ' %*' - end - - if bufinfo.hidden == 0 and vim.fn.index(bufinfo.windows, vim.g.statusline_winid) >= 0 then - prefix = '%#ActiveBuffer# ' - suffix = ' %*' - if bufinfo.changed then - prefix = '%#ActiveBuffer# *' - suffix = ' %*' - end - end - - return prefix..vim.fn.fnamemodify(vim.fn.bufname(bufnum), ':t')..suffix -end +kmap('i', '', '(completion_trigger)', {silent=true}) execute[[au BufReadPost * | if stridx(&ft, 'commit') >= 0 | exe "startinsert!" | endif]] -local status_line_max_length = 5 - -function statusLineBuffers() - -- TODO: mark buffers with unsaved changes - - local active_index = -1 - local acc = {} - for bufnum in vim.fn.nvim_list_bufs() do - local bufinfo = vim.fn.getbufinfo(bufnum)[0] - if bufinfo.listed ~= 0 then - local entry = statusLineBufferByNum(bufnum) - table.insert(acc, entry) - if vim.fn.matchstr(entry, '^%#ActiveBuffer#') then - active_index = vim.fn.index(acc, entry) - end - end - end - if active_index >= 0 then - -- TODO: instead implement this as a wraparound carousel? - local offset = status_line_max_length / 2 - local min_buf_num = math.max(0, (active_index - offset)) - local max_buf_num = math.min(#acc - 1, min_buf_num + status_line_max_length - 1) - min_buf_num = math.max(0, max_buf_num - status_line_max_length + 1) - local buflist = table.concat({table.unpack(acc, min_buf_num, max_buf_num)}, '') - local prefix = '' - local suffix = '' - if min_buf_num > 0 then - prefix = '< ' - end - if max_buf_num < (#acc - 1) then - suffix = ' >' - end - return prefix..buflist..suffix - else - return table.concat(acc, '') - end -end - -function statusLine() - return statusLineBuffers()..'%*%=%c,%l/%L (%p%%)' -end - -vim.api.nvim_exec[[ +vim.api.nvim_exec([[ augroup slime - au! - autocmd BufNewFile,BufRead *.slimleex set syntax=slim + au! + autocmd BufNewFile,BufRead *.slimleex set syntax=slim augroup END -]] +]], false) -vim.o.statusline = '%'..statusLine() +require('telescope').setup{ + defaults={ + mappings={ + i={ + ['']=false, + ['']=false, + }, + }, + generic_sorter=require'telescope.sorters'.get_fzy_sorter, + file_sorter=require'telescope.sorters'.get_fzy_sorter, + } +} -kmap('i', ' ', '(completion_trigger)') +require('fold').setup() +require('statusline').setup() +require('lsp').setup() diff --git a/common/neovim/init.vim b/common/neovim/init.vim deleted file mode 100644 index 1a25a1c..0000000 --- a/common/neovim/init.vim +++ /dev/null @@ -1,262 +0,0 @@ -set fileencoding=utf8 - -let $vimdir = $XDG_CONFIG_HOME.'/nvim' - -if empty(glob($vimdir.'/autoload/plug.vim')) - silent !curl -fLo $vimdir/autoload/plug.vim --create-dirs - \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim - autocmd VimEnter * PlugInstall --sync | source $vimdir.'/init.vim' -endif - -" let g:coc_global_extensions = ['coc-elixir', 'coc-diagnostic'] -let g:completion_enable_auto_popup = 0 -let g:indent_guide_auto_colors = 1 -let g:indent_guides_enable_on_vim_startup = 1 -let g:jsonnet_fmt_on_save = 0 -let g:skipview_files = ['COMMIT_EDITMSG'] -let g:prosession_dir = $vimdir.'/sessions' -" let g:fzf_preview_window = ['down:40%:hidden', 'ctrl-/'] - -call plug#begin($vimdir.'/plugged') - Plug 'junegunn/vim-plug' " plugin manager should manage itself - Plug 'sheerun/vim-polyglot' " handles language-specific configuration - Plug 'neovim/nvim-lspconfig' " deeper language integration via language servers - Plug 'nvim-lua/completion-nvim' " language server completion - Plug 'junegunn/fzf' " fzf - Plug 'junegunn/fzf.vim' " helpers for using fzf in vim - Plug 'editorconfig/editorconfig-vim' " loads project-specific editor settings - Plug 'tpope/vim-sleuth' " try and detect indent method - Plug 'vim-scripts/LargeFile' " gracefully handle very large files - Plug 'vim-scripts/restore_view.vim' " persistent buffer views - Plug 'nathanaelkane/vim-indent-guides' " indentation guides - Plug 'christoomey/vim-tmux-navigator' " allow window navigation to play nicely with tmux - Plug 'tpope/vim-commentary' " toggle comments in code easily - Plug 'tpope/vim-repeat' " better vim repeating for plugin-provided actions - Plug 'machakann/vim-sandwich' " quickly modify text surrounding objects - Plug 'michaeljsmith/vim-indent-object' " adds an indentation level text object - Plug 'bkad/CamelCaseMotion' " camel case and underscore word movements - Plug 'wellle/targets.vim' " adds some more handy text objects - Plug 'tpope/vim-obsession' " even better session handling - Plug 'dhruvasagar/vim-prosession' " even better session handling - Plug 'jjo/vim-cue' " CUE lang - Plug 'neoclide/coc.nvim', {'branch': 'release'} -call plug#end() - -" luafile $vimdir/lsp.lua -" autocmd BufEnter * lua require('completion').on_attach() - -filetype on -filetype indent on -filetype plugin on - -" use :h option-list if you need to know what these do -set encoding=utf8 -set tabstop=2 shiftwidth=2 softtabstop=2 noexpandtab -set autoindent smartindent -set list nostartofline listchars=trail:·,tab:\ \ ,trail:~ -set linebreak formatoptions=crql1jn " TODO: see if there is more in `:h fo-table` -set synmaxcol=200 -set lazyredraw -set scrolloff=8 sidescrolloff=15 -set mouse=a -set splitright splitbelow -set noerrorbells visualbell t_vb= -set nobackup nowritebackup noswapfile -set timeout ttimeoutlen=100 timeoutlen=150 -set hidden shortmess+=Iac -set history=1000 -set undofile undodir=$vimdir/undo undolevels=1000 undoreload=10000 -set spellfile=$vimdir/spell/en.utf-8.add -set ignorecase smartcase incsearch wrapscan hlsearch -set foldmethod=syntax foldlevel=99 foldnestmax=10 foldlevelstart=99 " TODO: get good at folding -set noautowrite autochdir autoread -set nomodeline noshowmode noshowcmd laststatus=2 noruler -set clipboard+=unnamedplus -set t_Co=256 -let &fcs = 'eob: ' - -syntax enable -colorscheme base16-donokai - -hi Search cterm=NONE ctermbg=blue ctermfg=black -hi LineNr ctermbg=none ctermfg=8 -hi CursorLineNr ctermbg=18 ctermfg=gray -hi IndentGuidesEven ctermbg=18 -hi Normal ctermbg=NONE -hi ColorColumn ctermbg=18 -hi TooLongColorColumn ctermbg=18 ctermfg=1 -hi ActiveBuffer ctermbg=4 ctermfg=0 -hi DirtyBuffer ctermbg=3 ctermfg=0 -hi StatusLine ctermbg=18 ctermfg=7 -hi StatusLineNC ctermbg=18 ctermfg=7 - -call matchadd('ColorColumn', '\%81v', 100) -call matchadd('TooLongColorColumn', '\%121v', 200) - -command! W write - -inoremap jj -inoremap jJ -inoremap Jj -inoremap JJ -inoremap jk -inoremap jK -inoremap Jk -inoremap JK - -nnoremap :qa -inoremap - -nnoremap :GitFiles -nnoremap :Files -nnoremap :GFiles? -nnoremap :Buffers - -nnoremap :TmuxNavigateLeft -nnoremap :TmuxNavigateDown -nnoremap :TmuxNavigateUp -nnoremap :TmuxNavigateRight -tnoremap :TmuxNavigateLeft -tnoremap :TmuxNavigateDown -tnoremap :TmuxNavigateUp -tnoremap :TmuxNavigateRight - -map ,w CamelCaseMotion_w -map ,b CamelCaseMotion_b -map ,e CamelCaseMotion_e -map ,ge CamelCaseMotion_ge -omap ib CamelCaseMotion_ib -xmap ib CamelCaseMotion_ib -omap ie CamelCaseMotion_ie -xmap ie CamelCaseMotion_ie - -map mw:%s/\s\+$//:let @/ = ""'w -map :setlocal spell! - -nnoremap n 'Nn'[v:searchforward] -nnoremap N 'nN'[v:searchforward] - -cnoremap -cnoremap - -xnoremap < >gv - -nnoremap gd :call CocAction('jumpDefinition') -nmap gd (coc-definition) -nmap gy :call CocActionAsync('doHover') -nmap gi (coc-implementation) -nmap gr (coc-references) - -" TODO: learn about the wildmenu `q:` - -let mapleader = "\" -nnoremap r :source $vimdir/init.vim:echo 'Reloaded init.vim' -nnoremap gv :e $vimdir/init.vim -nnoremap w :bd -nnoremap h :b# -nnoremap k :bnext -nnoremap j :bprevious -nnoremap / :let @/ = "": - -nnoremap t :split:term:resize 24:startinsert -tnoremap :q! - -function! NeatFoldText() - " TODO: finish this! - let lines_count = v:foldend - v:foldstart + 1 - let foldchar = matchstr(&fillchars, 'fold:\zs.') - let foldtextstart = strpart('^' . repeat(foldchar, v:foldlevel*2) . line, 0, (winwidth(0)*2)/3) - let foldtextend = printf("%s %".(winwidth(0)-20)."dL", foldtextstart, getline(v:foldstart), lines_count) - let foldtextlength = strlen(substitute(foldtextstart . foldtextend, '.', 'x', 'g')) + &foldcolumn - return printf("%s%d", substitute(getline(v:foldstart), "^.", ">"), lines_count) -endfunction -set foldtext=NeatFoldText() - -" TODO: only update this portion when needed instead of every render? -function! StatusLineBufferByNum(bufnum) - let l:bufinfo = getbufinfo(a:bufnum)[0] - let l:prefix = ' %#InactiveBuffer#' - let l:suffix = '%* ' - - if l:bufinfo.changed - let l:prefix = '%#DirtyBuffer# ' - let l:suffix = ' %*' - end - - if l:bufinfo['hidden'] == 0 && index(l:bufinfo['windows'], g:statusline_winid) >= 0 - let l:prefix = '%#ActiveBuffer# ' - let l:suffix = ' %*' - if l:bufinfo.changed - let l:prefix = '%#ActiveBuffer# *' - let l:suffix = ' %*' - end - endif - - return l:prefix . fnamemodify(bufname(a:bufnum), ':t') . l:suffix -endfunction - -au BufReadPost * | if stridx(&ft, 'commit') >= 0 | exe "startinsert!" | endif - -let g:status_line_max_length = 5 -function! StatusLineBuffers() - " TODO: mark buffers with unsaved changes - let l:active_index = -1 - let l:acc = [] - for l:bufnum in nvim_list_bufs() - let l:bufinfo = getbufinfo(l:bufnum)[0] - if l:bufinfo.listed == 0 - continue - end - let l:entry = StatusLineBufferByNum(bufnum) - let l:acc = add(l:acc, l:entry) - if l:entry =~ "^%#ActiveBuffer#" - let l:active_index = index(l:acc, l:entry) - endif - endfor - if l:active_index >= 0 - " TODO: instead implement this as a wraparound carousel? - let l:offset = g:status_line_max_length / 2 - let l:min_buf_num = max([0, (l:active_index - offset)]) - let l:max_buf_num = min([(len(l:acc) - 1), (l:min_buf_num + g:status_line_max_length - 1)]) - let l:min_buf_num = max([0, (l:max_buf_num - g:status_line_max_length + 1)]) - let l:buflist = join(l:acc[(l:min_buf_num):(l:max_buf_num)], '') - let l:prefix = "" - let l:suffix = "" - if l:min_buf_num > 0 - let l:prefix = "< " - endif - if l:max_buf_num < len(l:acc) - 1 - let l:suffix = " >" - endif - return l:prefix . l:buflist . l:suffix - else - return join(l:acc, '') - endif -endfunction - -function! StatusLine() - " try - return StatusLineBuffers().'%*%=%c,%l/%L (%p%%)' - " catch - " return 'buflisterr%*%=%c,%l/%L (%p%%)' - " endtry -endfunction - -augroup slime | au! BufNewFile,BufRead *.slimleex set syntax=slim | augroup END -augroup ctmpl | au! BufNewFile,BufRead *.ctmpl set syntax=gohtmltmpl | augroup END - -" set laststatus=0 showtabline tabline=%!StatusLine() -set statusline=%!StatusLine() - -imap (completion_trigger) - -if filereadable(expand($ENV_PATH.'/init.vim')) - source "$ENV_PATH/init.vim" -endif - -for f in glob($ENV_PATH.'/*/init.d.vim', 0, 1) - source "$f" -endfor - -set number