Last active
April 28, 2019 17:20
-
-
Save tomasleeruniek/74e3a5a081ba0431d7ce07b1e95b88cb to your computer and use it in GitHub Desktop.
neovim config
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
" | |
" behavior | |
" | |
set switchbuf=usetab,newtab | |
" prefer splitting to the right (for vertical splits) or below (for horizontal | |
" splits) | |
set splitright splitbelow | |
" hide abandoned buffers instead of unloading them | |
set hidden | |
" tabs are 8 characters, pressing <tab> yields 4 spaces | |
set tabstop=8 expandtab shiftwidth=4 | |
" try to match indentation when starting a new line | |
set smartindent | |
" ignore case when searching, except when the search includes a capital letter | |
set ignorecase smartcase | |
" store undo files in $XDG_DATA_HOME | |
set undofile undodir="$XDG_DATA_HOME"/nvim/undo | |
" don't save netrw history | |
let g:netrw_dirhistmax = 0 | |
autocmd FocusGained,BufEnter * :checktime | |
" | |
" languages | |
" | |
" treat .js.flow files as .js files | |
autocmd BufRead,BufNewFile *.js.flow set filetype=javascript | |
" contextually enable spell checking | |
autocmd FileType gitcommit setlocal spell | |
autocmd FileType markdown setlocal spell | |
" | |
" UI | |
" | |
set title | |
set number | |
set signcolumn=yes | |
function! Tabline() | |
let s = '' | |
for i in range(tabpagenr('$')) | |
let tab = i + 1 | |
let winnr = tabpagewinnr(tab) | |
let buflist = tabpagebuflist(tab) | |
let bufnr = buflist[winnr - 1] | |
let bufname = bufname(bufnr) | |
let bufmodified = getbufvar(bufnr, "&mod") | |
let s .= '%' . tab . 'T' | |
let s .= (tab == tabpagenr() ? '%#TabLineSel#' : '%#TabLine#') | |
let s .= ' ' . tab .' ' | |
let s .= (bufname != '' ? ''. fnamemodify(bufname, ':t') . ' ' : '[No Name] ') | |
if bufmodified | |
let s .= '[+] ' | |
endif | |
endfor | |
return s | |
endfunction | |
set tabline=%!Tabline() | |
" | |
" colors | |
" | |
set t_Co=256 | |
colorscheme shblah | |
highlight Comment cterm=italic | |
highlight clear SignColumn | |
" | |
" plugins | |
" | |
call plug#begin('~/.local/share/nvim/plugged') | |
" defaults | |
Plug 'tpope/vim-sensible' | |
" vim | |
Plug 'junegunn/vim-easy-align' | |
Plug 'tpope/vim-abolish' | |
Plug 'tpope/vim-characterize' | |
Plug 'tpope/vim-commentary' | |
Plug 'tpope/vim-eunuch' | |
Plug 'tpope/vim-repeat' | |
Plug 'tpope/vim-surround' | |
Plug 'tpope/vim-unimpaired' | |
Plug 'wellle/targets.vim' | |
Plug 'Shougo/defx.nvim', { 'do': ':UpdateRemotePlugins' } | |
Plug 'vimlab/split-term.vim' | |
" search | |
Plug 'junegunn/fzf' | |
Plug 'jesseleite/vim-agriculture' | |
Plug 'Shougo/denite.nvim' | |
" git | |
Plug 'airblade/vim-gitgutter' | |
Plug 'tpope/vim-fugitive' | |
Plug 'christoomey/vim-conflicted' | |
" writing | |
Plug 'junegunn/goyo.vim' | |
Plug 'junegunn/limelight.vim' | |
" organization | |
Plug 'itchyny/calendar.vim' | |
Plug 'vimwiki/vimwiki' | |
" IDE | |
Plug 'metakirby5/codi.vim' | |
Plug 'Shougo/deoplete.nvim' | |
Plug 'w0rp/ale' | |
" snippets | |
Plug 'SirVer/ultisnips' | |
Plug 'honza/vim-snippets' | |
Plug 'epilande/vim-es2015-snippets' | |
Plug 'epilande/vim-react-snippets' | |
" misc | |
Plug 'ntpeters/vim-better-whitespace' | |
Plug 'editorconfig/editorconfig-vim' | |
Plug 'fszymanski/deoplete-emoji' | |
" | |
" language-specific | |
" | |
" html + css | |
Plug 'mattn/emmet-vim' | |
" javascript | |
Plug 'steelsojka/deoplete-flow' | |
Plug 'pangloss/vim-javascript' | |
Plug 'galooshi/vim-import-js' | |
Plug 'mxw/vim-jsx' | |
Plug 'heavenshell/vim-jsdoc' | |
" markdown | |
Plug 'iamcco/markdown-preview.nvim', { 'do': 'cd app & yarn' } | |
Plug 'plasticboy/vim-markdown' | |
" haskell | |
Plug 'neovimhaskell/haskell-vim' | |
" nix | |
Plug 'LnL7/vim-nix' | |
call plug#end() | |
" | |
" plugin configuration | |
" | |
" whitespace | |
let g:better_whitespace_filetypes_blacklist = [ | |
\ 'defx', | |
\ 'calendar', | |
\ 'diff', | |
\ 'gitcommit', | |
\ 'denite', | |
\ 'qf', | |
\ 'help' | |
\] | |
" ale | |
let g:ale_lint_on_enter = 1 | |
let g:ale_lint_on_text_changed = 0 | |
let g:ale_lint_on_insert_leave = 1 | |
let g:ale_lint_on_save = 0 | |
let g:ale_lint_delay = 0 | |
let g:ale_linters_explicit = 1 | |
let g:ale_fix_on_save = 1 | |
let g:ale_linters = { | |
\ 'javascript': ['eslint'], | |
\ 'typescript': ['tsserver'], | |
\} | |
let g:ale_fixers = { | |
\ 'javascript': ['eslint', 'prettier'], | |
\ 'typescript': ['tslint', 'prettier'], | |
\ 'css': ['prettier'], | |
\} | |
" codi | |
let g:codi#interpreters = { | |
\ 'javascript': { | |
\ 'bin': 'babel-node', | |
\ }, | |
\} | |
" deoplete | |
let g:deoplete#enable_at_startup = 1 | |
function! StrTrim(txt) | |
return substitute(a:txt, '^\n*\s*\(.\{-}\)\n*\s*$', '\1', '') | |
endfunction | |
let g:flow_path = StrTrim(system('PATH=$(npm bin):$PATH && which flow')) | |
if g:flow_path != 'flow not found' | |
let g:deoplete#sources#flow#flow_bin = g:flow_path | |
endif | |
" ultisnips | |
let g:UltiSnipsSnippetDirectories=[$XDG_CONFIG_HOME.'/nvim/snips', 'UltiSnips'] | |
let g:UltiSnipsExpandTrigger="<tab>" | |
let g:UltiSnipsJumpForwardTrigger="<tab>" | |
let g:UltiSnipsJumpBackwardTrigger="<s-tab>" | |
" goyo + limelight | |
function! s:goyo_enter() | |
Limelight | |
let b:quitting = 0 | |
let b:quitting_bang = 0 | |
autocmd QuitPre <buffer> let b:quitting = 1 | |
cabbrev <buffer> q! let b:quitting_bang = 1 <bar> q! | |
endfunction | |
function! s:goyo_leave() | |
Limelight! | |
" Quit Vim if this is the only remaining buffer | |
if b:quitting && len(filter(range(1, bufnr('$')), 'buflisted(v:val)')) == 1 | |
if b:quitting_bang | |
qa! | |
else | |
qa | |
endif | |
endif | |
endfunction | |
:augroup goyo | |
: autocmd! User GoyoEnter call <SID>goyo_enter() | |
: autocmd! User GoyoLeave call <SID>goyo_leave() | |
: autocmd BufRead,BufNewFile *.md Goyo | |
:augroup END | |
let g:limelight_conceal_ctermfg = 'darkgray' | |
" calendar | |
let g:calendar_google_calendar = 1 | |
" vimwiki | |
let g:vimwiki_ext2syntax = { | |
\ 'md': 'markdown' | |
\} | |
let g:vimwiki_list = [{ | |
\ 'path': '~/Documents/wiki/src/content', | |
\ 'syntax': 'markdown', | |
\ 'ext': '.md', | |
\}] | |
" vim-markdown | |
let g:vim_markdown_folding_disabled = 1 | |
let g:vim_markdown_math = 1 | |
let g:vim_markdown_follow_anchor = 1 | |
let g:vim_markdown_no_extensions_in_markdown = 1 | |
" markdown-preview | |
let g:mkdp_refresh_slow = 1 | |
" keybinds | |
nnoremap <silent> <C-k> <Plug>(ale_previous_wrap) | |
nnoremap <silent> <C-j> <Plug>(ale_next_wrap) | |
nnoremap <leader>? :ALEDetail<cr> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment