set fileencoding=utf-8 " I have no idea how to auto-install vim-plug on Windows " so you will have to install it manually. if !(has('win16') || has('win32') || has('win64')) if empty(glob('~/.config/nvim/autoload/plug.vim')) silent !curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim autocmd VimEnter * PlugInstall | source % endif endif call plug#begin('~/.config/nvim/plugged') " Material theme Plug 'hzchirs/vim-material' " Syntastic Plug 'scrooloose/syntastic' " Git Plug 'tpope/vim-fugitive' " Easy Commenting Plug 'scrooloose/nerdcommenter' " Surround - Easy changing of quotes and stuff Plug 'tpope/vim-surround' " Ctrlp full path fuzzy file finder Plug 'kien/ctrlp.vim' " Ack from vim Plug 'mileszs/ack.vim' " Improved vim status bar Plug 'bling/vim-airline' Plug 'vim-airline/vim-airline-themes' let g:airline_theme='material' " Indent guides Plug 'Yggdroot/indentLine' " Autocomplete certain pairs (", ], etc) Plug 'jiangmiao/auto-pairs' " Language specific syntax highlighting Plug 'derekwyatt/vim-scala' Plug 'leafgarland/typescript-vim' Plug 'kchmck/vim-coffee-script' Plug 'rust-lang/rust.vim' Plug 'groenewege/vim-less' Plug 'cakebaker/scss-syntax.vim' Plug 'pangloss/vim-javascript' Plug 'mxw/vim-jsx' Plug 'digitaltoad/vim-jade' Plug 'wavded/vim-stylus' Plug 'raichoo/haskell-vim' Plug 'OCamlPro/ocp-indent' Plug 'slim-template/vim-slim' Plug 'isRuslan/vim-es6' " Flake8 Integration Plug 'nvie/vim-flake8' " Clang Formatting Plug 'rhysd/vim-clang-format' " SBT integration for vim Plug 'ktvoelker/sbt-vim' " Org Mode Plug 'jceb/vim-orgmode' "Code Completion " Post-update hook for YCM " Make sure to sudo pip install neovim before running this function! BuildYCM(info) if a:info.status == 'installed' || a:info.force !./install.sh endif endfunction Plug 'Valloric/YouCompleteMe', { 'do': function('BuildYCM') } Plug 'scrooloose/nerdtree' " For nerdtree indicators of what has changed Plug 'Xuyuanp/nerdtree-git-plugin' " For some modern file icons Plug 'ryanoasis/vim-devicons' " Make Vim play nice with tmux " Use " to move between window panes in tmux or vim Plug 'christoomey/vim-tmux-navigator' " Markdown Plug 'godlygeek/tabular' Plug 'plasticboy/vim-markdown' " Database engine support Plug 'https://github.com/vim-scripts/dbext.vim' " end plugin list call plug#end() " Configure vim for true color display otherwise vim-material won't display " correctly. if (has('nvim')) let $NVIM_TUI_ENABLE_TRUE_COLOR = 1 endif if (has('termguicolors')) set termguicolors endif " Standard variables set expandtab " tabs to spaces set tabstop=2 " spaces entered when tab key is pressed set shiftwidth=2 " spaces entered for indentation set number " Line numbering set clipboard=unnamedplus " Share system clipboard set eol " End of line at bottom of file set shiftround set list set list listchars=tab:»·,trail:· " custom functions function! NumberToggle() if(&relativenumber == 1) set norelativenumber set number else set relativenumber endif endfunc " Always show hidden files in nerdtree let NERDTreeShowHidden=1 " Autocmds " Auto Clang Formatting autocmd FileType c ClangFormatAutoEnable autocmd FileType cpp ClangFormatAutoEnable autocmd FileType cxx ClangFormatAutoEnable autocmd FileType h ClangFormatAutoEnable autocmd FileType hpp ClangFormatAutoEnable autocmd FileType hxx ClangFormatAutoEnable """ Stripping trailing whitespace on save autocmd BufWritePre * :%s/\s\+$//e " Fix rust autocmd FileType rust setlocal shiftwidth=2 tabstop=2 autocmd BufRead,BufNewFile *.rs set filetype=rust " Set column width to 80 only on python files autocmd BufNewFile,BufRead *.py setlocal colorcolumn=80 " Set Python syntax checking to Python3 let python_highlight_all=1 " Make tabs display as 4 spaces for Python files (makes them easier to read) autocmd BufNewFile,BufRead *.py setlocal noexpandtab tabstop=4 shiftwidth=4 " Indent YAML files correctly au FileType yaml setlocal tabstop=2 expandtab shiftwidth=2 softtabstop=2 " Disable the rust style guide recommended 4 space indentation let g:rust_recommended_style=0 " Explicitly provide vim-go the goimports command let g:go_fmt_command = "goimports" " Enable more highlighting in vim-go let g:go_highlight_types = 1 let g:go_highlight_fields = 1 let g:go_highlight_functions = 1 let g:go_highlight_methods = 1 let g:go_highlight_operators = 1 let g:go_highlight_extra_types = 1 " Make tabs display as 4 spaces for Go files (makes them easier to read) autocmd BufNewFile,BufRead *.go setlocal noexpandtab tabstop=4 shiftwidth=4 " Go linting on write. This takes advantage of :GoMetaLinter in vim-go and requires golint to be installed autocmd BufWritePost,FileWritePost *.go execute 'GoMetaLinter' | cwindow " If GoMetaLinter runs for longer than 5 seconds, time it out let g:go_metalinter_deadline = "5s" " Hotkeys " Note noremap is a normal mode non-recursive mapping " nnoremap and nmap make the bind only work in normal mode let mapleader=" " map t :NERDTreeToggle nnoremap r :call NumberToggle() " This one maps F5 to delete all trailing whitespace nnoremap :let _s=@/:%s/\s\+$//e:let @/=_s:nohl " Pressing enter in command mode clears the current search highlighting until " the next search. nnoremap :noh " Move tabs left and right nnoremap _ :tabp nnoremap + :tabn " ctrlp hotkeys let g:ctrlp_map='' let g:ctrlp_cmd='CtrlP' " Rebind Ctrl-P to match the window opening keys of nerd tree let g:ctrl_p_prompt_mappings = { \ 'AcceptSelection("h")': ['', '', ''], \ 'AcceptSelection("v")': ['', ''], \ } " ctrlp configuration set wildignore+=*/tmp/*,*.so,*.swp,*.zip " MacOSX/Linux set wildignore+=*\\tmp\\*,*.swp,*.zip,*.exe " Windows let g:ctrlp_working_path_mode='ra' " Highlight any line with ErrorMsg that goes over 120 characters if exists('+colorcolumn') set colorcolumn=120 else au BufWinEnter * let w:m2=matchadd('ErrorMsg', '\%>80v.\+', -1) endif " Javascript linting on the fly " npm install -g eslint to get it working let g:syntastic_javascript_checkers = ['eslint'] let g:syntastic_javascript_jsxhint_exec = 'eslint' " Python-mode settings " disable pymode folding let g:pymode_folding = 0 " set pydoc key let g:pymode_doc_key = 'K' " Disable auto python-mode autocomplete documentation window set completeopt=menu " Disable markdown automatic section folding let g:vim_markdown_folding_disabled = 1 " Merlin for OCaml " TODO: Detect OPAM and install/configure merlin. Until then this is commented out. " let g:opamshare = substitute(system('opam config var share'),'\n$','','''') " execute "set rtp+=" . g:opamshare . "/merlin/vim" " Fugitive bindings nnoremap gs :Gstatus nnoremap gd :Gdiff nnoremap gb :Gblame nnoremap gc :Gcommit " F9 is bound to fold and unfold in all modes inoremap za nnoremap za onoremap za vnoremap zf " Line indent guides are defaulted to off let g:indentLine_enabled=0 " Leader + i will toggle line indent guides map i :IndentLinesToggle " Color scheme setting is done absolutely last to make sure everything is " available to vim set background=dark colorscheme vim-material