if $XDG_CONFIG_HOME == "" | let $XDG_CONFIG_HOME="~/.config" | endif if $XDG_CACHE_HOME == "" | let $XDG_CACHE_HOME="~/.cache" | endif if $XDG_DATA_HOME == "" | let $XDG_DATA_HOME="~/.local/share" | endif if $LOCAL_CONFIG == "" | let $LOCAL_CONFIG="~/.local/etc" | endif " Options {{{ set backspace=indent,eol,start " sane backspace behavior set nobackup " don't keep backup file after overwriting a file set clipboard=unnamed " synchronize with system clipboard set colorcolumn=+1 " highlight column after 'textwidth' set cursorline " highlight the line of the cursor set diffopt=filler,vertical " make side-by-side diffs better set expandtab " use spaces whe is inserted set fileformats=unix,mac,dos " prioritize unix format set foldenable " enable folding set foldlevelstart=100 " start with all folds open set foldmethod=syntax " fold based on syntax by default set foldnestmax=10 " limit nested folds to 10 levels set formatlistpat="^\s*\(\d\+[\]:.)}\t ]\|[-*]\|\[[ x]\]\|([ x])\)\s*" set formatoptions-=t " don't auto-wrap on 'textwidth' set formatoptions+=c " do auto-wrap comments on 'textwidth' set formatoptions+=j " remove comment leader when joining lines set formatoptions+=n " recognize and indent lists automatically set hidden " hide abandoned buffers set ignorecase " ignore case when searching (see 'smartcase' below) let &inccommand='split' " show command partial results set nojoinspaces " use one space after a period whe joining lines set lazyredraw " don't redraw screen when executing macros set list " show invisible characters set listchars=tab:>~,extends:>,precedes:<,trail:- " invisible chars set modelines=0 " never use modelines set number " show line numbers set nrformats-=octal " number formats for CTRL-A & CTRL-X commands set scrolloff=3 " minimum number of lines above and below cursor set shiftwidth=0 " use 'tabstop' spaces for (auto)indent step set shortmess+=I " don't show the intro message when starting Vim set showbreak="-> " " prefix for wrapped lines set showmatch " briefly jump to matching bracket if insert one set noshowmode " don't show mode (shown in statusline instead) set sidescrolloff=3 " min. number of columns to left and right of cursor set smartcase " case sensitive search if pattern has uppercase chars set smartindent " use smart autoindenting set splitbelow " new window from split is below the current one set splitright " new window is put right of the current one set noswapfile " don't use swap files set tabstop=4 " tabs are 4 spaces set textwidth=79 " maximum width for text being inserted set virtualedit=block " position the cursor anywhere in Visual Block mode set wildignore=*.o,*.obj,*.pyc,*.exe,*.so,*.dll set wildignorecase " ignore case when completing file names set wildmode=longest,list,full " complete longest common, then list, then wildmenu set wrap " wrap long lines set writebackup " make a backup before overwriting a file " +--Disable hlsearch while loading viminfo " | +--Remember marks for last 100 files " | | +--Remember up to 1000 lines in each register " | | | +--Remember up to 1MB in each register " | | | | +--Remember last 1000 search patterns " | | | | | +---Remember last 1000 commands " | | | | | | +-- name of shared data file " | | | | | | | " v v v v v v v set shada=h,'100,<1000,s1000,/1000,:1000,n$XDG_DATA_HOME/nvim/shada/main.shada " Overrides when UTF-8 is available if has('multi_byte') && &encoding ==? 'utf-8' set fillchars=vert:┃,fold:· set showbreak=⤷ " prefix for wrapped lines set listchars=tab:▷\ ,extends:»,precedes:«,trail:· " invisible chars endif " }}} " Plugins {{{ call plug#begin('$XDG_DATA_HOME/nvim/plugged') Plug 'altercation/vim-colors-solarized' Plug 'bronson/vim-trailing-whitespace' Plug 'elzr/vim-json' " Disable quote concealling. let g:vim_json_syntax_conceal = 0 " Make numbers and booleans stand out. highlight link jsonBraces Text highlight link jsonNumber Identifier highlight link jsonBoolean Identifier highlight link jsonNull Identifier Plug 'godlygeek/tabular' | Plug 'plasticboy/vim-markdown' let g:vim_markdown_conceal_code_blocks = 0 Plug 'junegunn/rainbow_parentheses.vim' let g:rainbow#pairs = [['(',')'], ['[',']'], ['{','}']] Plug 'ctrlpvim/ctrlp.vim' let g:ctrlp_match_window = 'bottom,order:ttb' let g:ctrlp_switch_buffer = 0 " open files in new buffer let g:ctrlp_show_hidden = 1 " show hidden files Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } Plug 'tpope/vim-commentary' Plug 'itchyny/lightline.vim' let g:lightline = { \ 'colorscheme': 'solarized', \ 'active': { \ 'left': [['mode','paste'],[],['path']], \ 'right': [['percent'],['lineinfo'],['ro','modified','ft','fenc','ff']], \ }, \ 'inactive': { \ 'left': [['paste','ro','modified'],['path']], \ 'right': [['percent'],['lineinfo'],['ro','modified']], \ }, \ 'component': { \ 'fenc': '%{&fenc!=#""?&fenc:&enc}', \ 'ff': '%{&ff}', \ 'ft': '%{&ft!=#""?&ft:"?"}', \ 'modified': '%m', \ 'paste': '%{&paste?"PASTE":""}', \ 'path': '%f', \ 'percent': '%3p%%×%L', \ 'ro': '%r', \ }, \ 'subseparator': { 'left': '', 'right': '' }, \ } Plug 'vim-scripts/srec.vim' highlight link srecStart Comment highlight link srecType Comment highlight link srecLength WarningMsg highlight link srec16BitAddress Constant highlight link srec24BitAddress Constant highlight link srec32BitAddress Constant highlight link srecChecksum Type Plug 'keith/swift.vim' Plug 'chr4/nginx.vim' call plug#end() silent! colorscheme solarized " }}} " Functions {{{ " Cycle through relativenumber + number, number (only), and no numbering. function! VimrcCycleNumbers() abort if exists('+relativenumber') execute { \ '00': 'set relativenumber | set number', \ '01': 'set norelativenumber | set number', \ '10': 'set norelativenumber | set nonumber', \ '11': 'set norelativenumber | set number' }[&number . &relativenumber] else set number! " No relative numbering, just toggle numbers on and off. endif endfunction " Mappings {{{ let mapleader = "\" let maplocalleader = "," " better navigation for wrapped lines noremap j gj noremap k gk " retain selection when indenting/unindenting in visual mode vnoremap > >gv vnoremap < <gv " window resizing similar to the way I have tmux set up nnoremap 5+ nnoremap 5- nnoremap 5< nnoremap 5> " easier window navigation nnoremap j nnoremap k nnoremap h nnoremap l " easier tab navigation nnoremap :tabprevious nnoremap :tabnext " quickly change background nnoremap bg \ :let &background = &background ==? 'light' ? 'dark' : 'light' " toggle search highlight nnoremap h :set hlsearch! " toggle NERDTree nnoremap n :NERDTreeToggle " toggle rainbow parens nnoremap p :RainbowParentheses!! " fix whitespace nnoremap w :FixWhitespace " cycle through line numbering modes nnoremap l :call VimrcCycleNumbers() " move lines up and down nnoremap :move .+1 nnoremap :move .-2 vnoremap :move '>+1gv vnoremap :move '<-2gv " }}}" augroup vimrc " {{{ autocmd! autocmd BufNewFile,BufRead bash_profile,bashrc,profile set filetype=sh autocmd BufNewFile,BufRead gitconfig set filetype=gitconfig autocmd BufNewFile,BufRead *.sx,*.s19 set filetype=srec autocmd BufNewFile,BufRead Vagrantfile set filetype=ruby autocmd BufNewFile,BufRead init.vim set foldmethod=marker autocmd FileType python setlocal foldmethod=indent foldignore= autocmd FileType markdown,text,gitcommit setlocal formatoptions+=t spell autocmd FileType gitcommit setlocal textwidth=72 " Disable cursorline in INSERT mode. autocmd InsertEnter,InsertLeave * set cursorline! autocmd BufWritePost init.vim source % augroup END " }}} for extra_vimrc in expand("$LOCAL_CONFIG/nvim/*", v:false, v:true) if filereadable(extra_vimrc) exec "source " . extra_vimrc endif endfor