Files
dotfiles-vim/.vimrc
chawley (chawley) 79c82e61f8 Modified .vimrc and md template to match new markdown format
I started using Visual Studio Code for markdown notes and I'm trying to
keep the markdown files as agnostic as possible.  Vim will now match the
frontmatter style of VSC and (to an extent) Notable
2019-10-09 16:36:13 -04:00

277 lines
11 KiB
VimL

" ---------------------------------------------------------------------------------------------------------------------
" ==> .vimrc
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 belloff=all " no sound/flash on errors
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
set term=xterm-256color " LOTS of colors
set path+=** " Search Globally
set wildmenu
autocmd! bufwritepost .vimrc source ~/.vimrc " When vimrc is edited, reload it
" Turn line numbers on/off for active/inactive buffers
augroup BgHighlight
autocmd!
autocmd WinEnter * set number
autocmd WinEnter * set relativenumber
autocmd WinLeave * set nonumber
autocmd WinLeave * set norelativenumber
augroup end
syntax enable
filetype plugin on
" ---------------------------------------------------------------------------------------------------------------------
" ==> From Vim Zero: https://www.oliversherouse.com/2017/08/21/vim_zero.html
" General
let mapleader = ','
set hidden " Allow background buffers without saving
set splitright " Split to right by default
" Text Wrapping
set textwidth=120
set colorcolumn= " disable color column
set nowrap
" Search and Substitute
set gdefault " use global flag by default in s: commands
set hlsearch " highlight searches
set ignorecase " ignore case in searches
set smartcase " don't ignore capitals in searches
" Tabs
set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
" ---------------------------------------------------------------------------------------------------------------------
" ==> Plugins
"" Installation with VimPlug
if has("win32")
call plug#begin('~/vimfiles/plugged')
else
call plug#begin('~/.vim/plugged')
endif
""" Basics
" ...one step above 'nocompatible' mode: a universal set of defaults that (hopefully) everyone can agree on.
Plug 'tpope/vim-sensible'
" Syntax highlights for multiple languages
Plug 'sheerun/vim-polyglot'
" Syntax highlights for markdown
Plug 'tpope/vim-markdown'
" one stop shop for vim color schemes.
Plug 'flazz/vim-colorschemes'
" Command Line Fuzzy Finder - https://github.com/junegunn/fzf
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'
" fugitive.vim for git
Plug 'tpope/vim-fugitive'
call plug#end()
" ---------------------------------------------------------------------------------------------------------------------
" ==> Colors
"
"set termguicolors
"colorscheme slate
"colorscheme marklar
"colorscheme automation
colorscheme advantage
highlight colorcolumn ctermbg=darkgray guibg=darkgray
highlight VertSplit ctermbg=black guibg=black ctermfg=darkgray guifg=darkgray
highlight cursorcolumn cterm=NONE ctermbg=darkblue ctermfg=white guibg=darkred guifg=white
highlight visual cterm=NONE ctermbg=darkred ctermfg=white guibg=darkred guifg=white
" In split windows - active buffer status bar is yellow, inactive is black
hi statuslinenc ctermbg=gray ctermfg=black
hi statusline ctermbg=black ctermfg=green
" ---------------------------------------------------------------------------------------------------------------------
" => 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+=[\ b%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
" turn off search hilight
nnoremap <leader><space> :nohls <enter>
" toggle row/column cursor
nnoremap <Leader>c :set cursorline! cursorcolumn!<CR>
" ---------------------------------------------------------------------------------------------------------------------
" ==> Keymaps: Buffers
" <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 "+
" <F5> to refresh buffer
nnoremap <F5> <C-R>:checktime <CR>
" ---------------------------------------------------------------------------------------------------------------------
" ==> Keymaps: With ripgrep and FZF
" <leader> p to open files
map <Leader>p :Files<CR>
" search buffers
nmap ; :Buffers<CR>
" ---------------------------------------------------------------------------------------------------------------------
" ==> Keymaps: 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`]
" ---------------------------------------------------------------------------------------------------------------------
" ==> Keymaps: More sane movement keys
nnoremap j gj
nnoremap k gk
" ---------------------------------------------------------------------------------------------------------------------
" ==> Keymaps: Date and Time stamps
imap <F2> <C-R>=strftime("%Y-%m-%d %H:%M:%S")<CR>
imap <F3> <C-R>=strftime("%Y-%m-%d %a")<CR>
imap <F4> <C-R>=strftime("%H:%M")<CR>
" ---------------------------------------------------------------------------------------------------------------------
" ==> 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)
" Toggle spell check with F10
nnoremap <F10> :setlocal spell! spelllang=en_us<CR>
set spell spelllang=en_us
" Save custom dictionary in nextcloud so it's available on all machines
set spellfile=/home/chawley/nextcloud-overlook/notes/system/en.utf-8.add
hi clear SpellBad
hi clear SpellCap
hi clear SpellErrors
hi clear SpellLocal
hi clear SpellRare
hi SpellBad cterm=underline ctermbg=black ctermfg=red
hi SpellCap cterm=underline ctermbg=black ctermfg=red
" ---------------------------------------------------------------------------------------------------------------------
" ==> Spellcheck: 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
" turn on for text files
autocmd BufRead,BufNewFile *.txt setlocal spell
" ---------------------------------------------------------------------------------------------------------------------
" ==> Snippets
" Pasting pre-made things
" section banner
nnoremap ,ban :-1read $HOME/.vim/templates/banner<CR>jA
" section begin/end
nnoremap ,begend :-1read $HOME/.vim/templates/begend<CR>jA
" ---------------------------------------------------------------------------------------------------------------------
" ==> Templates
" Doing special things with certain filetypes
" ---------------------------------------------------------------------------------------------------------------------
" ==> Templates: 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"
" ---------------------------------------------------------------------------------------------------------------------
" ==> Templates: 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"
" ---------------------------------------------------------------------------------------------------------------------
" ==> Templates: markdown documents (.md, .mkd)
autocmd BufNewFile *.md,*.mkd so $HOME/.vim/templates/md
autocmd BufNewFile *.md,*.mkd %s/title:.*/\='title: '.expand('%:r')/e
autocmd BufNewFile *.md,*.mkd %s/\# Title.*/\='# '.expand('%:r')/e
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"
" ---------------------------------------------------------------------------------------------------------------------
" ==> netrw - NERDtree like setup (https://shapeshed.com/vim-netrw/)
let g:netrw_banner = 0
let g:netrw_liststyle = 3
let g:netrw_browse_split = 4
let g:netrw_altv = 1
let g:netrw_winsize = 25
" ---------------------------------------------------------------------------------------------------------------------
" ==> yaml stuff (https://lornajane.net/posts/2018/vim-settings-for-working-with-yaml)
"
autocmd BufNewFile,BufReadPost *.{yaml,yml} set filetype=yaml
autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab