" --------------------------------------------------------------------------------------------------------------------- " ==> .vimrc set nocompatible " be iMproved, required set number " turn on line numbers set relativenumber " lines are numbered relative to current line set scrolloff=10 " 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 " Native Markdown syntax highlighting for specified languages let g:markdown_fenced_languages = ['html', 'python', 'sh', 'vim', 'yaml'] " Open my personal helpfile nmap h :e $HOME/.vim/vim-keys-help.md " --------------------------------------------------------------------------------------------------------------------- " ==> 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 set formatoptions-=ro " Turn off autoinsert of comment char on newline " Text Wrapping set textwidth=120 " Set textwidth set colorcolumn= " disable colorzing column set nowrap " turn off word wrapping at " 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 with VimPlug " A minimalist Vim plugin manager " https://github.com/junegunn/vim-plug if has("win32") call plug#begin('~/vimfiles/plugged') else call plug#begin('~/.vim/plugged') endif " Think of sensible.vim as one step above 'nocompatible' mode: a universal set of defaults that (hopefully) everyone can agree on " https://github.com/tpope/vim-sensible Plug 'tpope/vim-sensible' " One stop shop for vim colorschemes " https://github.com/flazz/vim-colorschemes 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 is the premier Vim plugin for Git. Or maybe it's the premier Git plugin for Vim? Either way, " it's so awesome, it should be illegal. That's why it's called Fugitive " https://github.com/tpope/vim-fugitivefugitive.vim for git Plug 'tpope/vim-fugitive' " ALE displays warnings and errors in files being edited before being saved back to the filesystem " https://github.com/dense-analysis/ale Plug 'dense-analysis/ale' " VimWiki - VimWiki is a personal wiki for Vim " [VimWiki](https://mkaz.blog/working-with-vim/vimwiki/) " Plug 'vimwiki/vimwiki' " Removed 2024-02-22 - might not be using this after all " Vim Markdown " Suggestions from [Writing Markdown in Vim](https://codeinthehole.com/tips/writing-markdown-in-vim/) " [Vim Markdown](https://github.com/preservim/vim-markdown) Plug 'godlygeek/tabular' Plug 'preservim/vim-markdown' call plug#end() " --------------------------------------------------------------------------------------------------------------------- " ==> Plugin Options " Options and overrides for installed plugins " Vim Markdown " Set default conceallevel to hide links and some formatting set conceallevel=2 " strikethrough let g:vim_markdown_strikethrough = 1 " follow anchors - allow to follow anchors just like links let g:vim_markdown_follow_anchor = 1 " multi-line bullets in markdown " [Reference](https://vimdoc.sourceforge.net/htmldoc/change.html#fo-table) " j - remove a comment leader when joining lines. " l - long lines are not broken in insert mode " n - Recognize numbered lists " r - Continue comments when pressing Enter " t - autowrap lines using text width value autocmd FileType markdown set formatoptions=jlnrt " Open folds by default au BufWinEnter * normal zR " --------------------------------------------------------------------------------------------------------------------- " ==> Colors " Term GUI Colors " Testing different colorschemes " Only the last uncommented colorscheme will be used "colorscheme slate "colorscheme marklar colorscheme automation "colorscheme advantage "highlight colorcolumn ctermbg=darkyellow guibg=darkyellow "highlight VertSplit ctermbg=black guibg=black ctermfg=darkgray guifg=darkgray highlight cursorcolumn cterm=NONE ctermbg=black 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=yellow 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: Highlights " to turn off search highlight nnoremap :nohls " C to toggle row/column highlight nnoremap C :set cursorline! cursorcolumn! " --------------------------------------------------------------------------------------------------------------------- " ==> Keymaps: Buffers & Panes " H to move to previous BUFFER nnoremap :bp " L to move to next BUFFER nnoremap :bn " J to move to lower PANE nnoremap " K to move to upper PANE nnoremap " b to open FZF buffers map b :Buffers " s to save buffer nnoremap s :w " q to quit vim nnoremap q :q " c to close buffer nnoremap c :bd " a to abandon buffer nnoremap a :bd! " x to bring up the copy buffer noremap x "+ " to refresh buffer nnoremap :checktime " --------------------------------------------------------------------------------------------------------------------- " ==> Keymaps " f to open FZF files map f :Files map :Files " r to open registers map r :registers " --------------------------------------------------------------------------------------------------------------------- " ==> Keymaps: Text bubbling (http://vimcasts.org/episodes/bubbling-text/) " Bubble single lines nmap ddkP nmap ddp " Bubble multiple lines vmap xkP`[V`] vmap xp`[V`] " --------------------------------------------------------------------------------------------------------------------- " ==> Keymaps: Movement keys " Navigate according to displayed lines, not physical lines nnoremap j gj nnoremap k gk " --------------------------------------------------------------------------------------------------------------------- " ==> Keymaps: Date and Time stamps imap =strftime("%Y-%m-%d %H:%M:%S") imap =strftime("%Y-%m-%d %a") imap =strftime("%H:%M") " --------------------------------------------------------------------------------------------------------------------- " --------------------------------------------------------------------------------------------------------------------- " ==> Spellcheck " Toggle spell check highlights with nnoremap :setlocal spell! spelllang=en_us " auto-complete spelling suggestions with set complete+=kspell " ==> 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 " ==> Spellcheck Colors " I hate spellcheck's default colors " (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 ctermbg=black ctermfg=red hi SpellCap cterm=underline ctermbg=black ctermfg=red " --------------------------------------------------------------------------------------------------------------------- " ==> Templates: markdown documents (.md) autocmd BufNewFile *.md so $HOME/.vim/templates/md autocmd BufNewFile *.md %s/title/\=expand('%:t:r')/g autocmd BufNewFile *.md exe "g/^- Created :.*/s//- Created : " .strftime("%Y-%m-%d") autocmd BufNewFile *.md exe "normal Go" autocmd BufWritePre,filewritepre *.md execute "normal ma" autocmd BufWritePre,filewritepre *.md exe "g/^- Updated :.*/s//- Updated : " .strftime("%Y-%m-%d %H:%M") autocmd bufWritePost,filewritepost *.md execute "normal `a" " --------------------------------------------------------------------------------------------------------------------- " ==> Templates: shell scripts (.sh) autocmd BufNewFile *.sh so $HOME/.vim/templates/sh autocmd BufNewFile *.sh %s/FILE:.*/\='FILE: '.expand('%:t:r')/e autocmd BufNewFile *.sh exe "g/CREATED:.*/s//CREATED: " .strftime("%c") autocmd BufNewFile *.sh exe "normal Go" autocmd BufWritePre,filewritepre *.sh execute "normal ma" autocmd BufWritePre,filewritepre *.sh exe "g/UPDATED:.*/s//UPDATED: " .strftime("%c") autocmd bufWritePost,filewritepost *.sh execute "normal `a" " --------------------------------------------------------------------------------------------------------------------- " ==> Snippets " Pasting pre-made things " section banner nnoremap ,ban :-1read $HOME/.vim/templates/bannerjA " section begin/end nnoremap ,begend :-1read $HOME/.vim/templates/begendjA " section shell script header "nnoremap ,sh :-1read $HOME/.vim/templates/shjA " section markdown file header nnoremap ,md :-1read $HOME/.vim/templates/mdjA " --------------------------------------------------------------------------------------------------------------------- " ==> NetrwTreeListing readonly fix (https://vi.stackexchange.com/a/13012) " Per default, netrw leaves unmodified buffers open. This autocommand " deletes netrw's buffer once it's hidden (using ':q', for example) autocmd FileType netrw setl bufhidden=delete " --------------------------------------------------------------------------------------------------------------------- " ==> 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 " --------------------------------------------------------------------------------------------------------------------- " ==> VimWiki " Use MarkDown " Default directory "let g:vimwiki_list = [{'path': '$HOME/repos/thevimwiki/', 'syntax': 'markdown', 'ext': '.md'}] "let g:vimwiki_global_ext = 0 "let g:vimwiki_autowriteall = 1 "au FileType vimwiki setlocal shiftwidth=6 tabstop=6 noexpandtab