" for long lines set wrap " tab business set tabstop=8 set softtabstop=4 set shiftwidth=4 set expandtab set autoindent " syntax highlighting syntax on set nohlsearch " try to detect filetypes filetype on " enable loading indent file for filetype filetype plugin indent on " line numbers set number " cursor line set cursorline " enable mouse set mouse=a " set term title set title set titleold= " plugin dependent conf starts call plug#begin('~/.vim/plugged') " git Plug 'tpope/vim-fugitive', { 'tag': 'v3.6' } Plug 'airblade/vim-gitgutter' " tmux Plug 'tmux-plugins/vim-tmux-focus-events' Plug 'roxma/vim-tmux-clipboard' Plug 'wincent/terminus' " life improvements Plug 'gruvbox-community/gruvbox' Plug 'scrooloose/nerdtree' Plug 'qpkorr/vim-bufkill' Plug 'Chiel92/vim-autoformat' Plug 'jsfaint/gen_tags.vim' Plug 'rbong/vim-crystalline' Plug 'godlygeek/tabular' Plug 'plasticboy/vim-markdown' Plug 'vimwiki/vimwiki' " language support Plug 'samsaga2/vim-z80' Plug 'tomtom/tcomment_vim' Plug 'https://tildegit.org/sloum/gemini-vim-syntax.git' Plug 'neovimhaskell/haskell-vim' if has('nvim-0.5') " general lua Plug 'nvim-lua/popup.nvim' Plug 'nvim-lua/plenary.nvim' " scala Plug 'scalameta/nvim-metals' if has('nvim-0.5.1') Plug 'nvim-telescope/telescope.nvim' end " auto complete Plug 'hrsh7th/nvim-cmp' Plug 'hrsh7th/cmp-nvim-lsp' Plug 'hrsh7th/cmp-vsnip' Plug 'hrsh7th/vim-vsnip' end if has('nvim-0.6.1') " lsp Plug 'neovim/nvim-lspconfig' Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} end call plug#end() " crystaline conf " " metals status function! MetalsStatus() abort return get(g:, 'metals_status', '') endfunction " git-gutter status " function! GitStatus() let [a,m,r] = GitGutterGetHunkSummary() return printf('+%d ~%d -%d', a, m, r) endfunction function! StatusLine(current, width) let l:s = '' if a:current let l:s .= crystalline#mode() . crystalline#right_mode_sep('') else let l:s .= '%#CrystallineInactive#' endif let l:s .= ' %<%f%h%w%m%r ' if a:current let l:s .= crystalline#right_sep('', 'Fill') . ' %{fugitive#statusline()}' .' %{GitStatus()}' endif let l:s .= '%=' if a:current let l:s .= ' %{MetalsStatus()} ' let l:s .= crystalline#left_sep('', 'Fill') . ' %{&paste ?"PASTE ":""}%{&spell?"SPELL ":""}' let l:s .= crystalline#left_mode_sep('') endif if a:width > 80 let l:s .= ' %{&ft} [%{&fenc!=#""?&fenc:&enc}][%{&ff}] %3(%c%V%) %l/%L %P ' else let l:s .= ' ' endif return l:s endfunction let g:crystalline_enable_sep = 1 let g:crystalline_statusline_fn = 'StatusLine' let g:crystalline_theme = 'gruvbox' set laststatus=2 " vim-autoformat (C-F5) " noremap :Autoformat au BufWrite *.py,*.c,*.h,*.cpp,*.hs :Autoformat " enable omnicompletion set omnifunc=syntaxcomplete#Complete " looks nice set termguicolors set background=dark let g:gruvbox_italic = 1 let g:gruvbox_contrast_dark = "soft" let g:gruvbox_guisp_fallback = "fg" colorscheme gruvbox " toggle spell check map s :set spell! spelllang=en_gb " show tabs and EOL whitespace :set list listchars=tab:»·,trail:· " for tmux, screen, etc set t_ut= " default is too slow set updatetime=500 " re-read the file if changed (if possible) set autoread au BufEnter,CursorHold,CursorHoldI * silent! checktime " NERDTree " map n :NERDTreeToggle let NERDTreeQuitOnOpen=1 " Telescope " nnoremap f Telescope find_files nnoremap B Telescope buffers "" gen_tags.vim (requires GNU global, aka gtags) " disable ctags completely, use it through gtags plugin let g:loaded_gentags#ctags = 1 " vimwiki " let g:vimwiki_list = [{'path': '~/textfiles/', \ 'syntax': 'markdown', 'ext': '.md'}] let g:vimwiki_global_ext = 0 " vim-markdown " let g:vim_markdown_folding_disabled = 1 let g:vim_markdown_frontmatter = 1 let g:vim_markdown_conceal_code_blocks = 0 autocmd FileType markdown setlocal conceallevel=2 " haskell syntax " let g:haskell_classic_highlighting = 1 " git gutter to play nice with others " let g:gitgutter_sign_allow_clobber = 0 " Required for operations modifying multiple buffers like rename. set hidden " better for some messages set cmdheight=2 set shortmess+=c " for lsc erros set shortmess-=F " disable preview when doing auto-complete set completeopt-=preview " dependent on gruvbox theme highlight link lscDiagnosticError GruvboxRedSign highlight link lscDiagnosticWarning GruvboxYellowSign " Set completeopt to have a better completion experience set completeopt=menuone,noinsert,noselect