Created
February 15, 2020 13:40
-
-
Save alduro/302e336fd2903ee2c990e239fae958ff to your computer and use it in GitHub Desktop.
~/.config/nvim/init.vim
This file contains hidden or 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 utf-8 | |
if has('vim_starting') | |
set runtimepath+=~/.config/nvim/ | |
endif | |
set guifont=Menlo\ Regular:h16 | |
" ============================================================================ " | |
" === PLUGINS === " | |
" ============================================================================ " | |
call plug#begin('~/.config/nvim/plugged') | |
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } | |
Plug 'tpope/vim-surround' | |
Plug 'flazz/vim-colorschemes' | |
Plug 'slashmili/alchemist.vim' | |
Plug 'elixir-editors/vim-elixir' | |
Plug 'mhinz/vim-mix-format' | |
Plug 'othree/yajs.vim' | |
Plug 'epilande/vim-es2015-snippets' | |
Plug 'epilande/vim-react-snippets' | |
Plug 'mhartington/oceanic-next' | |
Plug 'mxw/vim-jsx' | |
Plug 'terryma/vim-multiple-cursors' | |
Plug 'ryanoasis/vim-devicons' | |
Plug 'szw/vim-tags' | |
Plug 'jremmen/vim-ripgrep' | |
Plug 'vim-airline/vim-airline' | |
Plug 'vim-airline/vim-airline-themes' | |
Plug 'tpope/vim-fugitive' | |
Plug 'honza/vim-snippets' | |
Plug 'othree/jspc.vim', { 'for': ['javascript', 'javascript.jsx'] } | |
Plug 'tyrannicaltoucan/vim-quantum' | |
Plug 'othree/html5.vim' | |
Plug 'Shougo/neosnippet' | |
Plug 'Shougo/neosnippet-snippets' | |
Plug 'reasonml-editor/vim-reason-plus' | |
Plug 'raimondi/delimitMate' | |
Plug 'cakebaker/scss-syntax.vim' | |
Plug 'ap/vim-css-color' | |
Plug 'mattn/emmet-vim' | |
Plug 'airblade/vim-gitgutter' | |
Plug 'rakr/vim-one' | |
Plug 'thoughtbot/vim-rspec' | |
Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' } | |
Plug 'neoclide/coc.nvim', {'branch': 'release'} | |
Plug 'guns/vim-sexp' | |
Plug 'tpope/vim-fireplace' | |
Plug 'tpope/vim-sexp-mappings-for-regular-people' | |
Plug 'luochen1990/rainbow' | |
Plug 'tpope/vim-sensible' | |
Plug 'lifepillar/vim-solarized8' | |
Plug 'joshdick/onedark.vim' | |
Plug 'tpope/vim-salve' | |
Plug 'liuchengxu/vim-clap', { 'do': function('clap#helper#build_all') } | |
Plug 'Shougo/denite.nvim', { 'do': ':UpdateRemotePlugins' } | |
Plug 'ngmy/vim-rubocop' | |
Plug 'w0rp/ale' | |
Plug 'haishanh/night-owl.vim' | |
Plug 'evanleck/vim-svelte' | |
Plug 'kchmck/vim-coffee-script' | |
Plug 'mustache/vim-mustache-handlebars' | |
call plug#end() | |
" Default mapping | |
let g:multi_cursor_next_key='<C-n>' | |
let g:multi_cursor_prev_key='<C-p>' | |
let g:multi_cursor_skip_key='<C-x>' | |
let g:multi_cursor_quit_key='<Esc>' | |
let local_eslint = finddir('node_modules', '.;') . '/.bin/eslint' | |
if matchstr(local_eslint, "^\/\\w") == '' | |
let local_eslint = getcwd() . "/" . local_eslint | |
endif | |
if executable(local_eslint) | |
let g:syntastic_javascript_eslint_exec = local_eslint | |
endif | |
fun! <SID>StripTrailingWhitespaces() | |
let l = line(".") | |
let c = col(".") | |
%s/\s\+$//e | |
call cursor(l, c) | |
endfun | |
autocmd FileType ruby,elixir,css,javascript,elm autocmd BufWritePre <buffer> :call <SID>StripTrailingWhitespaces() | |
let g:python_host_prog = '/usr/bin/python2' | |
let g:python3_host_prog = '/Users/aldo/.pyenv/shims/python3' | |
let g:node_host_prog = '/Users/aldo/.asdf/installs/nodejs/12.6.0/.npm/bin/neovim-node-host' | |
" ============================================================================ " | |
" === EDITING OPTIONS === " | |
" ============================================================================ " | |
" Remap leader key to , | |
let g:mapleader=',' | |
" Disable line numbers | |
set nonumber | |
" Don't show last command | |
set noshowcmd | |
" Yank and paste with the system clipboard | |
set clipboard=unnamed | |
" Hides buffers instead of closing them | |
set hidden | |
" === TAB/Space settings === " | |
" Insert spaces when TAB is pressed. | |
set expandtab | |
" Change number of spaces that a <Tab> counts for during editing ops | |
set softtabstop=2 | |
" Indentation amount for < and > commands. | |
set shiftwidth=2 | |
" do not wrap long lines by default | |
set nowrap | |
" Don't highlight current cursor line | |
set nocursorline | |
" Disable line/column number in status line | |
" Shows up in preview window when airline is disabled if not | |
set noruler | |
" Only one line for command line | |
set cmdheight=1 | |
set t_Co=256 | |
" === Completion Settings === " | |
" Don't give completion messages like 'match 1 of 2' | |
" or 'The only match' | |
set shortmess+=c | |
" ============================================================================ " | |
" === PLUGIN SETUP === " | |
" ============================================================================ " | |
" Wrap in try/catch to avoid errors on initial install before plugin is available | |
try | |
" === Denite setup ===" | |
" Use ripgrep for searching current directory for files | |
" By default, ripgrep will respect rules in .gitignore | |
" --files: Print each file that would be searched (but don't search) | |
" --glob: Include or exclues files for searching that match the given glob | |
" (aka ignore .git files) | |
" | |
call denite#custom#var('file/rec', 'command', ['rg', '--files', '--glob', '!.git']) | |
" Use ripgrep in place of "grep" | |
call denite#custom#var('grep', 'command', ['rg']) | |
" Custom options for ripgrep | |
" --vimgrep: Show results with every match on it's own line | |
" --hidden: Search hidden directories and files | |
" --heading: Show the file name above clusters of matches from each file | |
" --S: Search case insensitively if the pattern is all lowercase | |
call denite#custom#var('grep', 'default_opts', ['--hidden', '--vimgrep', '--heading', '-S']) | |
" Recommended defaults for ripgrep via Denite docs | |
call denite#custom#var('grep', 'recursive_opts', []) | |
call denite#custom#var('grep', 'pattern_opt', ['--regexp']) | |
call denite#custom#var('grep', 'separator', ['--']) | |
call denite#custom#var('grep', 'final_opts', []) | |
" Remove date from buffer list | |
call denite#custom#var('buffer', 'date_format', '') | |
" allow grep source filtering on either path or text | |
call denite#custom#source('grep', 'converters', ['converter_abbr_word']) | |
call denite#custom#alias('source', 'file/rec/git', 'file/rec') | |
call denite#custom#var('file/rec/git', 'command', | |
\ ['git', 'ls-files', '-co', '--exclude-standard']) | |
nnoremap <silent> <C-p> :<C-u>Denite | |
\ `finddir('.git', ';') != '' ? 'file/rec/git' : 'file/rec'`<CR> | |
" Custom options for Denite | |
" auto_resize - Auto resize the Denite window height automatically. | |
" prompt - Customize denite prompt | |
" direction - Specify Denite window direction as directly below current pane | |
" winminheight - Specify min height for Denite window | |
" highlight_mode_insert - Specify h1-CursorLine in insert mode | |
" prompt_highlight - Specify color of prompt | |
" highlight_matched_char - Matched characters highlight | |
" highlight_matched_range - matched range highlight | |
let s:denite_options = {'default' : { | |
\ 'start_filter': 1, | |
\ 'auto_resize': 1, | |
\ 'prompt': 'λ ', | |
\ 'statusline': 0, | |
\ 'highlight_matched_char' : 'Function', | |
\ 'highlight_matched_range' : 'Function', | |
\ 'highlight_window_background': 'Visual', | |
\ 'highlight_filter_background': 'DiffAdd', | |
\ 'winrow': 1, | |
\ 'vertical_preview': 1, | |
\ }} | |
" Loop through denite options and enable them | |
function! s:profile(opts) abort | |
for l:fname in keys(a:opts) | |
for l:dopt in keys(a:opts[l:fname]) | |
call denite#custom#option(l:fname, l:dopt, a:opts[l:fname][l:dopt]) | |
endfor | |
endfor | |
endfunction | |
call s:profile(s:denite_options) | |
catch | |
echo 'Denite not installed. It should work after running :PlugInstall' | |
endtry | |
" === Coc.nvim === " | |
" use <tab> for trigger completion and navigate to next complete item | |
function! s:check_back_space() abort | |
let col = col('.') - 1 | |
return !col || getline('.')[col - 1] =~ '\s' | |
endfunction | |
inoremap <silent><expr> <TAB> | |
\ pumvisible() ? "\<C-n>" : | |
\ <SID>check_back_space() ? "\<TAB>" : | |
\ coc#refresh() | |
"Close preview window when completion is done. | |
autocmd! CompleteDone * if pumvisible() == 0 | pclose | endif | |
" === NeoSnippet === " | |
" Map <C-k> as shortcut to activate snippet if available | |
imap <C-k> <Plug>(neosnippet_expand_or_jump) | |
smap <C-k> <Plug>(neosnippet_expand_or_jump) | |
xmap <C-k> <Plug>(neosnippet_expand_target) | |
" Load custom snippets from snippets folder | |
let g:neosnippet#snippets_directory='~/.config/nvim/snippets' | |
" Hide conceal markers | |
let g:neosnippet#enable_conceal_markers = 0 | |
" === NERDTree === " | |
" Show hidden files/directories | |
let g:NERDTreeShowHidden = 1 | |
" Remove bookmarks and help text from NERDTree | |
let g:NERDTreeMinimalUI = 1 | |
" Custom icons for expandable/expanded directories | |
let g:NERDTreeDirArrowExpandable = '⬏' | |
let g:NERDTreeDirArrowCollapsible = '⬎' | |
" Hide certain files and directories from NERDTree | |
let g:NERDTreeIgnore = ['^\.DS_Store$', '^tags$', '\.git$[[dir]]', '\.idea$[[dir]]', '\.sass-cache$'] | |
" Wrap in try/catch to avoid errors on initial install before plugin is available | |
try | |
" === Vim airline ==== " | |
" Enable extensions | |
let g:airline_extensions = ['branch', 'hunks', 'coc'] | |
" Update section z to just have line number | |
let g:airline_section_z = airline#section#create(['linenr']) | |
" Do not draw separators for empty sections (only for the active window) > | |
let g:airline_skip_empty_sections = 1 | |
" Smartly uniquify buffers names with similar filename, suppressing common parts of paths. | |
let g:airline#extensions#tabline#formatter = 'unique_tail' | |
" Custom setup that removes filetype/whitespace from default vim airline bar | |
let g:airline#extensions#default#layout = [['a', 'b', 'c'], ['x', 'z', 'warning', 'error']] | |
let airline#extensions#coc#stl_format_err = '%E{[%e(#%fe)]}' | |
let airline#extensions#coc#stl_format_warn = '%W{[%w(#%fw)]}' | |
" Configure error/warning section to use coc.nvim | |
let g:airline_section_error = '%{airline#util#wrap(airline#extensions#coc#get_error(),0)}' | |
let g:airline_section_warning = '%{airline#util#wrap(airline#extensions#coc#get_warning(),0)}' | |
let g:airline_powerline_fonts = 1 | |
let g:airline#extensions#branch#enabled = 1 | |
let g:airline#extensions#tabline#enabled = 1 | |
let g:airline#extensions#tabline#left_sep = ' ' | |
let g:airline#extensions#tabline#left_alt_sep = '|' | |
let g:airline#extensions#ale#enabled = 1 | |
" Ale setup | |
let g:ale_linters = { | |
\ 'javascript': ['eslint'], | |
\ 'ruby': ['rubocop'], | |
\} | |
" Only run linters named in ale_linters settings. | |
let g:ale_linters_explicit = 1 | |
let g:ale_sign_error = '>>' | |
let g:ale_sign_warning = '--' | |
" Set this. Airline will handle the rest. | |
let g:ale_echo_msg_error_str = 'E' | |
let g:ale_echo_msg_warning_str = 'W' | |
let g:ale_echo_msg_format = '[%linter%] %s [%severity%]' | |
let g:ale_sign_column_always = 1 | |
" Disable ALE auto highlights | |
let g:ale_set_highlights = 0 | |
let g:ale_javascript_prettier_options = '--single-quote --trailing-comma es5' | |
let g:ale_fix_on_save = 1 | |
" Hide the Nerdtree status line to avoid clutter | |
let g:NERDTreeStatusline = '' | |
" Disable vim-airline in preview mode | |
let g:airline_exclude_preview = 1 | |
" Enable powerline fonts | |
let g:airline_powerline_fonts = 1 | |
" Enable caching of syntax highlighting groups | |
let g:airline_highlighting_cache = 1 | |
" Define custom airline symbols | |
if !exists('g:airline_symbols') | |
let g:airline_symbols = {} | |
endif | |
" Don't show git changes to current file in airline | |
let g:airline#extensions#hunks#enabled=0 | |
catch | |
echo 'Airline not installed. It should work after running :PlugInstall' | |
endtry | |
" === echodoc === " | |
" Enable echodoc on startup | |
let g:echodoc#enable_at_startup = 1 | |
" === vim-javascript === " | |
" Enable syntax highlighting for JSDoc | |
let g:javascript_plugin_jsdoc = 1 | |
" === vim-jsx === " | |
" Highlight jsx syntax even in non .jsx files | |
let g:jsx_ext_required = 0 | |
" === javascript-libraries-syntax === " | |
let g:used_javascript_libs = 'underscore,requirejs,chai,jquery' | |
" === Signify === " | |
let g:signify_sign_delete = '-' | |
" ============================================================================ " | |
" === UI === " | |
" ============================================================================ " | |
" Enable true color support | |
set termguicolors | |
" Editor theme | |
try | |
colorscheme night-owl | |
catch | |
colorscheme slate | |
endtry | |
" Vim airline theme | |
let g:airline_theme='oceanicnext' | |
" Add custom highlights in method that is executed every time a colorscheme is sourced | |
" See https://gist.github.com/romainl/379904f91fa40533175dfaec4c833f2f for details | |
function! MyHighlights() abort | |
" Hightlight trailing whitespace | |
highlight Trail ctermbg=red guibg=red | |
call matchadd('Trail', '\s\+$', 100) | |
endfunction | |
augroup MyColors | |
autocmd! | |
autocmd ColorScheme * call MyHighlights() | |
augroup END | |
" Change vertical split character to be a space (essentially hide it) | |
set fillchars="" | |
" Set preview window to appear at bottom | |
set splitbelow | |
" Don't dispay mode in command line (airilne already shows it) | |
set noshowmode | |
" Set floating window to be slightly transparent | |
set winbl=10 | |
" coc.nvim color changes | |
hi! link CocErrorSign WarningMsg | |
hi! link CocWarningSign Number | |
hi! link CocInfoSign Type | |
" Make background transparent for many things | |
hi! Normal ctermbg=NONE guibg=NONE | |
hi! NonText ctermbg=NONE guibg=NONE | |
hi! LineNr ctermfg=NONE guibg=NONE | |
hi! SignColumn ctermfg=NONE guibg=NONE | |
hi! StatusLine guifg=#16252b guibg=#6699CC | |
hi! StatusLineNC guifg=#16252b guibg=#16252b | |
" Try to hide vertical spit and end of buffer symbol | |
hi! VertSplit gui=NONE guifg=#17252c guibg=#17252c | |
hi! EndOfBuffer ctermbg=NONE ctermfg=NONE guibg=#17252c guifg=#17252c | |
" Customize NERDTree directory | |
hi! NERDTreeCWD guifg=#99c794 | |
" Make background color transparent for git changes | |
hi! SignifySignAdd guibg=NONE | |
hi! SignifySignDelete guibg=NONE | |
hi! SignifySignChange guibg=NONE | |
" Highlight git change signs | |
hi! SignifySignAdd guifg=#99c794 | |
hi! SignifySignDelete guifg=#ec5f67 | |
hi! SignifySignChange guifg=#c594c5 | |
" Call method on window enter | |
augroup WindowManagement | |
autocmd! | |
autocmd WinEnter * call Handle_Win_Enter() | |
augroup END | |
" Change highlight group of preview window when open | |
function! Handle_Win_Enter() | |
if &previewwindow | |
setlocal winhighlight=Normal:MarkdownError | |
endif | |
endfunction | |
" ============================================================================ " | |
" === KEY MAPPINGS === " | |
" ============================================================================ " | |
" === Denite shorcuts === " | |
" ; - Browser currently open buffers | |
" <leader>t - Browse list of files in current directory | |
" <leader>g - Search current directory for occurences of given term and close window if no results | |
" <leader>j - Search current directory for occurences of word under cursor | |
nmap ; :Denite buffer<CR> | |
nmap <leader>t :DeniteProjectDir file/rec<CR> | |
nnoremap <leader>g :<C-u>Denite grep:. -no-empty<CR> | |
nnoremap <leader>j :<C-u>DeniteCursorWord grep:.<CR> | |
" Define mappings while in 'filter' mode | |
" <C-o> - Switch to normal mode inside of search results | |
" <Esc> - Exit denite window in any mode | |
" <CR> - Open currently selected file in any mode | |
" <C-t> - Open currently selected file in a new tab | |
" <C-v> - Open currently selected file a vertical split | |
" <C-h> - Open currently selected file in a horizontal split | |
autocmd FileType denite-filter call s:denite_filter_my_settings() | |
function! s:denite_filter_my_settings() abort | |
imap <silent><buffer> <C-o> | |
\ <Plug>(denite_filter_quit) | |
inoremap <silent><buffer><expr> <Esc> | |
\ denite#do_map('quit') | |
nnoremap <silent><buffer><expr> <Esc> | |
\ denite#do_map('quit') | |
inoremap <silent><buffer><expr> <CR> | |
\ denite#do_map('do_action') | |
inoremap <silent><buffer><expr> <C-t> | |
\ denite#do_map('do_action', 'tabopen') | |
inoremap <silent><buffer><expr> <C-v> | |
\ denite#do_map('do_action', 'vsplit') | |
inoremap <silent><buffer><expr> <C-h> | |
\ denite#do_map('do_action', 'split') | |
endfunction | |
" Define mappings while in denite window | |
" <CR> - Opens currently selected file | |
" q or <Esc> - Quit Denite window | |
" d - Delete currenly selected file | |
" p - Preview currently selected file | |
" <C-o> or i - Switch to insert mode inside of filter prompt | |
" <C-t> - Open currently selected file in a new tab | |
" <C-v> - Open currently selected file a vertical split | |
" <C-h> - Open currently selected file in a horizontal split | |
autocmd FileType denite call s:denite_my_settings() | |
function! s:denite_my_settings() abort | |
nnoremap <silent><buffer><expr> <CR> | |
\ denite#do_map('do_action') | |
nnoremap <silent><buffer><expr> q | |
\ denite#do_map('quit') | |
nnoremap <silent><buffer><expr> <Esc> | |
\ denite#do_map('quit') | |
nnoremap <silent><buffer><expr> d | |
\ denite#do_map('do_action', 'delete') | |
nnoremap <silent><buffer><expr> p | |
\ denite#do_map('do_action', 'preview') | |
nnoremap <silent><buffer><expr> i | |
\ denite#do_map('open_filter_buffer') | |
nnoremap <silent><buffer><expr> <C-o> | |
\ denite#do_map('open_filter_buffer') | |
nnoremap <silent><buffer><expr> <C-t> | |
\ denite#do_map('do_action', 'tabopen') | |
nnoremap <silent><buffer><expr> <C-v> | |
\ denite#do_map('do_action', 'vsplit') | |
nnoremap <silent><buffer><expr> <C-h> | |
\ denite#do_map('do_action', 'split') | |
endfunction | |
" === Nerdtree shorcuts === " | |
" <leader>n - Toggle NERDTree on/off | |
" <leader>f - Opens current file location in NERDTree | |
nmap <leader>n :NERDTreeToggle<CR> | |
nmap <leader>f :NERDTreeFind<CR> | |
" <Space> - PageDown | |
" - - PageUp | |
noremap <Space> <PageDown> | |
noremap - <PageUp> | |
" Quick window switching | |
nmap <C-h> <C-w>h | |
nmap <C-j> <C-w>j | |
nmap <C-k> <C-w>k | |
nmap <C-l> <C-w>l | |
" === coc.nvim === " | |
nmap <silent> <leader>dd <Plug>(coc-definition) | |
nmap <silent> <leader>dr <Plug>(coc-references) | |
nmap <silent> <leader>dj <Plug>(coc-implementation) | |
" === vim-better-whitespace === " | |
" <leader>y - Automatically remove trailing whitespace | |
nmap <leader>y :StripWhitespace<CR> | |
" === Search shorcuts === " | |
" <leader>h - Find and replace | |
" <leader>/ - Claer highlighted search terms while preserving history | |
map <leader>h :%s///<left><left> | |
nmap <silent> <leader>/ :nohlsearch<CR> | |
" === Easy-motion shortcuts ===" | |
" <leader>w - Easy-motion highlights first word letters bi-directionally | |
map <leader>w <Plug>(easymotion-bd-w) | |
" Allows you to save files you opened without write permissions via sudo | |
cmap w!! w !sudo tee % | |
" === vim-jsdoc shortcuts ===" | |
" Generate jsdoc for function under cursor | |
nmap <leader>z :JsDoc<CR> | |
" Delete current visual selection and dump in black hole buffer before pasting | |
" Used when you want to paste over something without it getting copied to | |
" Vim's default buffer | |
vnoremap <leader>p "_dP | |
" ============================================================================ " | |
" === MISC. === " | |
" ============================================================================ " | |
" Automaticaly close nvim if NERDTree is only thing left open | |
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif | |
" === Search === " | |
" ignore case when searching | |
set ignorecase | |
" if the search string has an upper case letter in it, the search will be case sensitive | |
set smartcase | |
" Automatically re-read file if a change was detected outside of vim | |
set autoread | |
" Enable line numbers | |
set number | |
set background=dark | |
" Set backups | |
if has('persistent_undo') | |
set undofile | |
set undolevels=3000 | |
set undoreload=10000 | |
endif | |
set backupdir=~/.local/share/nvim/backup " Don't put backups in current dir | |
set backup | |
set noswapfile |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment