Automatically populate filename, creation date and modification date in shell header. Also add the ability to update header on old scripts
382 lines
15 KiB
VimL
382 lines
15 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=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=<your notes directory>
|
|
" before use
|
|
|
|
" Go to index of notes and set working directory to my notes
|
|
nnoremap <leader>ww :e $NOTES_DIR/Index.md<CR>:cd $NOTES_DIR<CR>
|
|
|
|
" <leader>[ 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 "<args>" $NOTES_DIR/**/*.md | copen
|
|
nnoremap <leader>[ :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 <textwidth> column
|
|
set nowrap " turn off word wrapping at <textwidth>
|
|
|
|
" 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-fugitive
|
|
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 surround
|
|
" I tried to do this from scratch, but it seems this is the best alternative
|
|
" https://github.com/tpope/vim-surround
|
|
Plug 'tpope/vim-surround'
|
|
|
|
" 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 <ge> 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
|
|
|
|
" <leader><leader> to turn off search highlight
|
|
nnoremap <leader><space> :nohls <enter>
|
|
|
|
" <leader>C to toggle row/column highlight
|
|
nnoremap <leader>C :set cursorline! cursorcolumn!<CR>
|
|
|
|
" ---------------------------------------------------------------------------------------------------------------------
|
|
" ==> Keymaps: Buffers & Panes
|
|
" BUFFERS with ctrl
|
|
" PANES with <leader>
|
|
" when possible
|
|
|
|
" <c-h/l> to navigate BUFFERS
|
|
nnoremap <c-h> :bp <enter>
|
|
nnoremap <c-l> :bn <enter>
|
|
|
|
" <c-b> to open FZF buffers
|
|
map <c-b> :Buffers<CR>
|
|
|
|
" <c-s> to save buffer
|
|
nnoremap <c-s> :w <enter>
|
|
|
|
" <c-q> to quit vim
|
|
nnoremap <c-q> :q <enter>
|
|
|
|
" <c-a> to abandon buffer
|
|
nnoremap <c-a> :bd! <enter>
|
|
|
|
" <c-c>c to close buffer
|
|
nnoremap <c-c> :bd <enter>
|
|
|
|
" <c-x> to bring up the copy buffer
|
|
noremap <c-x> "+
|
|
|
|
" <F5> to refresh buffer
|
|
nnoremap <F5> <c-r>:checktime <CR>
|
|
|
|
" <leader>h/j/k/l to navigate PANES
|
|
nnoremap <leader>h <c-w><c-h>
|
|
nnoremap <leader>l <c-w><c-l>
|
|
nnoremap <leader>j <c-w><c-j>
|
|
nnoremap <leader>k <c-w><c-k>
|
|
|
|
" <leader>c to close pane
|
|
nnoremap <leader>c <c-w>q
|
|
|
|
" ---------------------------------------------------------------------------------------------------------------------
|
|
" ==> Keymaps
|
|
|
|
" <leader><leader> to open FZF files
|
|
map <leader><leader> :Files<CR>
|
|
|
|
" <c-r> to open registers
|
|
map <c-r> :registers<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: Movement keys
|
|
|
|
" Navigate according to displayed lines, not physical lines
|
|
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>
|
|
|
|
" ---------------------------------------------------------------------------------------------------------------------
|
|
" ==> Keymaps: Autoclosing
|
|
" Autoclose brackets, parens...etc
|
|
" from: https://stackoverflow.com/a/34992101
|
|
"inoremap " ""<left>
|
|
"inoremap ' ''<left>
|
|
"inoremap ( ()<left>
|
|
"inoremap [ []<left>
|
|
"inoremap { {}<left>
|
|
"inoremap {<CR> {<CR>}<ESC>O
|
|
"inoremap {;<CR> {<CR>};<ESC>O
|
|
|
|
" ---------------------------------------------------------------------------------------------------------------------
|
|
" ---------------------------------------------------------------------------------------------------------------------
|
|
" ==> Spellcheck
|
|
|
|
" auto-complete spelling suggestions with <ctrl-p>
|
|
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 <F10>
|
|
nnoremap <F10> :setlocal spell! spelllang=en_us<CR>
|
|
|
|
" ==> 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/filename/\=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("%Y-%m-%d")
|
|
autocmd BufNewFile *.sh exe "normal Go"
|
|
autocmd BufWritePre,filewritepre *.sh execute "normal ma"
|
|
autocmd BufWritePre,filewritepre *.sh exe "g/UPDATED:.*/s//UPDATED: " .strftime("%Y-%m-%d %H:%M")
|
|
autocmd bufWritePost,filewritepost *.sh execute "normal `a"
|
|
|
|
" ---------------------------------------------------------------------------------------------------------------------
|
|
" ==> 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
|
|
|
|
" section shell script header
|
|
nnoremap ,sh :0read $HOME/.vim/templates/sh<CR> <bar> :1<CR>dd <bar> :%s/filename/\=expand('%:t')/g<CR>
|
|
|
|
" section readinglist header
|
|
nnoremap ,rl :0read $HOME/.vim/templates/readinglist<CR> <bar> :1<CR>dd $
|
|
|
|
" section markdown file header
|
|
nnoremap ,md :0read $HOME/.vim/templates/md<CR> <bar> :1<CR>dd <bar> :4%s/filename/\=expand('%:t:r')/g<CR>
|
|
|
|
" ---------------------------------------------------------------------------------------------------------------------
|
|
" ==> 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
|
|
|
|
|