set fileencoding=utf-8 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 call plug#begin('~/.config/nvim/plugged') " Solarized theme Plug 'altercation/vim-colors-solarized' " Zenburn theme Plug 'vim-scripts/zenburn' " 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' " Indent guides Plug 'Yggdroot/indentLine' " Autocomplete certain pairs (", ], etc) Plug 'jiangmiao/auto-pairs' " Language specific syntax highlighting Plug 'derekwyatt/vim-scala' Plug 'kchmck/vim-coffee-script' Plug 'rust-lang/rust.vim' Plug 'klen/python-mode' 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 'fatih/vim-go' Plug 'isRuslan/vim-es6' " SBT integration for vim Plug 'ktvoelker/sbt-vim' " Org Mode Plug 'jceb/vim-orgmode' if !has("win32") || !has("win16") "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' " Make Vim play nice with tmux " Use " to move between window panes in tmux or vim Plug 'christoomey/vim-tmux-navigator' endif " Markdown Plug 'godlygeek/tabular' Plug 'plasticboy/vim-markdown' " Snippet Support/Configuration " Currently disabled because it irrepairably causes neovim to detonate more " than I care to deal with as of 5/26/2017 "Plug 'SirVer/ultisnips' "Plug 'honza/vim-snippets' " Database engine support Plug 'https://github.com/vim-scripts/dbext.vim' "let g:UltiSnipsExpandTrigger="" "let g:UltiSnipsJumpForwardTrigger="" "let g:UltiSnipsJumpBackwardTrigger="" "let g:UltiSnipsSnippetsDir=["~/.config/nvim/plugged/vim-snippets/UltiSnips", "~/.config/nvim/snippets"] "" Allow UltiSnips to split the window vertically "let g:UltiSnipssEditSplit="vertical" """"""""""""""""""""""""""""""" " end plugin list call plug#end() " 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 " Autocmds " 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 " 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 gofmt command let g:go_fmt_command = "gofmt" " 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' " Color customizations colorscheme zenburn " 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