Files
dotfiles-vim/.vimrc

274 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 ctermbg=darkblue ctermfg=white gui=none
" 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>
" ---------------------------------------------------------------------------------------------------------------------
" ==> 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>
" ---------------------------------------------------------------------------------------------------------------------
" ==> Toggle row/column cursor
"
nnoremap <Leader>c :set cursorline! cursorcolumn!<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
" ---------------------------------------------------------------------------------------------------------------------
" ==> 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 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