"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " _ _ " " (_) (_) " " __ ___ _ __ ___ _ ___ __ ___ _____ ___ ___ _ __ ___ ___ " " \ \ / / | '_ ` _ \ | / __| / _` \ \ /\ / / _ \/ __|/ _ \| '_ ` _ \ / _ \ " " \ V /| | | | | | | | \__ \ | (_| |\ V V / __/\__ \ (_) | | | | | | __/ " " \_/ |_|_| |_| |_| |_|___/ \__,_| \_/\_/ \___||___/\___/|_| |_| |_|\___| " " " " " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" set nocompatible set runtimepath+=~/.config/nvim/repos/github.com/Shougo/dein.vim let s:bundle_dir = expand('~/.config/nvim') let s:plugin_dir = s:bundle_dir . '/repos/github.com' if dein#load_state(s:bundle_dir) call dein#begin(s:bundle_dir) " --- Dein --- call dein#add(s:plugin_dir . '/Shougo/dein.vim') " --- Appearance --- call dein#add('chriskempson/base16-vim') call dein#add('itchyny/lightline.vim') call dein#add('daviesjamie/vim-base16-lightline') " --- Autocomplete & Snippets --- if has('nvim') call dein#add('Shougo/deoplete.nvim') else call dein#add('Shougo/neocomplete.vim') endif call dein#add('Shougo/neosnippet') call dein#add('Shougo/neosnippet-snippets') " --- Code style --- call dein#add('KolesnichenkoDS/editorconfig.vim') " --- Build & Run --- call dein#add('neomake/neomake') " --- Localization --- call dein#add('lyokha/vim-xkbswitch') " --- Navigation --- call dein#add('ctrlpvim/ctrlp.vim') call dein#add('derekwyatt/vim-fswitch') call dein#add('scrooloose/nerdtree') " --- Misc --- call dein#add('LucHermitte/lh-vim-lib') call dein#add('easymotion/vim-easymotion') call dein#add('kassio/neoterm') call dein#add('mattn/webapi-vim') call dein#add('tpope/vim-commentary') call dein#add('tpope/vim-surround') call dein#add('wakatime/vim-wakatime') " --- Language-specific --- " {{{ """ C/C++ call dein#add('Rip-Rip/clang_complete') """ Elm call dein#add('ElmCast/elm-vim') """ Haskell call dein#add('eagletmt/neco-ghc') """ Hex call dein#add('Shougo/vinarise.vim') """ JavaScript/TypeScript call dein#add('pangloss/vim-javascript') call dein#add('leafgarland/typescript-vim') """ Rust call dein#add('racer-rust/vim-racer') call dein#add('rust-lang/rust.vim') """ TOML call dein#add('cespare/vim-toml') " }}} call dein#end() call dein#save_state() endif " === General === " {{{ " --- General mappings --- map ; : let g:mapleader=" " noremap j gj noremap k gk " --- Filetype plugins --- filetype plugin on filetype indent on " --- Indentation --- set expandtab set tabstop=4 set shiftwidth=4 set autoindent set smartindent " --- Line numbers --- set relativenumber augroup line_numbers autocmd! autocmd InsertEnter * :set number norelativenumber autocmd InsertLeave * :set nonumber relativenumber augroup END " --- Line wrap --- set wrap set linebreak " --- Local vimrc --- autocmd BufEnter * silent! source local.vim autocmd BufEnter * silent! source .local.vim " --- Misc --- set ruler set cursorline set noswapfile " --- Mouse --- set mouse=a " --- Search --- set hlsearch set ignorecase set smartcase map h :noh " --- Splitting --- set splitright set splitbelow " --- Tab navigation --- map [ :tabprevious map ] :tabnext " --- Whitespaces --- set list set listchars=tab:»\ ,extends:›,precedes:‹,nbsp:·,trail:· " }}} " === Appearance === " {{{ set background=dark if filereadable(expand("~/.vimrc_background")) let base16colorspace=256 source ~/.vimrc_background endif syntax enable let g:lightline = { \ 'colorscheme': 'base16' \ } " }}} " === Autocomplete & Snippets === " {{{ set completeopt-=preview let g:deoplete#enable_at_startup = 1 let g:neocomplete#enable_at_startup = 1 imap (neosnippet_expand_or_jump) smap (neosnippet_expand_or_jump) xmap (neosnippet_expand_target) if (!exists('g:deoplete#omni#input_patterns')) let g:deoplete#omni#input_patterns = {} endif " }}} " === Build & Run === " {{{ function! PreBuild() abort if exists('g:prebuildcmd') exec 'Texec ' . g:prebuildcmd endif endfunction function! Build() abort if exists('g:buildcmd') exec 'Texec ' . g:buildcmd elseif &ft =~# '^\%(rust\)$' Texec cargo build elseif &ft =~# '^\%(javascript\|typescript\)$' Texec npm run build else Texec make endif endfunction function! Run() abort if exists('g:runcmd') exec 'Texec ' . g:runcmd elseif &ft =~# '^\%(rust\)$' Texec cargo run endif endfunction function! Test() abort if exists('g:testcmd') exec 'Texec ' . g:testcmd elseif &ft =~# '^\%(rust\)$' Texec cargo test elseif &ft =~# '^\%(javascript\|typescript\)$' Texec npm run test else Texec make test endif endfunction function! EmitAsm() abort if &ft =~# '^\%(rust\)$' RustEmitAsm endif endfunction map :call PreBuild() imap :call PreBuild() map :call Build() imap :call Build() map :call Run() imap :call Run() map :call Test() imap :call Test() map :call Check() imap :call Check() " F9-F12 are reserved for debug hotkeys " }}} " === Code style === " {{{ " --- Auto formatting --- " {{{ map f :call AutoFormat() let g:autoformat_on_save_default = 0 if !exists('g:autoformat_on_save') let g:autoformat_on_save = g:autoformat_on_save_default endif autocmd! BufWritePre * if g:autoformat_on_save | call AutoFormat() | endif """ ClangFormat let g:clang_format_fallback_style = 'LLVM' """ RustFmt let g:rustfmt_fail_silently=1 function! AutoFormat() abort if &ft =~# '^\%(c\|cpp\|objc\|java\|javascript\|typescript\|proto\)$' ClangFormat elseif &ft =~# '^\%(rust\)$' RustFmt endif endfunction " }}} " --- Linting --- " {{{ let g:check_on_save_default = 0 if !exists('g:check_on_save') let g:check_on_save = g:check_on_save_default endif function! Check() abort if exists('g:checkmaker') exec 'Neomake! ' . g:checkmaker elseif exists('g:checkcmd') exec 'Texec ' . g:checkcmd else Neomake endif endfunction let g:neomake_error_sign = { 'text': '*', 'texthl': 'NeomakeErrorSign' } let g:neomake_warning_sign = { 'text': '*', 'texthl': 'NeomakeWarningSign' } let g:neomake_message_sign = { 'text': '*', 'texthl': 'NeomakeMessageSign' } let g:neomake_info_sign = { 'text': '*', 'texthl': 'NeomakeInfoSign' } autocmd! BufWritePost * if g:check_on_save | call Check() | endif " }}} " }}} " === Localization === " {{{ set enc=utf-8 let g:XkbSwitchEnabled = 1 let g:XkbSwitchNLayout = 'us' " }}} " === Navigation === " {{{ map :NERDTreeToggle imap :NERDTreeToggle augroup nerdtree autocmd! autocmd BufEnter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif augroup END map :FSHere imap :FSHere " }}} " === Performance === " {{{ set lazyredraw syntax sync maxlines=256 " }}} " === Terminal === " {{{ if has('nvim') map :TREPLSendLine imap :TREPLSendLine vmap :TREPLSendSelection endif let g:neoterm_keep_term_open = 0 let g:neoterm_size = 15 if has('nvim') command! -nargs=+ Texec :T else command! -nargs=+ Texec :! endif command! -nargs=+ Git :Texec git command! -nargs=* Make :Texec make if has('nvim') tnoremap tnoremap h h tnoremap j j tnoremap k k tnoremap l l nnoremap tn :Tnew nnoremap tq :call neoterm#close() nnoremap tc :call neoterm#clear() nnoremap tk :call neoterm#kill() endif " }}} " === Language-specific === " {{{ " --- C/C++ --- command! -nargs=0 ClangFormat :silent! pyf /usr/share/clang/clang-format.py let g:neomake_c_enabled_makers = ['clang'] autocmd FileType c,cpp setlocal omnifunc=ClangComplete " --- Haskell --- let g:neomake_haskell_enabled_makers = [] autocmd FileType haskell setlocal omnifunc=necoghc#omnifunc " --- JavaScript/TypeScript --- let g:neomake_typescript_tslint_maker = { \ 'args': ['%:p'], \ 'errorformat': 'ERROR: %f[%l\, %c]: %m', \ } let g:neomake_typescript_tsc_maker = { \ 'args': ['--project', neomake#utils#FindGlobFile(expand('%:p:h'), 'tsconfig.json'), '--noEmit'], \ 'append_file': 0, \ 'errorformat': '%f(%l\,%c): %m' \ } let g:neomake_javascript_enabled_makers = ['eslint'] let g:neomake_typescript_enabled_makers = ['tsc', 'tslint'] " --- Rust --- command! -nargs=+ Cargo :Texec cargo let g:neomake_rust_enabled_makers = ['rustc'] " }}}