Skip to content

Instantly share code, notes, and snippets.

@binarymason
Created October 11, 2022 12:42
Show Gist options
  • Save binarymason/4e782cc9d0b3a0e912697f9525bac16c to your computer and use it in GitHub Desktop.
Save binarymason/4e782cc9d0b3a0e912697f9525bac16c to your computer and use it in GitHub Desktop.
set nocompatible
call plug#begin('~/.vim/plugged')
" Plug 'MarcWeber/vim-addon-mw-utils'
Plug 'ekalinin/Dockerfile.vim'
Plug 'airblade/vim-gitgutter' " Shows a git diff in the gutter (sign column) and stages/undoes hunks
Plug 'altercation/vim-colors-solarized'
Plug 'bronson/vim-trailing-whitespace' " Highlights trailing whitespace in red and provides :FixWhitespace to fix it
Plug 'christoomey/vim-tmux-navigator' " Seamless navigation between tmux panes and vim splits
Plug 'ctrlpvim/ctrlp.vim', " Fuzzy file, buffer, mru, tag, etc finder.
Plug 'ervandew/supertab' " Perform all your vim insert mode completions with Tab
Plug 'gioele/vim-autoswap' " Stop the swap file messages. Just switch to the correct window!
Plug 'jgdavey/vim-blockle', { 'for': 'ruby' } " Quickly toggle ruby blocks with Leader b
Plug 'jiangmiao/auto-pairs' " Insert or delete brackets, parens, quotes in pair
Plug 'junegunn/vim-easy-align', { 'for': ['ruby', 'python'] } " A Vim alignment plugin
" Plug 'MaxMEllon/vim-jsx-pretty', " React JSX syntax highlighting and indenting for vim.
Plug 'othree/html5.vim', { 'for': ['javascript', 'html'] } " HTML5 omnicomplete and syntax
Plug 'mxw/vim-jsx'
Plug 'pangloss/vim-javascript' " Vastly improved Javascript indentation and syntax support
Plug 'panozzaj/vim-autocorrect' " Correct common typos and misspellings as you type
Plug 'pbrisbin/vim-mkdir' " Automatically create any non-existent directories before writing the buffer.
Plug 'rking/ag.vim' " Vim plugin for the_silver_searcher, 'ag'
Plug 'scrooloose/nerdcommenter' " Vim plugin for intensely orgasmic commenting
Plug 'scrooloose/nerdtree' " A tree explorer plugin for vim.
Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'
Plug 'tpope/gem-ctags' " Automatic ctags generation on gem install
Plug 'tpope/rbenv-ctags' " Automatic ctags generation on gem install
Plug 'tpope/vim-bundler' " Lightweight support for Bundler
Plug 'tpope/vim-endwise' " Wisely add 'end' in ruby, endfunction/endif/more in vim script
Plug 'tpope/vim-eunuch' " helpers for UNIX
Plug 'tpope/vim-fugitive' " Git wrapper so awesome, it should be illegal
Plug 'tpope/vim-rails' " Ruby on Rails power tools
Plug 'tpope/vim-rbenv' " Tell vim to use correct ruby version
Plug 'tpope/vim-repeat' " enable repeating supported plugin maps with '.'
Plug 'tpope/vim-surround' " quoting/parenthesizing made simple
Plug 'tpope/vim-unimpaired' " Pairs of handy bracket mappings
Plug 'vim-airline/vim-airline' " lean & mean status/tabline for vim that's light as air
Plug 'vim-airline/vim-airline-themes' " A collection of themes for vim-airline
Plug 'vim-scripts/Highlight-UnMatched-Brackets'
Plug 'fatih/vim-go'
Plug 'Xuyuanp/nerdtree-git-plugin', { 'on': 'NERDTreeToggle' } " Show git status on NERDTree
Plug 'w0rp/ale' " Asynchronous lint engine
Plug 'skywind3000/asyncrun.vim'
Plug 'google/vim-jsonnet'
Plug 'hashivim/vim-terraform'
Plug 'Chiel92/vim-autoformat'
call plug#end()
" -----------------------------------------------------------------------------
" User Interface
" -----------------------------------------------------------------------------
filetype plugin indent on
syntax enable
" Use silent to squelch warnings when solarized is not installed.
"silent! colorscheme solarized
set background=dark
set ttyfast " faster redraw
set relativenumber " show relative numbers by default instead of line numbers
set showcmd " show command in bottom bar
set cursorline " highlight current line
set wildmenu " visual autocomplete for command menu
set showmatch " highlight matching [{()}]
set laststatus=2 " always show the status bar
set lazyredraw " Don't redraw screen when running macros.
set scrolloff=2 " Show at least 2 lines around cursor
set splitright " Vertical splits go on right
set splitbelow " Horizontal splits go below
set diffopt+=vertical " View diffs in vertical panes
" Highlight character in 81st column red instead of set colorcolumn
highlight ColorColumn ctermbg=red ctermfg=white
" Make vertical splits look less obtrusive
set fillchars+=vert:│ " Solid line instead of dashed
silent! highlight VertSplit ctermbg=bg ctermfg=darkgrey
" A slightly better version than vim-unimpaired's cob
" Changing background color removes vertsplit styling.
" Add back manually.
nnoremap cob :set background=<C-R>=&background == 'dark' ? 'light' : 'dark'<CR><CR>
\ :highlight VertSplit ctermbg=bg ctermfg=darkgrey<CR>
" Change cursor shape between insert and normal mode in iTerm2.app
let $NVIM_TUI_ENABLE_CURSOR_SHAPE=2
" let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum"
" let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum"
" if has("nvim")
" set termguicolors
" endif
" NERDTree
let NERDTreeMinimalUI=1 " remove the 'press ? for help'
let NERDTreeShowHidden=1 " show hidden files by default
let NERDTreeAutoDeleteBuffer=1 " auto remove deleted file from buffer
let NERDTreeIgnore=['npm.debug.log']
let g:NERDTreeWinSize=50
" Set ultisnips triggers
let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsJumpForwardTrigger="<tab>"
let g:UltiSnipsJumpBackwardTrigger="<s-tab>"
" NERDCommenter
let g:NERDSpaceDelims=1 " pad one space with comments
let g:NERDDefaultAlign='left' " align left instead of following indentation
let g:NERDCommentEmptyLines=1
let g:NERDTrimTrailingWhitespace=1 " trim whitespace on uncomment
" Airline config
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#show_buffers = 0
let g:airline_powerline_fonts=1
if !exists('g:airline_symbols')
let g:airline_symbols={}
endif
let g:airline_symbols.space="\ua0"
let g:airline_left_sep=''
let g:airline_right_sep=''
let g:airline_section_z=''
let g:airline#extensions#tabline#left_sep = ''
let g:airline#extensions#tabline#left_alt_sep = ''
let g:airline#extensions#tabline#right_sep = ''
let g:airline#extensions#tabline#right_alt_sep = ''
"
"
" " Disable tabline close button
let g:airline#extensions#tabline#show_close_button = 0
let g:airline#extensions#tabline#show_tab_type = 0
let g:airline#extensions#tabline#show_tab_nr = 0
let g:airline#extensions#tabline#buffer_min_count = 1
"
" " Just show the file name
let g:airline#extensions#tabline#fnamemod = ':t'
let g:airline#extensions#tabline#tabs_label = ''
let g:airline#extensions#tabline#show_splits = 0
let g:autoswap_detect_tmux=1 " Tell autoswap to switch to correct tmux window
let g:used_javascript_libs = 'jquery,underscore,backbone,react'
let g:jsx_ext_required = 0 " Allow JSX in normal JS files
" set wildignore+=*/tmp/*,*.so,*.swp,*.zip
" Persist CTRLP cache in ~/.cache/ctrlp
let g:ctrlp_cache_dir = $HOME . '/.cache/ctrlp'
let g:ctrlp_clear_cache_on_exit = 0
if executable('ag')
let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'
else
let g:ctrlp_user_command = ['.git/', 'git --git-dir=%s/.git ls-files -oc --exclude-standard']
endif
" Start interactive EasyAlign in visual mode (e.g. vipga)
xmap ga <Plug>(EasyAlign)
" Start interactive EasyAlign for a motion/text object (e.g. gaip)
nmap ga <Plug>(EasyAlign)
" -----------------------------------------------------------------------------
" Utilities
" -----------------------------------------------------------------------------
" Spaces and Tabs
set smartindent " new lines indent automatically
" set smarttab " change indent amount depending on context
set softtabstop=0 " number of spaces in tab when editing
set shiftwidth=2 " Calling >> or << is 2 spaces
set tabstop=2 " hardcode the default number of visual spaces per TAB
set shiftround " When at 3 spaces and I hit >>, go to 4, not 5.
set expandtab " tabs are spaces
" Similiar to bash completion
set wildmode=list:full
" Allow vim yank and delete to go to clipboard
" set clipboard=unnamed
set clipboard=unnamedplus
" Searching
set incsearch " search as characters are entered
set hlsearch " highlight matches
set ignorecase smartcase " ignore case by default but not for autocomplete
" -----------------------------------------------------------------------------
" Key Mappings
" -----------------------------------------------------------------------------
" Quicker window movement
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-h> <C-w>h
nnoremap <C-l> <C-w>l
" Execute last macro
nnoremap mm @@
" Always paste with indent
nnoremap p p=`]
" Quicker window replacement
nnoremap <C-w><Up> <C-w>K
nnoremap <C-w><Down> <C-w>J
nnoremap <C-w><Left> <C-w>H
nnoremap <C-w><Right> <C-w>L
" Center the cursor vertically when doing large scrolling
nnoremap <C-d> <C-d>zz
nnoremap <C-u> <C-u>zz
nnoremap <C-f> <C-f>zz
nnoremap <C-b> <C-b>zz
" move buffer to new tab
nnoremap <C-w>t <C-W>T
" move vertically by visual line
nnoremap j gj
nnoremap k gk
" move to beginning/end of line
nnoremap B ^
nnoremap E $
" $/^ doesn't do anything
nnoremap $ <nop>
nnoremap ^ <nop>
" Ctrl + s writes the file
nnoremap <C-s> :w<cr>
nnoremap <C-q> :q<cr>
" Highlight last inserted text
nnoremap gV `[v`]
" ; is aliased to :
nnoremap ; :
" Open NERDTree in the directory of the current file (or /home if no file is open)
nnoremap <C-n> :call NERDTreeToggleInCurDir()<cr>
" Yank all in buffer
nnoremap yab ggyG
" Delete all in buffer
nnoremap dab ggdG
nnoremap <leader>j 0v3e"jdi[]<Esc>"jPA()<Esc>ihttps://technekes.atlassian.net/browse/<Esc>"jp
" 0v3e"jdi[]"jPA()ihttps://technekes.atlassian.new/browse/"jp
"
" let jiramapping='0v3e"jdi[]"jPA()ihttps://technekes.atlassian.new/browse/"jp'
" vnoremap <leader>j :normal jiramapping
" Git grep current word
nnoremap <silent> <leader>gp yiw:Ggrep <c-r>"<cr>
" Git grep current selection
vnoremap <silent> <leader>gp y:Ggrep <c-r>"<cr>
" Don't use arrow keys in insert mode (don't do it in normal mode either!)
inoremap <Left> <C-o>:echoe 'Think Vim'<CR>
inoremap <Right> <C-o>:echoe 'Think Vim'<CR>
inoremap <Up> <C-o>:echoe 'Think Vim'<CR>
inoremap <Down> <C-o>:echoe 'Think Vim'<CR>
" jk is aliased to ESC
inoremap jk <esc>
" Create a newline while in insert mode
inoremap <C-o> <C-O>o
" Go to end of word in insert mode
inoremap <C-e> <esc>ea
inoremap <Leader><cr> <C-O>o
" Keep highlighted text selected after indenting
vnoremap > ><CR>gv
vnoremap < <<CR>gv
" -----------------------------------------------------------------------------
" Leader key mappings
" -----------------------------------------------------------------------------
let mapleader = "\<Space>"
nnoremap <Leader>w :w<cr>
nnoremap <Leader>q :q<cr>
nnoremap <Leader>Q :q!<cr>
nnoremap <Leader>wq :wq<cr>
" Leader Leader creates visual linewise
nnoremap <Leader><Leader> V
nnoremap <leader>ev :tabedit $MYVIMRC<cr>
nnoremap <leader>sv :source $MYVIMRC<cr>
nnoremap <Leader>t :tabnew<cr>
" Remove over 80 characters highlight
nnoremap <leader><esc> :call clearmatches()<cr>
" Edit Ruby Snippets
nnoremap <leader>ers :tabedit ~/.vim/UltiSnips/ruby.snippets<cr>
" View current file in browser and render markdown
nnoremap <leader>md :! cat % \| pandoc -f markdown_github \| sensible-browser<cr>
" Quicker window resizing
nnoremap <silent> <leader>= :exe "resize " . (winheight(0) * 3/2)<CR>
nnoremap <silent> <leader>- :exe "resize " . (winheight(0) * 2/3)<CR>
nnoremap <silent> <leader>0 :exe "vertical resize " . (winwidth(0) * 3/2)<CR>
nnoremap <silent> <leader>9 :exe "vertical resize " . (winwidth(0) * 2/3)<CR>
" Search via tag in project by comma f
nnoremap <leader>f :CtrlPTag<cr>
" List buffers
nnoremap <leader>l :ls<cr>
" Strip trailing whitespaces
nnoremap <leader>c :call <SID>StripTrailingWhitespaces()<cr>
" Change hashrocket style hashes to json style with surrounding space.
nnoremap <leader>rh :%s/:\([^ ]*\)\(\s*\)=>/ \1: /g<CR>:%s/\(\S\)\(}\)/\1 \2/g<CR>
" -----------------------------------------------------------------------------
" Functions
" -----------------------------------------------------------------------------
function! NERDTreeToggleInCurDir()
" If NERDTree is open in the current buffer
if (exists("t:NERDTreeBufName") && bufwinnr(t:NERDTreeBufName) != -1)
exe ":NERDTreeClose"
else
exe ":NERDTreeFind"
endif
endfunction
" This strips trailing whitespace at the end of files. It
" is called on buffer write in the autogroup above.
function! <SID>StripTrailingWhitespaces()
" save last search & cursor position
let _s=@/
let l = line(".")
let c = col(".")
%s/\s\+$//e
let @/=_s
call cursor(l, c)
endfunction
" -----------------------------------------------------------------------------
" Auto commands
" -----------------------------------------------------------------------------
" (Language specific settings)
augroup configgroup
" Clear any lingering autcmd options
autocmd!
" Strip trailing whitespace on write
" autocmd BufWritePre * :call <SID>StripTrailingWhitespaces()
autocmd BufEnter *.zsh-theme setlocal filetype=zsh
autocmd BufEnter Guardfile,.pryrc setlocal filetype=ruby
autocmd BufEnter *Dockerfile* setlocal filetype=dockerfile
autocmd BufEnter,FocusGained * checktime
" Make ?s and :s part of words
autocmd FileType ruby,eruby,yaml setlocal iskeyword+=?,:
" autocmd FileType go setlocal softtabstop=2 tabstop=10
" Use absolute line numbers or relative depending on mode
autocmd InsertEnter * :set number norelativenumber nohlsearch
autocmd InsertLeave * :set nonumber relativenumber
" autocmd BufEnter * retab
" automatically fix typos for markdown files
autocmd filetype markdown
\ :call AutoCorrect() |
\ :setlocal spell
" When editing a file, always jump to the last known cursor position.
" Don't do it when the position is invalid or when inside an event handler
" (happens when dropping a file on gvim).
autocmd BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "normal g`\"" |
\ endif
autocmd VimEnter,BufEnter,WinEnter * call matchadd('ColorColumn', '\%81v', 100)
augroup END
" -----------------------------------------------------------------------------
" Configurations
" -----------------------------------------------------------------------------
set shell=bash
let g:go_bin_path = "/home/m/go/bin"
let g:go_fmt_command = "goimports"
" Recursively add everything to path to use helpful file commands
set path+=client/**,lib/**,app/**
" Backup Settings
" Save your backup files to a less annoying place than the current directory.
" If you have .vim-backup in the current directory, it'll use that.
" Otherwise it saves it to ~/.vim/backup or .
if isdirectory($HOME . '/.vim/backup') == 0
:silent !mkdir -p ~/.vim/backup >/dev/null 2>&1
endif
set backupdir-=.
set backupdir+=.
set backupdir-=~/
set backupdir^=~/.vim/backup/
set backupdir^=./.vim-backup/
set backup
" Save your swap files to a less annoying place than the current directory.
" If you have .vim-swap in the current directory, it'll use that.
" Otherwise it saves it to ~/.vim/swap, ~/tmp or .
if isdirectory($HOME . '/.vim/swap') == 0
:silent !mkdir -p ~/.vim/swap >/dev/null 2>&1
endif
set directory=./.vim-swap//
set directory+=~/.vim/swap//
set directory+=~/tmp//
set directory+=.
" viminfo stores the the state of your previous editing session
set viminfo+=n~/.vim/viminfo
if exists("+undofile")
" undofile - This allows you to use undos after exiting and restarting
" This, like swap and backup files, uses .vim-undo first, then ~/.vim/undo
" :help undo-persistence
" This is only present in 7.3+
if isdirectory($HOME . '/.vim/undo') == 0
:silent !mkdir -p ~/.vim/undo > /dev/null 2>&1
endif
set undodir=./.vim-undo//
set undodir+=~/.vim/undo//
set undofile
endif
" Find tags in locations, priority is from left to right
set tags=.git/tags,tags
set suffixesadd+=.js,.jsx
" Auto reload file if changed outside of vim
set autoread
" Allow multiple buffers to open without saving
set hidden
" Enable matchit to extend % for html tags
runtime macros/matchit.vim
autocmd BufWritePost *.js AsyncRun -post=checktime ./node_modules/.bin/eslint --fix %
let g:ale_linters = {
\ 'javascript': ['eslint'],
\ 'python': ['pylint'],
\}
" Only run linters named in ale_linters settings.
let g:ale_linters_explicit = 1
au BufWrite *.py :Autoformat
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment