" --------------------------------------------------------------------------------------------------------------------- " ==> .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 " Enable Omnicomplete features set omnifunc=syntaxcomplete#Complete " Personal Notes settings " export NOTES_DIR= " before use " Go to index of notes and set working directory to my notes nnoremap ww :e $NOTES_DIR/Index.md:cd $NOTES_DIR " [ to grep inside Notes files " I got the idea from here [step 6: search contents of your notes](https://www.edwinwenink.xyz/posts/42-vim_notetaking/#step-6-search-contents-of-your-notes) " but I'm not sold on the idea yet. command! -nargs=1 Ngrep vimgrep "" $NOTES_DIR/**/*.md | copen nnoremap [ :Ngrep " --------------------------------------------------------------------------------------------------------------------- " ==> 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' " 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' " Vim Spellsync " Magically rebuild Vim spell files if word lists are modified outside of Vim " https://github.com/micarmst/vim-spellsync Plug 'micarmst/vim-spellsync' call plug#end() " --------------------------------------------------------------------------------------------------------------------- " ==> Plugin Options " Options and overrides for installed plugins " Vim Markdown " Markdown syntax highlighting for specified languages let g:markdown_fenced_languages = ['html', 'python', 'ini', 'vim', 'bash', 'yaml'] " Set default conceallevel to hide links and some formatting set conceallevel=0 " 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 " ALE "let b:ale_linters = ['markdownlint', 'vale'] "let b:ale_fixers = ['prettier'] " --------------------------------------------------------------------------------------------------------------------- " ==> Colors " Term GUI Colors " Testing different colorschemes " Only the last uncommented colorscheme will be used "colorscheme slate "colorscheme marklar colorscheme automation "colorscheme advantage hi cursorcolumn cterm=NONE ctermbg=black ctermfg=white hi visual cterm=NONE ctermbg=darkyellow ctermfg=white set fillchars=vert:│,fold:┈,diff:┈ " In split windows - active buffer status bar is green, inactive is yellow hi StatusLine ctermfg=white ctermbg=darkgreen cterm=bold hi StatusLineNC ctermfg=white ctermbg=darkyellow cterm=none " --------------------------------------------------------------------------------------------------------------------- " => 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 " BUFFERS with ctrl " PANES with " when possible " to navigate BUFFERS nnoremap :bp nnoremap :bn " to open FZF buffers map :Buffers " to save buffer nnoremap :w " to quit vim nnoremap :q " to abandon buffer nnoremap :bd! " c to close buffer nnoremap :bd " to bring up the copy buffer noremap "+ " to refresh buffer nnoremap :checktime " h/j/k/l to navigate PANES nnoremap h nnoremap l nnoremap j nnoremap k " c to close pane nnoremap c q " --------------------------------------------------------------------------------------------------------------------- " ==> Keymaps " to open FZF files map :Files " to open registers map :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") " --------------------------------------------------------------------------------------------------------------------- " ==> Keymaps: Autoclosing " Autoclose brackets, parens...etc " from: https://stackoverflow.com/a/34992101 inoremap " "" inoremap ' '' inoremap ( () inoremap [ [] inoremap { {} inoremap { {}O inoremap {; {};O " --------------------------------------------------------------------------------------------------------------------- " --------------------------------------------------------------------------------------------------------------------- " ==> Spellcheck " auto-complete spelling suggestions with set complete+=kspell autocmd FileType markdown setlocal complete+=kspell autocmd FileType text setlocal complete+=kspell autocmd FileType gitcommit setlocal complete+=kspell " Toggle spell check highlights with nnoremap :setlocal spell! spelllang=en_us " ==> 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 readinglist header nnoremap ,rl :0read $HOME/.vim/templates/readinglist :1dd $ " section markdown file header nnoremap ,md :0read $HOME/.vim/templates/md :1dd :%s/title/\=expand('%:t:r')/g " --------------------------------------------------------------------------------------------------------------------- " ==> 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