Skip to content

Instantly share code, notes, and snippets.

@michaelrinderle
Created June 22, 2020 05:11
Show Gist options
  • Save michaelrinderle/d1bb8f18c2414953fd825b59b79fca1d to your computer and use it in GitHub Desktop.
Save michaelrinderle/d1bb8f18c2414953fd825b59b79fca1d to your computer and use it in GitHub Desktop.
scriptencoding utf8
" system clipboard (requires +clipboard)
" Set clipboard^=unnamed,unnamedplus
" additional settings
set modeline " enable vim modelines
set hlsearch " highlight search items
set incsearch " searches are performed as you type
set number " enable line numbers
set confirm " ask confirmation like save before quit.
set wildmenu " Tab completion menu when using command mode
set expandtab " Tab key inserts spaces not tabs
set softtabstop=4 " spaces to enter for each tab
set shiftwidth=4 " amount of spaces for indentation
set shortmess+=aAcIws " Hide or shorten certain messages
set relativenumber
set clipboard=unnamedplus
let g:netrw_altv = 1
let g:netrw_liststyle = 3
let g:netrw_browse_split = 3
" ------ leader mapping ------
let g:mapleader = "<space>"
map <Leader> <Plug> e
" ------ command shortcuts ------
:command FZ FZF
:command EX Explore
:command PI PlugInstall
:command PC PlugClean
:command NT NERDTree
" ---- deoplete mappings -------
inoremap <expr> <C-j> pumvisible() ? "\<C-n>" : "\<C-j>"
inoremap <expr> <C-k> pumvisible() ? "\<C-p>" : "\<C-k>"map <Leader> <Plug>
" ------ nerd map ctrl + n mapping ------
nmap <C-n> :NERDTreeToggle<CR>
" ------ enable additional features ------https://stackoverflow.com/questions/1764263/what-is-the-leader-in-a-vimrc-file
let g:ycm_python_binary = 'python'
" -------- theme --------
set background=dark
" -------- limeline -------
set noshowmode
let g:lightline = {
\ 'colorscheme' : 'jellybeans',
\ 'active': {
\ 'left': [[ 'mode', 'paste'],
\ ['gitbranch', 'readonly', 'filename', 'modified']]
\ },
\ 'component_function': {
\ 'gitbranch': 'fugitive#head'
\ },
\ }
" ------- vim plug ---------
call plug#begin('~/.local/share/nvim/plugged')
Plug 'tpope/vim-surround'
Plug 'easymotion/vim-easymotion'
Plug 'https://github.com/ap/vim-buftabline.git'
Plug 'https://github.com/tpope/vim-surround'
Plug 'https://github.com/terryma/vim-multiple-cursors'
Plug 'https://github.com/junegunn/fzf.vim'
Plug 'https://github.com/w0rp/ale.git'
Plug 'https://github.com/kien/ctrlp.vim.git'
Plug 'https://github.com/junegunn/vim-github-dashboard.git'
Plug 'https://github.com/ctrlpvim/ctrlp.vim.git'
Plug 'https://github.com/airblade/vim-gitgutter.git'
Plug 'https://github.com/Valloric/YouCompleteMe.git'
Plug 'https://github.com/dag/vim-fish.git'
Plug 'https://github.com/mhinz/vim-signify.git'
Plug 'https://github.com/tpope/vim-eunuch.git'
Plug 'https://github.com/octol/vim-cpp-enhanced-highlight.git'
Plug 'https://github.com/bfrg/vim-cpp-modern.git'
Plug 'https://github.com/junegunn/limelight.vim.git'
Plug 'https://github.com/cocopon/iceberg.vim.git'
Plug 'https://github.com/itchyny/lightline.vim.git'
Plug 'https://github.com/tpope/vim-fugitive.git'

" On-demand loading
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
call plug#end()
" move from insert to normal mode
inoremap nn <esc>
" enable mouse
set mouse=a
if has('mouse_sgr')
" sgr mouse is better but not every term supports it
set ttymouse=sgr
endif
" syntax highlighting
syntax enable
set linebreak breakindent
" change cursor shape for different editing modes, neovim does this by default
if !has('nvim')
if exists('$TMUX')
let &t_SI = "\<Esc>Ptmux;\<Esc>\e[5 q\<Esc>\\"
let &t_SR = "\<Esc>Ptmux;\<Esc>\e[4 q\<Esc>\\"
let &t_EI = "\<Esc>Ptmux;\<Esc>\e[2 q\<Esc>\\"
else
let &t_SI = "\e[6 q"
let &t_SR = "\e[4 q"
let &t_EI = "\e[2 q"
endif
endif
" ------ commands ------
command! D Explore
command! R call <SID>ranger()map <Leader> <Plug>
command! Q call <SID>quitbuffer()
command! -nargs=1 B :call <SID>bufferselect("<args>")
command! W execute 'silent w !sudo tee % >/dev/null' | edit!
" ------ basic maps ------
" open ranger as a file chooser using the function below
nnoremap <leader>r :call <SID>ranger()<CR>
" match string to switch buffer
nnoremap <Leader>b :let b:buf = input('Match: ')<Bar>call <SID>bufferselect(b:buf)<CR>
" change windows with ctrl+(hjkl)
nnoremap <C-J> <C-W><C-J>
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>
" alt defaults
nnoremap 0 ^
nnoremap Y y$
nnoremap n nzzzv
nnoremap N Nzzzv
nnoremap <Tab> ==1j
" re-visual text after changing indent
vnoremap > >gv
vnoremap < <gv
" toggle line numbers, nn (no number)
nnoremap <silent> <Leader>nn :set number!
" gj/k but preserve numbered jumps ie: 12j or 45kmap <Leader> <Plug>
nmap <buffer><silent><expr>j v:count ? 'j' : 'gj'
nmap <buffer><silent><expr>k v:count ? 'k' : 'gk'
" open a terminal in $PWD
nnoremap <silent> <Leader>tt :terminal<CR>
" tab control
nnoremap <silent> <M-j> :tabmove -1<CR>
nnoremap <silent> <M-k> :tabmove +1<CR>
nnoremap <silent> <Leader>te :tabnew<CR>
nnoremap <silent> <Leader>tn :tabnext<CR>
nnoremap <silent> <Leader>tf :tabfirst<CR>
nnoremap <silent> <Leader>tp :tabprevious<CR>
" close current buffer and/or tab
nnoremap <silent> <Leader>q :B<CR>:silent tabclose<CR>gT
" open a new tab in the current directory with netrw
nnoremap <silent> <Leader>- :tabedit <C-R>=expand("%:p:h")<CR><CR>
" split the window vertically and horizontally
nnoremap _ <C-W>s<C-W><Down>
nnoremap <Bar> <C-W>v<C-W><Right>
" ------ autocmd ------
" Reload changes if file changed outside of vim requires autoread
augroup load_changed_file
autocmd!
autocmd FocusGained,BufEnter * if mode() !=? 'c' | checktime | endif
autocmd FileChangedShellPost * echo "Changes loaded from source file"
augroup END
" when quitting a file, save the cursor position
augroup save_cursor_position
autocmd!
autocmd BufReadPost * call setpos(".", getpos("'\""))
augroup END
" when not running in a console or a terminal that doesn't support 256 colors
" enable cursorline in the currently active window and disable it in inactive ones
if $DISPLAY !=? '' && &t_Co == 256
augroup cursorline
autocmd!
autocmd VimEnter,WinEnter,BufWinEnter * setlocal cursorline
autocmd WinLeave * setlocal nocursorline
augroup END
endif
map <Leader> <Plug>
" ------ adv maps ------
" strip trailing whitespace, ss (strip space)
nnoremap <silent> <Leader>ss
\ :let b:_p = getpos(".") <Bar>
\ let b:_s = (@/ != '') ? @/ : '' <Bar>
\ %s/\s\+$//e <Bar>
\ let @/ = b:_s <Bar>map <Leader> <Plug>
\ nohlsearch <Bar>
\ unlet b:_s <Bar>
\ call setpos('.', b:_p) <Bar>
\ unlet b:_p <CR>
" global replacemap <Leader> <Plug>
vnoremap <Leader>sw "hy
\ :let b:sub = input('global replacement: ') <Bar>
\ if b:sub !=? '' <Bar>
\ let b:rep = substitute(getreg('h'), '/', '\\/', 'g') <Bar>
\ execute '%s/'.b:rep."/".b:sub.'/g' <Bar>
\ unlet b:sub b:rep <Bar>
\ endif <CR>
nnoremap <Leader>sw
\ :let b:sub = input('global replacement: ') <Bar>
\ if b:sub !=? '' <Bar>
\ execute "%s/<C-r><C-w>/".b:sub.'/g' <Bar>
\ unlet b:sub <Bar>
\ endif <CR>
" prompt before each replace
vnoremap <Leader>cw "hy
\ :let b:sub = input('interactive replacement: ') <Bar>
\ if b:sub !=? '' <Bar>
\ let b:rep = substitute(getreg('h'), '/', '\\/', 'g') <Bar>
\ execute '%s/'.b:rep.'/'.b:sub.'/gc' <Bar>
\ unlet b:sub b:rep <Bar>
\ endif <CR>
nnoremap <Leader>cw
\ :let b:sub = input('interactive replacement: ') <Bar>
\ if b:sub !=? '' <Bar>
\ execute "%s/<C-r><C-w>/".b:sub.'/gc' <Bar>
\ unlet b:sub <Bar>
\ endif <CR>
" highlight long lines, ll (long lines)
let w:longlines = matchadd('ColorColumn', '\%'.&textwidth.'v', &textwidth)
nnoremap <silent> <Leader>ll
\ :if exists('w:longlines') <Bar>
\ silent! call matchdelete(w:longlines) <Bar>
\ echo 'Long line highlighting disabled'
\ <Bar> unlet w:longlines <Bar>
\ elseif &textwidth > 0 <Bar>
\ let w:longlines = matchadd('ColorColumn', '\%'.&textwidth.'v', &textwidth) <Bar>
\ echo 'Long line highlighting enabled'
\ <Bar> else <Bar>
\ let w:longlines = matchadd('ColorColumn', '\%80v', 81) <Bar>
\ echo 'Long line highlighting enabled'
\ <Bar> endif <CR>
" local keyword jump
nnoremap <Leader>fw
\ [I:let b:jump = input('Go To: ') <Bar>
\ if b:jump !=? '' <Bar>
\ execute "normal! ".b:jump."[\t" <Bar>
\ unlet b:jump <Bar>
\ endif <CR>
" quit the current buffer and switch to the next
" without this vim will leave you on an empty buffer after quiting the current
function! <SID>quitbuffer() abort
let l:bf = bufnr('%')
let l:pb = bufnr('#')
if buflisted(l:pb)
buffer #
else
bnext
endif
if bufnr('%') == l:bf
new
endif
if buflisted(l:bf)
execute('bdelete! ' . l:bf)
endif
endfunction
" switch active buffer based on pattern matching
" if more than one match is found then list the matches to choose from
function! <SID>bufferselect(pattern) abort
let l:bufcount = bufnr('$')
let l:currbufnr = 1
let l:nummatches = 0
let l:matchingbufnr = 0
" walk the buffer count
while l:currbufnr <= l:bufcount
if (bufexists(l:currbufnr))
let l:currbufname = bufname(l:currbufnr)
if (match(l:currbufname, a:pattern) > -1)
echo l:currbufnr.': '.bufname(l:currbufnr)
let l:nummatches += 1
let l:matchingbufnr = l:currbufnr
endif
endif
let l:currbufnr += 1
endwhile
" only one match
if (l:nummatches == 1)
execute ':buffer '.l:matchingbufnr
elseif (l:nummatches > 1)
" more than one match
let l:desiredbufnr = input('Enter buffer number: ')
if (strlen(l:desiredbufnr) != 0)
execute ':buffer '.l:desiredbufnr
endif
else
echoerr 'No matching buffers'
endif
endfunction
" open ranger as a file chooser
function! <SID>ranger()
let l:temp = tempname()
execute 'silent !xterm -e ranger --choosefiles='.shellescape(l:temp).' $PWD'
if !filereadable(temp)
redraw!
return
endif
let l:names = readfile(l:temp)
if empty(l:names)
redraw!
return
endif
execute 'edit '.fnameescape(l:names[0])
for l:name in l:names[1:]
execute 'argadd '.fnameescape(l:name)
endfor
redraw!
endfunction
nnoremap <C-Left> :tabprevious<CR>
nnoremap <C-Right> :tabnext<CR>
nnoremap <C-j> :tabprevious<CR>
nnoremap <C-k> :tabnext<CR>
" set color needs to bee
" at the end of file to work
colorscheme iceberg
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment