dotfiles/roles/vim/files/vimrc

259 lines
10 KiB
VimL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

set nocompatible
if $XDG_CONFIG_HOME == "" | let $XDG_CONFIG_HOME="~/.config" | endif
if $XDG_CACHE_HOME == "" | let $XDG_CACHE_HOME="~/.cache" | endif
if $LOCAL_CONFIG == "" | let $LOCAL_CONFIG="~/.local/etc" | endif
let $MYVIMRC="$XDG_CONFIG_HOME/vim/vimrc"
" Options {{{
set autoindent " take indent for new line from previous line
set autoread " autom. read file when changed outside of Vim
let &background = $BACKGROUND ==# 'light' ? 'light' : 'dark'
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 cursorlineopt=number " highlight the line number of the cursor
set diffopt=filler,vertical " make side-by-side diffs better
set encoding=utf8 " use UTF-8 by default
set expandtab " use spaces whe <Tab> is inserted
set fileformats=unix,mac,dos " prioritize unix <EOL> 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 lings
set formatoptions+=n " recognize and indent lists automatically
set hidden " hide abandoned buffers
set history=1000 " how many ":" commands to remember
set hlsearch " highlight search results
set ignorecase " ignore case when searching (see 'smartcase' below)
set incsearch " use incremental search
set nojoinspaces " use one space after a period whe joining lines
set laststatus=2 " always show a status line
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 runtimepath=$XDG_CONFIG_HOME/vim,$VIMRUNTIME " so vim-plug can work
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 (using airline instead)
set sidescroll=1 " minimum number of columns to scroll horizontal
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 smarttab " use 'shiftwidth' when inserting <Tab>
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 timeout timeoutlen=1000 ttimeoutlen=100 " timeout on mappings & key codes
set ttyfast " indicate a fast terminal for smoother redrawing
" +--Disable hlsearch while loading viminfo
" | +--Remember marks for last 500 files
" | | +--Remember up to 10000 lines in each register
" | | | +--Remember up to 1MB in each register
" | | | | +--Remember last 1000 search patterns
" | | | | | +---Remember last 1000 commands
" | | | | | |
" v v v v v v
set viminfo=h,'500,<10000,s1000,/1000,:1000
set viminfofile=$XDG_CACHE_HOME/vim/viminfo
set virtualedit=block " position the cursor anywhere in Visual Block mode
set wildignore=*.o,*.obj,*.pyc,*.exe,*.so,*.dll
set wildmenu " use the menu for commandline completion
set wrap " wrap long lines
set writebackup " make a backup before overwriting a file
" Overrides when UTF-8 is available
if has('multi_byte') && &encoding ==# 'utf-8'
set foldtext=VimrcFoldText()
set fillchars=vert:┃,fold
set showbreak=" ⤷ " " prefix for wrapped lines
set listchars="tab:▷ ,extends:»,precedes:«,trail:·" " invisible chars
endif
" }}}
" Plugins {{{
call plug#begin('$XDG_CONFIG_HOME/vim/bundle')
Plug 'altercation/vim-colors-solarized'
Plug 'bronson/vim-trailing-whitespace'
Plug 'elzr/vim-json'
" Make numbers and booleans stand out, important because of the
" concealment used by vim-json.
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 'kien/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 'tpope/vim-fugitive'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
if !exists('g:airline_symbols')
let g:airline_symbols = {}
endif
let g:airline_left_sep = ' '
let g:airline_left_alt_sep = ''
let g:airline_right_sep = ' '
let g:airline_right_alt_sep = ''
let g:airline_symbols.crypt = '🔒'
let g:airline_symbols.branch = '⎇'
let g:airline_symbols.paste = 'Ⓟ'
let g:airline_symbols.spell = '✔'
let g:airline_symbols.readonly = ' ⃠'
let g:airline_symbols.notexists = '∄'
let g:airline_symbols.whitespace = '✗'
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()
" This has to be here (as opposed to right after the Plug call) because the
" function airline#section#create doesn't exist before plug#end() is
" called. The exists() call is still needed so no errors are generated on
" the very first time vim is run, as no plugins are installed yet.
if exists("airline#section#create")
if has('multi_byte') && &encoding ==# 'utf-8'
let g:airline_section_z = airline#section#create(['%4l/%L 𝚌%3v'])
else " line / total : col
let g:airline_section_z = airline#section#create(['L%4l/%L c%3v'])
endif
endif
silent! colorscheme solarized
filetype plugin indent on
syntax enable
" }}}
" 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
" Turn fold text from this:
"
" +--- 2 lines: text of first line in fold --------------------------
"
" into this:
"
" ··· 2: text of first line in fold ······························
function! VimrcFoldText() abort
let l:level=substitute(v:folddashes, '-', '·', 'g')
let l:count=(v:foldend - v:foldstart + 1)
let l:title=substitute(getline(v:foldstart), '\v *', '', '')
return l:level . ' ' . l:count . ': ' . l:title . ' '
endfunction
" }}}"
" Mappings {{{
let mapleader = "\<space>"
let maplocalleader = ","
" better navigation for wrapped lines
noremap j gj
noremap k gk
" quickly exit insert mode
inoremap jk <esc>
" retain selection when indenting/unindenting in visual mode
vnoremap > ><cr>gv
vnoremap < <<cr>gv
" better searching (case insensitive & expand on previous)
nnoremap // /\c
nnoremap /// /<C-R>/
" window resizing similar to the way I have tmux set up
nnoremap <c-w><c-k> 5<c-w>+
nnoremap <c-w><c-j> 5<c-w>-
nnoremap <c-w><c-h> 5<c-w><
nnoremap <c-w><c-l> 5<c-w>>
" easier window navigation
nnoremap <c-j> <c-w>j
nnoremap <c-k> <c-w>k
nnoremap <c-h> <c-w>h
nnoremap <c-l> <c-w>l
" easier tab navigation
nnoremap <c-n> :tabprevious<cr>
nnoremap <c-m> :tabnext<cr>
" quickly change background
nnoremap <leader>bg
\ :let &background = &background ==# 'light' ? 'dark' : 'light'<cr>
" turn off search highlight
nnoremap <leader>h :nohlsearch<cr>
" toggle NERDTree
nnoremap <leader>n :NERDTreeToggle<cr>
" toggle rainbow parens
nnoremap <leader>p :RainbowParentheses!!<cr>
" fix whitespace
nnoremap <leader>w :FixWhitespace<cr>
" cycle through line numbering modes
nnoremap <silent> <leader>l :call VimrcCycleNumbers()<CR>
" }}}"
augroup vimrc " {{{
autocmd!
autocmd BufNewFile,BufRead bash_profile,bashrc 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 vimrc 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
autocmd BufWritePost vimrc source %
augroup END " }}}
let LOCAL_VIMRC=expand("$LOCAL_CONFIG/vim/vimrc")
if filereadable(LOCAL_VIMRC)
exec "source " . LOCAL_VIMRC
endif