Last active
June 1, 2022 16:33
-
-
Save KyleFontenot/eb02222055be8402152abe681fc89814 to your computer and use it in GitHub Desktop.
My Nvim configuration
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
" | |
" | |
" ,---,. | |
" ,' .' \ ,--, | |
",---.' .' | ,---. ,--.'| ,---, | |
"| | |: | ' ,'\ ,----._,. ,----._,. | |, ,-+-. / | | |
": : : / / / | / / ' / / / ' / `--'_ ,--.'|' | | |
": | ; . ; ,. : | : | | : | ,' ,'| | | ,"' | | |
"| : \ ' | |: : | | .\ . | | .\ . ' | | | | / | | | |
"| | . | ' | .; : . ; '; | . ; '; | | | : | | | | | | |
"' : '; | | : | ' . . | ' . . | ' : |__ | | | |/ | |
"| | | ; \ \ / `---`-'| | `---`-'| | | | '.'| | | |--' | |
"| : / `----' .'__/\_: | .'__/\_: | ; : ; | |/ | |
"| | ,' | : : | : : | , / '---' | |
"`----' \ \ / \ \ / ---`-' | |
" `--`-' `--`-' | |
" Kyle's nvim configuration | |
" Set this init.vim file into ~/.config/nvim/ | |
" Search 'boggin' or 'mappings' for keybind associations | |
" ---------------------------- | |
let mapleader=" " | |
set clipboard=unnamedplus | |
set number relativenumber | |
set ruler | |
set cursorline | |
set splitbelow splitright | |
set nuw=5 | |
set wrapmargin=4 | |
set wm=4 | |
set linebreak | |
set scrolloff=8 | |
"***************************************************************************** | |
"" Vim-Plug core | |
"***************************************************************************** | |
let vimplug_exists=expand('~/.config/nvim/autoload/plug.vim') | |
if has('win32')&&!has('win64') | |
let curl_exists=expand('C:\Windows\Sysnative\curl.exe') | |
else | |
let curl_exists=expand('curl') | |
endif | |
if !filereadable(vimplug_exists) | |
if !executable(curl_exists) | |
echoerr "You have to install curl or first install vim-plug yourself!" | |
execute "q!" | |
endif | |
echo "Installing Vim-Plug..." | |
echo "" | |
silent exec "!"curl_exists" -fLo " . shellescape(vimplug_exists) . " --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim" | |
let g:not_finish_vimplug = "yes" | |
autocmd VimEnter * PlugInstall | |
endif | |
" Required: | |
call plug#begin(expand('~/.config/nvim/plugged')) | |
"***************************************************************************** | |
"" Plug install packages | |
"***************************************************************************** | |
Plug 'scrooloose/nerdtree' | |
Plug 'https://github.com/junegunn/vim-github-dashboard.git' | |
Plug 'jistr/vim-nerdtree-tabs' | |
Plug 'easymotion/vim-easymotion' | |
Plug 'haya14busa/incsearch.vim' | |
Plug 'haya14busa/incsearch-easymotion.vim' | |
Plug 'tpope/vim-commentary' | |
Plug 'vim-airline/vim-airline' | |
Plug 'vim-airline/vim-airline-themes' | |
Plug 'airblade/vim-gitgutter' | |
Plug 'vim-scripts/grep.vim' | |
Plug 'tpope/vim-surround' | |
Plug 'vim-scripts/CSApprox' | |
Plug 'Raimondi/delimitMate' | |
Plug 'majutsushi/tagbar' | |
Plug 'dense-analysis/ale' | |
Plug 'maxmellon/vim-jsx-pretty' | |
Plug 'mxw/vim-jsx' | |
Plug 'Yggdroot/indentLine' | |
Plug 'editor-bootstrap/vim-bootstrap-updater' | |
Plug 'tpope/vim-rhubarb' " required by fugitive to :Gbrowse | |
Plug 'sonph/onehalf', { 'rtp': 'vim' } | |
Plug 'nathanaelkane/vim-indent-guides' | |
Plug 'joshdick/onedark.vim' | |
Plug 'rajasegar/vim-astro', {'branch': 'main'} | |
Plug 'svermeulen/vim-cutlass' | |
Plug 'tpope/vim-fugitive' | |
Plug 'kshenoy/vim-signature' | |
if isdirectory('/usr/local/opt/fzf') | |
Plug '/usr/local/opt/fzf' | Plug 'junegunn/fzf.vim' | |
else | |
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --bin' } | |
Plug 'junegunn/fzf.vim' | |
endif | |
let g:make = 'gmake' | |
if exists('make') | |
let g:make = 'make' | |
endif | |
Plug 'Shougo/vimproc.vim', {'do': g:make} | |
"" Vim-Session | |
Plug 'xolox/vim-misc' | |
Plug 'xolox/vim-session' | |
"" Snippets | |
Plug 'SirVer/ultisnips' | |
Plug 'honza/vim-snippets' | |
"***************************************************************************** | |
"" Custom bundles | |
"***************************************************************************** | |
"" HTML Bundle | |
Plug 'hail2u/vim-css3-syntax' | |
Plug 'gko/vim-coloresque' | |
Plug 'tpope/vim-haml' | |
Plug 'mattn/emmet-vim' | |
"" Javascript Bundle | |
Plug 'jelera/vim-javascript-syntax' | |
" typescript | |
Plug 'leafgarland/typescript-vim' | |
Plug 'HerringtonDarkholme/yats.vim' | |
" simple-guifont | |
Plug 'awvalenti/vim-simple-guifont' | |
silent! call simple_guifont#Set(\['Fira Code', 'JetBrains Mono', 'Hack'], 'Menlo', 16) | |
"***************************************************************************** | |
"***************************************************************************** | |
"" Include user's extra bundle | |
if filereadable(expand("~/.config/nvim/local_bundles.vim")) | |
source ~/.config/nvim/local_bundles.vim | |
endif | |
call plug#end() | |
" Required: | |
filetype plugin indent on | |
"***************************************************************************** | |
"" Basic Setup | |
"*****************************************************************************" | |
"" Encoding | |
set encoding=utf-8 | |
set fileencoding=utf-8 | |
set fileencodings=utf-8 | |
set ttyfast | |
"" Fix backspace indent | |
set backspace=indent,eol,start | |
"" Tabs. May be overridden by autocmd rules | |
set tabstop=2 | |
set softtabstop=0 | |
set shiftwidth=2 | |
set expandtab | |
"" Enable hidden buffers | |
set hidden | |
set ignorecase | |
set smartcase | |
set autoindent | |
"" Searching | |
set hlsearch | |
set incsearch | |
set ignorecase | |
set smartcase | |
set fileformats=unix,dos,mac | |
if exists('$SHELL') | |
set shell=$SHELL | |
else | |
set shell=/bin/sh | |
endif | |
" session management | |
let g:session_directory = "~/.config/nvim/session" | |
let g:session_autoload = "no" | |
let g:session_autosave = "no" | |
let g:session_command_aliases = 1 | |
"***************************************************************************** | |
"" Visual Settings | |
"***************************************************************************** | |
syntax on | |
set ruler | |
set number | |
let no_buffers_menu=1 | |
set t_Co=256 | |
set cursorline | |
set cursorcolumn | |
syntax on | |
let g:airline_theme='onedark' | |
colorscheme onedark | |
hi Normal guibg=NONE ctermbg=NONE ctermfg=253 | |
set mousemodel=popup | |
set t_Co=256 | |
set guioptions=egmrti | |
" set gfn=Monospace\ 16 | |
set gfn=Fira\ Code\ 13 | |
" if has("gui_running") | |
" if has("gui_mac") || has("gui_macvim") | |
" set guifont=Menlo:h12 | |
" set transparency=7 | |
" endif | |
" else | |
if has("gui_running") | |
if has("gui_gtk2") | |
set guifont=Fira\ Code\ 13 | |
elseif has("gui_gtk3") | |
set guifont=Fira\ Code\ 13 | |
elseif has("x11") | |
" Also for GTK 1 | |
set guifont=*-lucidatypewriter-medium-r-normal-*-*-180-*-*-m-*-* | |
elseif has("gui_win32") | |
set guifont=Luxi_Mono:h12:cANSI | |
elseif has("gui_macvim") | |
set guifont=DejaVu\ Sans\ Mono:h13 | |
endif | |
endif | |
let g:CSApprox_loaded = 1 | |
" IndentLine | |
let g:indentLine_enabled = 1 | |
let g:indentLine_concealcursor = 0 | |
let g:indentLine_char = '┆' | |
let g:indentLine_faster = 1 | |
if $COLORTERM == 'gnome-terminal' | |
set term=gnome-256color | |
else | |
if $TERM == 'xterm' | |
set term=xterm-256color | |
endif | |
endif | |
if &term =~ '256color' | |
set t_ut= | |
endif | |
set scrolloff=6 | |
"" Use modeline overrides | |
set modeline | |
set modelines=10 | |
set title | |
" set titleold="Terminal" | |
set titlestring=%F | |
set statusline=%F%m%r%h%w%=(%{&ff}/%Y)\ (line\ %l\/%L,\ col\ %c)\ | |
" Search mappings: These will make it so that going to the next one in a | |
" search will center on the line it's found in. | |
nnoremap n nzzzv | |
nnoremap N Nzzzv | |
if exists("*fugitive#statusline") | |
set statusline+=%{fugitive#statusline()} | |
endif | |
" vim-airline | |
let g:airline_theme = 'powerlineish' | |
let g:airline_theme = 'onedark' | |
let g:airline#extensions#branch#enabled = 1 | |
let g:airline#extensions#ale#enabled = 1 | |
let g:airline#extensions#tagbar#enabled = 1 | |
let g:airline_skip_empty_sections = 1 | |
"***************************************************************************** | |
"" Abbreviations | |
"***************************************************************************** | |
"" no one is really happy until you have this shortcuts | |
cnoreabbrev W! w! | |
cnoreabbrev Q! q! | |
cnoreabbrev Qall! qall! | |
cnoreabbrev Wq wq | |
cnoreabbrev Wa wa | |
cnoreabbrev wQ wq | |
cnoreabbrev WQ wq | |
cnoreabbrev W w | |
cnoreabbrev Q q | |
cnoreabbrev Qall qall | |
"" NERDTree configuration | |
let g:NERDTreeChDirMode=2 | |
let g:NERDTreeIgnore=['\.rbc$', '\~$', '\.pyc$', '\.db$', '\.sqlite$', '__pycache__'] | |
let g:NERDTreeSortOrder=['^__\.py$', '\/$', '*', '\.swp$', '\.bak$', '\~$'] | |
let g:NERDTreeShowBookmarks=1 | |
let g:nerdtree_tabs_focus_on_files=1 | |
let g:NERDTreeMapOpenInTabSilent = '<RightMouse>' | |
let g:NERDTreeWinSize = 50 | |
set wildignore+=*/tmp/*,*.so,*.swp,*.zip,*.pyc,*.db,*.sqlite | |
nnoremap <silent> <F2> :NERDTreeFind<CR> | |
nnoremap <silent> <F3> :NERDTreeToggle<CR> | |
" grep.vim | |
nnoremap <silent> <leader>f :Rgrep<CR> | |
let Grep_Default_Options = '-IR' | |
let Grep_Skip_Files = '*.log *.db' | |
let Grep_Skip_Dirs = '.git node_modules' | |
" terminal emulation | |
"nnoremap <silent> <leader>sh :terminal<CR> | |
"***************************************************************************** | |
"" Commands | |
"***************************************************************************** | |
" remove trailing whitespaces | |
command! FixWhitespace :%s/\s\+$//e | |
"***************************************************************************** | |
"" Functions | |
"***************************************************************************** | |
if !exists('*s:setupWrapping') | |
function s:setupWrapping() | |
set wrap | |
set wm=8 | |
set textwidth=5 | |
endfunction | |
endif | |
"***************************************************************************** | |
"" Autocmd Rules | |
"***************************************************************************** | |
"" The PC is fast enough, do syntax highlight syncing from start unless 200 lines | |
augroup vimrc-sync-fromstart | |
autocmd! | |
autocmd BufEnter * :syntax sync maxlines=200 | |
augroup END | |
"" Remember cursor position | |
augroup vimrc-remember-cursor-position | |
autocmd! | |
autocmd BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endif | |
augroup END | |
"" txt | |
augroup vimrc-wrapping | |
autocmd! | |
autocmd BufRead,BufNewFile *.txt call s:setupWrapping() | |
augroup END | |
"" make/cmake | |
augroup vimrc-make-cmake | |
autocmd! | |
autocmd FileType make setlocal noexpandtab | |
autocmd BufNewFile,BufRead CMakeLists.txt setlocal filetype=cmake | |
augroup END | |
set autoread | |
"***************************************************************************** | |
"" Mappings | |
"***************************************************************************** | |
"" Split | |
"noremap <Leader>h :<C-u>split<CR> | |
noremap <silent> <Leader>v :<C-u>vsplit<CR> | |
noremap <silent> <Leader>h :<C-u>vsplit<CR> | |
noremap <silent> <C-s> :wq<CR> | |
" Boggin custom | |
map <silent> <C-h> <C-w>h | |
map <silent> <C-j> <C-w>j | |
map <silent> <C-k> <C-w>k | |
map <silent> <C-l> <C-w>l | |
noremap <silent> <Leader>w :w | |
noremap <silent><Leader>q :q | |
noremap <silent><C-q> :q<Enter> | |
noremap <silent><C-w> :w<Enter> | |
map <silent><Leader>h <C-w>h | |
map <silent><Leader>j <C-w> | |
map <silent><Leader>k <C-w>k | |
map <silent><Leader>l <C-w>l | |
nnoremap <silent><Leader>d "_d | |
xnoremap <silent><Leader>d "_d | |
xnoremap <silent><Leader>p "_dP | |
onoremap c l | |
" nnoremap d "0d | |
" nnoremap x "*d | |
" vnoremap d "0d | |
" vnoremap x "*d | |
" From Cutlass's github README for setting x to cut | |
nnoremap x d | |
xnoremap x d | |
nnoremap xx dd | |
nnoremap X D | |
" Standard jj and jk Escaping | |
inoremap <silent> jj <Esc> | |
inoremap <silent> jk <Esc> | |
inoremap <silent> jh <Esc> | |
inoremap <silent> jl <Esc> | |
inoremap <silent> hh <Esc> | |
inoremap <silent> hj <Esc> | |
inoremap <silent> hk <Esc> | |
inoremap <silent> hl <Esc> | |
inoremap <silent> kk <Esc> | |
inoremap <silent> kh <Esc> | |
inoremap <silent> kj <Esc> | |
inoremap <silent> kk <Esc> | |
" inoremap <silent> kl <Esc> | |
" Easymotion | |
nmap <silent> ff <Plug>(easymotion-overwin-f) | |
map <silent> ff <Plug>(easymotion-overwin-f) | |
map <silent> fw <Plug>(easymotion-w) | |
map <silent> fl <Plug>(easymotion-overwin-line) | |
nmap <silent> F <Plug>(easymotion-overwin-bd-w) | |
map <silent> F <Plug>(easymotion-bd-w) | |
nnoremap gh <Plug>(ale_hover) | |
nnoremap <silent> <esc> :noh<return><esc> | |
nnoremap <esc>^[ <esc>^[ | |
map <silent> fc <Plug>(easymotion-bd-f) | |
nmap <silent> fc <Plug>(easymotion-overwin-f) | |
" map ff <Plug>(easymotion-bd-f) | |
" nmap ff <Plug>(easymotion-overwin-f) | |
map <silent> fl <Plug>(easymotion-bd-jk) | |
nmap <silent> fl <Plug>(easymotion-overwin-line) | |
map <silent> fw <Plug>(easymotion-bd-w) | |
nmap <silent> fw <Plug>(easymotion-overwin-w) | |
map <silent>ff <Plug>(easymotion-jumptoanywhere) | |
nmap <silent> ff <Plug>(easymotion-jumptoanywhere) | |
let g:EasyMotion_smartcase = 1 | |
" let g:EasyMotion_use_smartsign_us = 1 | |
function! s:config_easyfuzzymotion(...) abort | |
return extend(copy({ | |
\ 'converters': [incsearch#config#fuzzyword#converter()], | |
\ 'modules': [incsearch#config#easymotion#module({'overwin': 1})], | |
\ 'keymap': {"\<CR>": '<Over>(easymotion)'}, | |
\ 'is_expr': 0, | |
\ 'is_stay': 1 | |
\ }), get(a:, 1, {})) | |
endfunction | |
noremap <silent><expr> <Space>/ incsearch#go(<SID>config_easyfuzzymotion()) | |
noremap <C-w>q :w<Enter> | |
noremap <C-s>q :w<Enter> | |
noremap <C-q>q :q<Enter> | |
"nnoremap - $ | |
map - $ | |
nnoremap gl $ | |
nnoremap gh 0 | |
"noremap <Leader>t :NERDTree<Enter> | |
" noremap <Leader>t :NERDTreeTabsToggle<Enter> | |
noremap <C-n> :NERDTreeToggle<Enter> | |
" noremap <C-t> :NERDTreeToggle<Enter> | |
let NERDTreeMapActivateNode='l' | |
let NERDTreeMapOpenInTab='L' | |
let NERDTreeWinSize=30 | |
let NERDTreeShowHidden=1 | |
" Git | |
noremap <Leader>ga :Git add --all<CR> | |
noremap <Leader>gc :Git commit --verbose<CR> | |
noremap <Leader>gps :Git push<CR> | |
noremap <Leader>gpl :Git pull<CR> | |
noremap <Leader>gs :Git status<CR> | |
noremap <Leader>gb :Git blame<CR> | |
noremap <Leader>gd :Git diff<CR> | |
noremap <Leader>gr :Git remove<CR> | |
"nnoremap <leader>sc :CloseSession<CR> | |
"" Tabs | |
nnoremap <Tab> gt | |
nnoremap <S-Tab> gT | |
" nnoremap <silent> <S-t> :tabnew<CR> | |
"" Set working directory | |
nnoremap <leader>. :lcd %:p:h<CR> | |
"" Opens an edit command with the path of the currently edited file filled in | |
noremap <Leader>e :e <C-R>=expand("%:p:h") . "/" <CR> | |
"" Opens a tab edit command with the path of the currently edited file filled | |
noremap <Leader>te :tabe <C-R>=expand("%:p:h") . "/" <CR> | |
"" fzf.vim | |
set wildmode=list:longest,list:full | |
set wildignore+=*.o,*.obj,.git,*.rbc,*.pyc,__pycache__ | |
let $FZF_DEFAULT_COMMAND = "find * -path '*/\.*' -prune -o -path 'node_modules/**' -prune -o -path 'target/**' -prune -o -path 'dist/**' -prune -o -type f -print -o -type l -print 2> /dev/null" | |
" The Silver Searcher | |
if executable('ag') | |
let $FZF_DEFAULT_COMMAND = 'ag --hidden --ignore .git -g ""' | |
set grepprg=ag\ --nogroup\ --nocolor | |
endif | |
" ripgrep | |
if executable('rg') | |
let $FZF_DEFAULT_COMMAND = 'rg --files --hidden --follow --glob "!.git/*"' | |
set grepprg=rg\ --vimgrep | |
command! -bang -nargs=* Find call fzf#vim#grep('rg --column --line-number --no-heading --fixed-strings --ignore-case --hidden --follow --glob "!.git/*" --color "always" '.shellescape(<q-args>).'| tr -d "\017"', 1, <bang>0) | |
endif | |
cnoremap <C-P> <C-R>=expand("%:p:h") . "/" <CR> | |
nnoremap <silent> <leader>b :Buffers<CR> | |
nnoremap <silent> <leader>e :FZF -m<CR> | |
"Recovery commands from history through FZF | |
nmap <leader>y :History:<CR> | |
" snippets | |
let g:UltiSnipsExpandTrigger="<tab>" | |
let g:UltiSnipsJumpForwardTrigger="<tab>" | |
let g:UltiSnipsJumpBackwardTrigger="<c-b>" | |
let g:UltiSnipsEditSplit="vertical" | |
" ale | |
let g:ale_linters = {} | |
" Tagbar | |
nmap <silent> <F4> :TagbarToggle<CR> | |
let g:tagbar_autofocus = 1 | |
" Disable visualbell | |
set noerrorbells visualbell t_vb= | |
if has('autocmd') | |
autocmd GUIEnter * set visualbell t_vb= | |
endif | |
"" Copy/Paste/Cut | |
if has('unnamedplus') | |
set clipboard=unnamed,unnamedplus | |
endif | |
noremap YY "+y<CR> | |
noremap <leader>p "+gP<CR> | |
noremap XX "+x<CR> | |
" makes d delete into an empty register. (or a 0 register, but still) | |
" makes x cut selected (x for comoon Ctrl+X pneumonics) | |
if has('macunix') | |
" pbcopy for OSX copy/paste | |
vmap <C-x> :!pbcopy<CR> | |
vmap <C-c> :w !pbcopy<CR><CR> | |
endif | |
"" Buffer nav | |
noremap <leader>z :bp<CR> | |
noremap <leader>q :bp<CR> | |
noremap <leader>x :bn<CR> | |
noremap <leader>w :bn<CR> | |
"" Close buffer | |
noremap <leader>c :bd<CR> | |
"" Clean search (highlight) | |
nnoremap <silent> <leader><space> :noh<cr> | |
"" Switching windows | |
noremap <C-j> <C-w>j | |
noremap <C-k> <C-w>k | |
noremap <C-l> <C-w>l | |
noremap <C-h> <C-w>h | |
"" Vmap for maintain Visual Mode after shifting > and < | |
vmap < <gv | |
vmap > >gv | |
"" Move visual block | |
vnoremap J :m '>+1<CR>gv=gv | |
vnoremap K :m '<-2<CR>gv=gv | |
"" Open current line on GitHub | |
nnoremap <Leader>o :.Gbrowse<CR> | |
"***************************************************************************** | |
"" Custom configs | |
"***************************************************************************** | |
" html | |
" for html files, 2 spaces | |
autocmd Filetype html setlocal ts=2 sw=2 expandtab | |
" javascript | |
let g:javascript_enable_domhtmlcss = 1 | |
" vim-javascript | |
augroup vimrc-javascript | |
autocmd! | |
autocmd FileType javascript setl tabstop=4|setl shiftwidth=4|setl expandtab softtabstop=2 | |
augroup END | |
" typescript | |
let g:yats_host_keyword = 1 | |
"***************************************************************************** | |
"***************************************************************************** | |
"" Include user's local vim config | |
if filereadable(expand("~/.config/nvim/local_init.vim")) | |
source ~/.config/nvim/local_init.vim | |
endif | |
"***************************************************************************** | |
"" Convenience variables | |
"***************************************************************************** | |
" vim-airline | |
if !exists('g:airline_symbols') | |
let g:airline_symbols = {} | |
endif | |
if !exists('g:airline_powerline_fonts') | |
let g:airline#extensions#tabline#left_sep = ' ' | |
let g:airline#extensions#tabline#left_alt_sep = '|' | |
let g:airline_left_sep = '▶' | |
let g:airline_left_alt_sep = '»' | |
let g:airline_right_sep = '◀' | |
let g:airline_right_alt_sep = '«' | |
let g:airline#extensions#branch#prefix = '⤴' "➔, ➥, ⎇ | |
let g:airline#extensions#readonly#symbol = '⊘' | |
let g:airline#extensions#linecolumn#prefix = '¶' | |
let g:airline#extensions#paste#symbol = 'ρ' | |
let g:airline_symbols.linenr = '␊' | |
let g:airline_symbols.branch = '⎇' | |
let g:airline_symbols.paste = 'ρ' | |
let g:airline_symbols.paste = 'Þ' | |
let g:airline_symbols.paste = '∥' | |
let g:airline_symbols.whitespace = 'Ξ' | |
else | |
let g:airline#extensions#tabline#left_sep = '' | |
let g:airline#extensions#tabline#left_alt_sep = '' | |
" powerline symbols | |
let g:airline_left_sep = '' | |
let g:airline_left_alt_sep = '' | |
let g:airline_right_sep = '' | |
let g:airline_right_alt_sep = '' | |
let g:airline_symbols.branch = '' | |
let g:airline_symbols.readonly = '' | |
let g:airline_symbols.linenr = '' | |
endif | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment