Skip to content

Instantly share code, notes, and snippets.

@tomasleeruniek
Last active April 28, 2019 17:20
Show Gist options
  • Save tomasleeruniek/74e3a5a081ba0431d7ce07b1e95b88cb to your computer and use it in GitHub Desktop.
Save tomasleeruniek/74e3a5a081ba0431d7ce07b1e95b88cb to your computer and use it in GitHub Desktop.
neovim config
"
" 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