dotfiles/config/nvim/init.vim

248 lines
6.1 KiB
VimL

call plug#begin("~/.nvim/bundle")
" Other
Plug 'prabirshrestha/async.vim'
" UI
Plug 'Yggdroot/indentLine'
Plug 'airblade/vim-gitgutter'
Plug 'haya14busa/incsearch.vim'
Plug 'mhinz/vim-startify'
Plug 'ryanoasis/vim-devicons'
Plug 'scrooloose/nerdtree'
Plug 'sjl/gundo.vim'
Plug 'tomasiser/vim-code-dark'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
" Programming helpers
Plug 'Chiel92/vim-autoformat'
Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
Plug 'godlygeek/tabular'
Plug 'guns/xterm-color-table.vim'
Plug 'majutsushi/tagbar'
Plug 'scrooloose/syntastic'
Plug 'tpope/vim-sleuth'
Plug 'prabirshrestha/vim-lsp'
" Language support
Plug 'cespare/vim-toml'
Plug 'hsanson/vim-android'
Plug 'justmao945/vim-clang'
Plug 'mitsuhiko/vim-jinja'
Plug 'natebosch/vim-lsc'
Plug 'plasticboy/vim-markdown'
Plug 'posva/vim-vue'
Plug 'rust-lang/rust.vim'
Plug 'tikhomirov/vim-glsl'
Plug 'udalov/kotlin-vim'
call plug#end()
" Misc
set mouse=a
set nowrap
set shell=zsh
set scrolloff=5
set ruler
set backspace=2
set cursorline
set hidden
set wildmenu
set wildmode=longest:full
set splitright
set splitbelow
let &colorcolumn="+".join(range(1, 255), ",+")
let mapleader=","
set termguicolors
nnoremap <F4> :buffers<CR>:buffer<Space>
" Gundo
nnoremap <F9> :GundoToggle<CR>
" Tagbar
nmap <silent> <F8> :TagbarOpenAutoClose<CR>
let g:tagbar_sort = 0
" Airline
set laststatus=2
if !exists('g:airline_symbols')
let g:airline_symbols = {}
endif
let g:airline_theme = 'codedark'
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 = ''
let g:airline_symbols.maxlinenr = ''
let g:airline_symbols.whitespace = 'Ξ'
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#tabline#show_tab_nr = 0
let g:airline#extensions#tabline#show_tab_type = 0
" Syntax coloring
syntax enable
set synmaxcol=1024
set background=dark
colorscheme codedark
hi WarningMsg ctermbg=0
hi YcmErrorSign ctermbg=18 ctermfg=1
hi YcmWarningSign ctermbg=18 ctermfg=3
" indentLine
let g:indentLine_color_term = 20
let g:indentLine_char = '│'
let g:indentLine_concealcursor = ''
let g:indentLine_indentLevel = 25
let g:indentLine_fileType = ['vhdl']
" Startify
let g:startify_session_dir = $HOME . '/.nvim/sessions'
let g:startify_session_autoload = 1
let g:startify_session_persistence = 1
" Formatting
set encoding=utf-8
set tabstop=8
set shiftwidth=4
set expandtab
set autoindent
set cino=:0
au FileType text,markdown setlocal textwidth=80
au FileType python setlocal textwidth=79
nnoremap <silent> <F5> :let _s=@/<Bar>:%s/\s\+$//e<Bar>:let @/=_s<Bar>:nohl<CR> " Trim trailing spaces
set list listchars=tab:\ \ ,trail:•,precedes:…,extends:…
" Line numbering
set number
" Search
set ignorecase
set smartcase
map / <Plug>(incsearch-forward)
map ? <Plug>(incsearch-backward)
map g/ <Plug>(incsearch-stay)
set hlsearch
let g:incsearch#auto_nohlsearch = 1
map n <Plug>(incsearch-nohl-n)
map N <Plug>(incsearch-nohl-N)
map * <Plug>(incsearch-nohl-*)
map # <Plug>(incsearch-nohl-#)
map g* <Plug>(incsearch-nohl-g*)
map g# <Plug>(incsearch-nohl-g#)
" Undos
set undofile
set undodir=~/.nvim/undo
set undolevels=1000
set undoreload=10000
" Completion
set completeopt=menu,menuone,longest,preview
let g:ycm_confirm_extra_conf = 0
let g:ycm_autoclose_preview_window_after_completion = 1
let g:ycm_complete_in_comments = 1
let g:ycm_seed_identifiers_with_syntax = 1
let g:ycm_python_binary_path = 'python'
""" Shortcuts
"nnoremap <silent> <F4> :wa<CR>:split<CR>:terminal make run<CR>
vnoremap <C-y> "+y
inoremap <C-p> <ESC>"+pa
map <silent> <F2> :set invpaste<CR>
if has("nvim")
tnoremap <A-h> <C-\><C-n><C-w>h
tnoremap <A-j> <C-\><C-n><C-w>j
tnoremap <A-k> <C-\><C-n><C-w>k
tnoremap <A-l> <C-\><C-n><C-w>l
endif
nnoremap <A-h> <C-w>h
nnoremap <A-j> <C-w>j
nnoremap <A-k> <C-w>k
nnoremap <A-l> <C-w>l
nnoremap <silent> <C-t> :tabnew<CR>
nnoremap <silent> <C-n> :tabnext<CR>
nnoremap <silent> <C-p> :tabprevious<CR>
nnoremap <C-[> <C-t>
map ; :
""" Cache
set backupdir=~/.nvim/backup
set directory=~/.nvim/backup
""" Vimpager
if exists("vimpager")
au BufRead * set scrolloff=0
set noruler
set nocursorline
set colorcolumn=
set nonumber
au BufRead * set laststatus=0
let g:airline#extensions#tabline#enabled = 0
endif
let vimpager_disable_ansiesc = 1
""" vim-markdown
let g:vim_markdown_folding_disabled = 1
""" NerdTree
map <C-n> :NERDTreeToggle<CR>
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
""" vim-autoformat
"au BufWrite * :Autoformat
""" vim-lsc
let g:lsc_server_commands = {'dart': 'dart_language_server'}
""" Deoplete
let g:deoplete#enable_at_startup = 1
""" vim-clang
let g:clang_c_options = '-std=c11'
let g:clang_cpp_options = '-std=c++17'
""" syntastic
let g:syntastic_cpp_compiler = 'clang++'
let g:syntastic_cpp_compiler_options = '-std=c++17 -Wall -Wextra -pedantic'
""" vim-lsc
" C++/C
if executable('clangd')
au User lsp_setup call lsp#register_server({
\ 'name': 'clangd',
\ 'cmd': {server_info->['clangd']},
\ 'whitelist': ['c', 'cpp', 'objc', 'objcpp'],
\ })
endif
" <Tab> completion:
" 1. If popup menu is visible, select and insert next item
" 2. Otherwise, if within a snippet, jump to next input
" 3. Otherwise, if preceding chars are whitespace, insert tab char
" 4. Otherwise, start manual autocomplete
imap <silent><expr><Tab> pumvisible() ? "\<Down>"
\ : (neosnippet#jumpable() ? "\<Plug>(neosnippet_jump)"
\ : (<SID>is_whitespace() ? "\<Tab>" : deoplete#manual_complete()))
smap <silent><expr><Tab> pumvisible() ? "\<Down>"
\ : (neosnippet#jumpable() ? "\<Plug>(neosnippet_jump)"
\ : (<SID>is_whitespace() ? "\<Tab>" : deoplete#manual_complete()))
inoremap <expr><S-Tab> pumvisible() ? "\<Up>" : "\<C-h>"
function! s:is_whitespace() "{{{
let col = col('.') - 1
return ! col || getline('.')[col - 1] =~? '\s'
endfunction "}}}
" }}}