" mikroskeem's neovim config " Bail if config is already loaded if exists("g:loaded_neostrophic") finish endif let g:loaded_neostrophic = 1 " neovim-qt Guifont command command -nargs=? Guifont call rpcnotify(0, 'Gui', 'SetFont', "") | let g:Guifont="" " Set options set wildmode=longest,list,full set completeopt-=preview set shortmess+=cI set noshowmode set shortmess+=I set nostartofline set wrap set textwidth=0 set wrapmargin=0 set background=dark set number set numberwidth=3 if $DISPLAY != '' set clipboard+=unnamedplus endif set showmatch set smartcase set ignorecase set undofile set undoreload=100 set viminfo+=n$HOME/.config/nvim/tmp/viminfo set showtabline=0 set backup set backupdir=$HOME/.config/nvim/tmp/backup/ set undodir=$HOME/.config/nvim/tmp/undo/ set directory=$HOME/.config/nvim/tmp/swap/ set title set cursorline let mapleader = ',' function! s:center_header(lines) abort let longest_line = max(map(copy(a:lines), 'len(v:val)')) let centered_lines = map(copy(a:lines), \ 'repeat(" ", (&columns / 2) - (longest_line / 2)) . v:val') return centered_lines endfunction function! s:mkdir_p(p) if !isdirectory(expand(a:p)) call mkdir(expand(a:p), "p") endif endfunction function! s:set_indent() if &ft =~ 'yaml\|coffee\|vim\|jade' set softtabstop=2 shiftwidth=2 endif if &ft =~ 'make' set shiftwidth=2 tabstop=2 noexpandtab endif endfunction " Make missing dirs silent! call s:mkdir_p(&undodir) silent! call s:mkdir_p(&backupdir) silent! call s:mkdir_p(&directory) " Default indent settings set softtabstop=4 set shiftwidth=4 set expandtab set shiftround set autoindent set copyindent " Function call below overrides previous options " if opened filetype was defined in function autocmd! FileType * call s:set_indent() " Fake $MYVIMRC function! s:fake_vimrc() let $MYVIMRC=$HOME . "/.config/nvim/init.vim" endfunction " UpdateRemotePlugins wrapper (used in vim-plug) function! URP(info) if a:info.status == 'installed' silent! call s:fake_vimrc() silent! UpdateRemotePlugins endif endfunction " Eyecandy: loads color scheme after it's installation :3 function! Load_color_scheme(info) if a:info.status == 'installed' let s = printf("colorscheme %s", a:info.name) silent! execute s endif endfunction " Toggle preview function! s:preview_toggle() if &completeopt =~# "preview" setlocal completeopt-=preview pc else setlocal completeopt+=preview endif endfunction " Plugin configurations let g:lightline = { \ 'active': { \ 'left': [['mode', 'paste',], ['readonly', 'modified', 'fugitive'], ['bufferinfo'], ['bufferbefore', 'buffercurrent', 'bufferafter']], \ }, \ 'component_expand': { \ 'buffercurrent': 'lightline#buffer#buffercurrent2', \ }, \ 'component_function': { \ 'bufferbefore': 'lightline#buffer#bufferbefore', \ 'bufferafter': 'lightline#buffer#bufferafter', \ 'bufferinfo': 'lightline#buffer#bufferinfo', \ 'fugitive': 'LlFugitive', \ }, \ 'separator': { 'left': '>', 'right': '<' }, \ 'subseparator': { 'left': '>', 'right': '<' } \ } function! LlFugitive() return exists('*fugitive#head') ? fugitive#head() : '' endfunction let g:lightline_buffer_readonly_icon = '' let g:lightline_buffer_modified_icon = '+' let g:lightline_buffer_active_buffer_left_icon = '[' let g:lightline_buffer_active_buffer_right_icon = ']' let g:lightline_buffer_separator_icon = '' let g:lightline_buffer_show_bufnr = 0 let g:lightline_buffer_rotate = 0 let g:lightline_buffer_fname_mod = ':t' let g:lightline_buffer_excludes = ['vimfiler'] let g:lightline_buffer_maxflen = 30 let g:lightline_buffer_maxfextlen = 3 let g:lightline_buffer_minflen = 16 let g:lightline_buffer_minfextlen = 3 let g:lightline_buffer_reservelen = 20 let g:molokai_original = 0 let g:rehash256 = 1 let g:syntastic_enable_balloons = 1 let g:syntastic_always_populate_loc_list = 1 let g:syntastic_auto_loc_list = 1 let g:syntastic_check_on_open = 1 let g:syntastic_check_on_wq = 0 let g:syntastic_mode_map = { \ "mode": "active", \ "active_filetypes": ["javascript", "python", "coffee", "jade", "yaml"], \ "passive_filetypes": ["java", "c"]} let g:syntastic_python_checkers = ['flake8', 'pylint'] let g:syntastic_javascript_checkers = ['eslint'] let g:syntastic_yaml_checkers = ['yamllint', 'yamlxs'] let g:startify_session_dir = '~/.config/nvim/startify-session' let g:startify_custom_header = s:center_header(map(split(system('fortune | cowsay'), '\n'), '" ". v:val') + ['','']) let g:deoplete#enable_at_startup = 1 let g:deoplete#enable_camel_case = 1 let g:python3_host_prog = '/usr/bin/python3' let g:python3_host_skip_check = 1 let g:NERDTreeHijackNetrw = 1 let g:gitgutter_map_keys = 0 let g:gitgutter_highlight_lines = 0 let g:echodoc_enable_at_startup = 1 let g:rainbow_active = 1 let g:rainbow_conf = { \ 'ctermfgs': ['red', 'lightgreen', 'lightred', 'lightblue', 'yellow']} " Plugins call plug#begin('~/.config/nvim/neostrophic_plugins') Plug 'tpope/vim-sensible' Plug 'Konfekt/FastFold' Plug 'Matt-Deacalion/vim-systemd-syntax', {'for': 'systemd'} Plug 'PotatoesMaster/i3-vim-syntax', {'for': 'i3'} Plug 'Shougo/context_filetype.vim' Plug 'Shougo/deoplete.nvim', {'do': function('URP')} Plug 'Shougo/echodoc.vim' Plug 'Shougo/unite.vim', {'on': 'Unite' } Plug 'Shougo/vimproc.vim', {'do': 'make'} Plug 'airblade/vim-gitgutter' Plug 'digitaltoad/vim-pug', {'for': ['jade', 'pug']} Plug 'elzr/vim-json', {'for': 'json'} Plug 'itchyny/lightline.vim' Plug 'jelera/vim-javascript-syntax', {'for': 'javascript'} Plug 'jmcantrell/vim-virtualenv' Plug 'junegunn/goyo.vim', {'on': 'Goyo'} Plug 'junegunn/limelight.vim', {'on': 'Limelight'} Plug 'junegunn/vim-easy-align', {'on': 'EasyAlign'} Plug 'justinmk/molokai', {'do': function('Load_color_scheme')} Plug 'kchmck/vim-coffee-script', {'for': 'coffee'} Plug 'luochen1990/rainbow' Plug 'majutsushi/tagbar' Plug 'mattn/gist-vim', {'on': 'Gist'} Plug 'mattn/webapi-vim', {'on': 'Gist'} Plug 'matze/vim-move' Plug 'mhinz/vim-startify' Plug 'mikroskeem/vim-sk-syntax', {'for': 'skript'} Plug 'nelstrom/vim-markdown-folding', {'for': 'markdown'} Plug 'scrooloose/nerdtree', {'on': 'NERDTreeToggle'} Plug 'scrooloose/syntastic' Plug 'taohex/lightline-buffer' Plug 'tpope/vim-fugitive' Plug 'tpope/vim-markdown', {'for': 'markdown'} Plug 'vim-scripts/nginx.vim', {'for': 'nginx'} Plug 'wavded/vim-stylus', {'for': 'stylus'} Plug 'zchee/deoplete-jedi' call plug#end() " Terminal autocmd TermOpen * setlocal nocursorline " Goyo function! s:on_goyo_enter() if exists('$TMUX') silent !tmux set status off endif setlocal nocursorline Limelight endfunction function! s:on_goyo_leave() if exists('$TMUX') silent !tmux set status on endif setlocal cursorline Limelight! endfunction autocmd! User GoyoEnter nested call on_goyo_enter() autocmd! User GoyoLeave nested call on_goyo_leave() " Keybinds " Tab controls nnoremap :tabprevious nnoremap :tabnext nnoremap :tabnew nnoremap :tabclose " ---------------- nnoremap :tabnew nnoremap :tabclose nnoremap :tabprevious nnoremap :tabnext " Commonly used commands " Undo nnoremap :u " Quit nnoremap :q " Just write nnoremap :w " Quit without writing nnoremap :q! " Remove search highlighting nnoremap :noh " Preview toggle nnoremap p :call preview_toggle() " Increase/decrease numbers with Alt key and A/X nnoremap nnoremap " Commands from plugins " File listing nnoremap :NERDTreeToggle " Gist nnoremap :Gist -p " Toggle Syntastic nnoremap :SyntasticToggleMode " Goyo mode nnoremap :Goyo " neovim term nnoremap :term " neovim terminal mode -> normal mode with Alt-q tnoremap " Unite nnoremap :Unite " Show/hide tags nnoremap :TagbarToggle " vim-easy-align " xnoremap / nnoremap won't work here somehow xmap ga :EasyAlign nmap ga :EasyAlign " GitGutter nmap hr GitGutterUndoHunk nmap hp GitGutterPrevHunk " Re-apply fake $MYVIMRC silent! call s:fake_vimrc() " Load color scheme (reuse function) call Load_color_scheme({'status': 'installed', 'name': 'molokai'})