Files
dotfiles-vim/.vimrc
2017-10-24 15:29:31 -04:00

212 lines
9.5 KiB
VimL

set nocompatible " be iMproved, required
set number " turn on line numbers
set relativenumber " lines are numbered relative to current line
set scrolloff=8 " number of lines to keep above and below the cursor
set noerrorbells visualbell t_vb= " no sound on errors
autocmd! bufwritepost .vimrc source ~/.vimrc " When vimrc is edited, reload it
set autoread " set to auto read when a file is changed from the outside
set cursorcolumn " highlight current column
set cursorline " highlight current row
set incsearch " make search act like search in modern browsers
set showmatch " show matching brackets when text indicator is over them
" ----------------------------------------------------------------------------------------------------
" From Vim Zero: https://www.oliversherouse.com/2017/08/21/vim_zero.html
" General
let mapleader = ','
set hidden " Allow background buffers without saving
set spell spelllang=en_us
set splitright " Split to right by default
" Text Wrapping
set textwidth=119
set colorcolumn=120
set nowrap
" Search and Substitute
set gdefault " use global flag by default in s: commands
set hlsearch " highlight searches
set ignorecase
set smartcase " don't ignore capitals in searches
nnoremap <leader><space> :nohls <enter>
" Tabs
set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
" Mappings
" <ctrl>-H to move to previous buffer
nnoremap <C-H> :bp <enter>
" <ctrl>-L to move to next buffer
nnoremap <C-L> :bn <enter>
" comma-w to save buffer
nnoremap <Leader>w :w <enter>
" comma-q to quit buffer
nnoremap <Leader>q :bd <enter>
" bring up the copy buffer
noremap <Leader>x "+
" With ripgrep and FZF
" <leader> p to open files
map <Leader>p :Files<CR>
" search buffers
nmap ; :Buffers<CR>
" Plugins
"" Installation with VimPlug
if has("win32")
call plug#begin('~/vimfiles/plugged')
else
call plug#begin('~/.vim/plugged')
endif
""" Basics
Plug 'tpope/vim-sensible'
Plug 'sheerun/vim-polyglot'
Plug 'flazz/vim-colorschemes'
""" General Functionality
Plug 'lifepillar/vim-mucomplete'
Plug 'scrooloose/syntastic'
Plug 'tpope/vim-commentary'
""" Particular Functionality
Plug 'vim-pandoc/vim-pandoc-syntax'
Plug 'godlygeek/tabular'
""" Command Line Fuzzy Finder - https://github.com/junegunn/fzf
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'
call plug#end()
"" Colors
"set termguicolors
colorscheme slate
"" Autocompletion
set completeopt=menuone,noinsert,noselect
set shortmess+=c " Turn off completion messages
inoremap <expr> <c-e> mucomplete#popup_exit("\<c-e>")
inoremap <expr> <c-y> mucomplete#popup_exit("\<c-y>")
inoremap <expr> <cr> mucomplete#popup_exit("\<cr>")
let g:mucomplete#enable_auto_at_startup = 1
"" Pandoc
augroup pandoc_syntax
au! BufNewFile,BufFilePre,BufRead *.md set filetype=markdown.pandoc
au! BufNewFile,BufFilePre,BufRead *.markdown set filetype=markdown.pandoc
augroup END
let g:pandoc#syntax#conceal#use = 0
let g:pandoc#syntax#codeblocks#embeds#langs = ['python', 'vim', 'make', 'bash=sh', 'html', 'css', 'scss', 'javascript']
" ----------------------------------------------------------------------------------------------------
" ----------------------------------------------------------------------------------------------------
" => Statusline
" Ideas from http://got-ravings.blogspot.com/2008/08/vim-pr0n-making-statuslines-that-own.html
set laststatus=2 " always show statusline
set statusline= " clear on reload
set statusline+=[%n] " buffer number
set statusline+=\ %f " filename
set statusline+=\ [%{strlen(&fenc)?&fenc:'none'}, " file encoding
set statusline+=\ %{&ff}] " file format
set statusline+=\ %y " filetype
set statusline+=\ %H\ %m\ %r\ %W " flags
set statusline+=%= " left/right separator
set statusline+=l:%l/%L " cursor line/total lines
set statusline+=\ c:%c, " cursor column
set statusline+=\ %P " percent through file
" ----------------------------------------------------------------------------------------------------
" -----------------------------------------------------------------------------------------------------
" => Keymaps: Doing more things at once
" -----------------------------------------------------------------------------------------------------
" -----------------------------------------------------------------------------------------------------
" ===> Text bubbling (http://vimcasts.org/episodes/bubbling-text/)
" Bubble single lines
nmap <C-k> ddkP
nmap <C-j> ddp
" Bubble multiple lines
vmap <C-k> xkP`[V`]
vmap <C-j> xp`[V`]
" -----------------------------------------------------------------------------------------------------
" -----------------------------------------------------------------------------------------------------
" ===> More sane movement keys
nnoremap j gj
nnoremap k gk
" -----------------------------------------------------------------------------------------------------
" -----------------------------------------------------------------------------------------------------
" ===> Spellcheck
" Horrible colors! I hate spellchecker's red highlight, so I changed it
" (http://stackoverflow.com/questions/6008921/how-do-i-change-the-highlight-style-in-vim-spellcheck)
" Vim Colors: (http://alvinalexander.com/linux/vi-vim-editor-color-scheme-syntax)
" -----------------------------------------------------------------------------------------------------
hi clear SpellBad
hi clear SpellCap
hi clear SpellErrors
hi clear SpellLocal
hi clear SpellRare
hi SpellBad cterm=underline,bold ctermfg=Red
hi SpellCap cterm=underline,bold ctermfg=Red
hi SpellErrors cterm=underline,bold ctermfg=Red
" -----------------------------------------------------------------------------------------------------
" ===> Spell check only certain file types https://robots.thoughtbot.com/vim-spell-checking
" turn off for files with no extension
autocmd BufRead,BufNewFile * setlocal nospell
" turn off for files with any extension
autocmd BufRead,BufNewFile *.* setlocal nospell
" turn on for markdown files
autocmd BufRead,BufNewFile *.md setlocal spell
autocmd BufRead,BufNewFile *.mkd setlocal spell
autocmd BufRead,BufNewFile *.markdown setlocal spell
" turn on for text files
autocmd BufRead,BufNewFile *.txt setlocal spell
" -----------------------------------------------------------------------------------------------------
" -----------------------------------------------------------------------------------------------------
" => Templates
" Doing special things with certain filetypes
" -----------------------------------------------------------------------------------------------------
" shell scripts (.sh) ------------------------------------------------
autocmd BufNewFile *.sh so $HOME/.vim/templates/sh
autocmd BufNewFile *.sh %s/FILE:.*/\='FILE: '.expand('%')/e
autocmd BufNewFile *.sh exe "g/AUTHOR:.*/s//AUTHOR: C Hawley"
autocmd BufNewFile *.sh exe "g/CREATED:.*/s//CREATED: " .strftime("%c")
autocmd BufWritePre,filewritepre *.sh execute "normal ma"
autocmd BufWritePre,filewritepre *.sh exe "g/REVISION:.*/s//REVISION: " .strftime("%c")
autocmd bufWritePost,filewritepost *.sh execute "normal `a"
" python scripts (.py) ------------------------------------------------
autocmd BufNewFile *.py so $HOME/.vim/templates/py
autocmd BufNewFile *.py %s/FILE:.*/\='FILE: '.expand('%')/e
autocmd BufNewFile *.py exe "g/AUTHOR:.*/s//AUTHOR: C Hawley"
autocmd BufNewFile *.py exe "g/CREATED:.*/s//CREATED: " .strftime("%c")
autocmd BufWritePre,filewritepre *.py execute "normal ma"
autocmd BufWritePre,filewritepre *.py exe "g/REVISION:.*/s//REVISION: " .strftime("%c")
autocmd bufWritePost,filewritepost *.py execute "normal `a"
" markdown documents (.md,*.mkd) -------------------------------------
autocmd BufNewFile *.md,*.mkd so $HOME/.vim/templates/md
autocmd BufNewFile *.md,*.mkd exe "g/Created:.*/s//Created: " .strftime("%c")
autocmd BufWritePre,filewritepre *.md,*.mkd execute "normal ma"
autocmd BufWritePre,filewritepre *.md,*.mkd exe "g/Updated:.*/s//Updated: " .strftime("%c")
autocmd bufWritePost,filewritepost *.md,*.mkd execute "normal `a"
" markdown documents (.markdown - jekyll blog) -----------------------
autocmd BufNewFile *.markdown so $HOME/.vim/templates/markdown
autocmd BufNewFile *.markdown exe "g/date:.*/s//date: " .strftime("%c")
autocmd BufWritePre,filewritepre *.markdown execute "normal ma"
autocmd BufWritePre,filewritepre *.markdown exe "g/Updated:.*/s//Updated: " .strftime("%c")
autocmd bufWritePost,filewritepost *.markdown execute "normal `a"