Created
June 22, 2020 05:11
-
-
Save michaelrinderle/d1bb8f18c2414953fd825b59b79fca1d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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