call plug#begin('~/.config/nvim/plugged') " Plugins { " ctrl-p is a fuzzy file finder. Plug 'kien/ctrlp.vim' " airline is a better status line and a tab-bar for nvim. Plug 'bling/vim-airline' " gruvbox colorscheme. Seems to work the best for me. Plug 'morhetz/gruvbox' " neomake is a code linting tool that runs in the background. Plug 'neomake/neomake' "autocompletion Plugin for Code autocomplete Plug 'zchee/deoplete-jedi' " Left side File Tree "Plug 'scrooloose/nerdtree' " install with nvim +PlugInstall +qall " update with nvim +PlugUpgrade +PlugUpdate +PlugClean +qall " you can also update it in nvim with syntax autocompletion and stuff - simply " call PlugUpdate as an example " } call plug#end() " Map the leader key to , let mapleader="\" " General { set noautoindent " I indent my code myself. set nocindent " I indent my code myself. "set smartindent " Or I let the smartindent take care of it. set breakindent " Indent line-breaks at the same level as code. set ttimeoutlen=100 set fileencoding=utf-8 set fileencodings=utf-8,gbk,chinese,cp936,gb18030,utf-16le,utf-16,big5,euc-jp,euc-kr,latin-1 " } " Search { set ignorecase " Make searching case insensitive set smartcase " ... unless the query has capital letters. set gdefault " Use 'g' flag by default with :s/foo/bar/. " Use to clear the highlighting of :set hlsearch. if maparg('', 'n') ==# '' nnoremap :nohlsearch endif " } " Spellcorrection { setlocal spell spelllang=en_us "setlocal spell spelllang=de_20 map :setlocal spell spelllang=de_20 map :setlocal spell spelllang=en_us map :w!:!aspell check %:e! % " Formatting { set showmatch " Show matching brackets. set number " Show the line numbers on the left side. set formatoptions+=o " Continue comment marker in new lines. set expandtab " Insert spaces when TAB is pressed. set tabstop=4 " Render TABs using this many spaces. set shiftwidth=4 " Indentation amount for < and > commands. set nojoinspaces " Prevents inserting two spaces after punctuation on a join (J) " More natural splits set splitbelow " Horizontal split below current. set splitright " Vertical split to right of current. if !&scrolloff set scrolloff=3 " Show next 3 lines while scrolling. endif if !&sidescrolloff set sidescrolloff=5 " Show next 5 columns while side-scrolling. endif set nostartofline " Do not jump to first character with page commands. " Tell Vim which characters to show for expanded TABs, " trailing whitespace, and end-of-lines. VERY useful! if &listchars ==# 'eol:$' set listchars=tab:>\ ,trail:-,extends:>,precedes:<,nbsp:+ endif set list " Show problematic characters. " } " Configuration { set autochdir " Switch to current file's parent directory. " Remove special characters for filename set isfname-=: set isfname-== set isfname-=+ " Map ; to : nnoremap ; : " Path/file expansion in colon-mode. set wildmode=list:longest " Allow color schemes to do bright colors without forcing bold. if &t_Co == 8 && $TERM !~# '^linux' set t_Co=16 endif " Remove trailing spaces. function! TrimWhitespace() let l:save = winsaveview() %s/\s\+$//e call winrestview(l:save) endfunction " FIXME: Do not call this on makefile and sv files. autocmd BufWritePre * call TrimWhitespace() nnoremap W :call TrimWhitespace() " Diff options set diffopt+=iwhite "Enter to go to EOF and backspace to go to start "nnoremap G "nnoremap gg " Stop cursor from jumping over wrapped lines nnoremap j gj nnoremap k gk " Make HOME and END behave like shell "inoremap "inoremap " } " UI Options { " Colorscheme options. set bg=dark colorscheme gruvbox " Also highlight all tabs and trailing whitespace characters. highlight ExtraWhitespace ctermbg=darkgreen guibg=darkgreen match ExtraWhitespace /\s\+$\|\t/ " Relative numbering function! NumberToggle() if(&relativenumber == 1) set nornu set number else set rnu endif endfunc " Toggle between normal and relative numbering. nnoremap r :call NumberToggle() " Opaque Background (Comment out to use terminal's profile) "set termguicolors " Transparent Background (For i3 and compton) "highlight Normal guibg=NONE ctermbg=NONE "highlight LineNr guibg=NONE ctermbg=NONE " } " Keybindings { " Save file nnoremap w :w " Copy and paste from system clipboard (Might require xsel/xclip install) vmap y "+y vmap d "+d nmap p "+p nmap P "+P vmap p "+p vmap P "+P " Move between buffers nmap h :bprevious " Switch between Buffers map j_ map k_ map h_ map l_ " Switch between tabs map :tabprevious map :tabnext " Go to tab by number noremap 1gt noremap 2gt noremap 3gt noremap 4gt noremap 5gt noremap 6gt noremap 7gt noremap 8gt noremap 9gt noremap :tablast " Open init.vim map ee :e $HOME/.config/nvim/init.vim " Open a File in new Tab map t :tabnew " } " Experimental { " Search and Replace nmap s :%s//g " write files as root (if you've forgotten to open it as root " simply do :W instead of :w command W :execute ':silent w !sudo tee % > /dev/null' | :edit! " } " Plugin Settings { " Airline { let g:airline#extensions#tabline#enabled = 1 let g:airline#extensions#tabline#buffer_idx_mode = 1 let g:airline#extensions#tabline#fnamemod = ':t' let g:airline#extensions#tabline#left_sep = '' let g:airline#extensions#tabline#left_alt_sep = '' let g:airline#extensions#tabline#right_sep = '' let g:airline#extensions#tabline#right_alt_sep = '' 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_theme= 'gruvbox' " } " CtrlP { " Open file menu nnoremap o :CtrlP " Open buffer menu nnoremap b :CtrlPBuffer " Open most recently used files nnoremap f :CtrlPMRUFiles " } " neomake { autocmd! BufWritePost * Neomake nnoremap l :lopen " } " netrw { let g:netrw_liststyle=3 " tree (change to 0 for thin) let g:netrw_banner=0 " no banner let g:netrw_altv=1 " open files on right let g:netrw_winsize=25 " only use 20% screen for netrw " FIXME: Preview opens to left and is very narrow let g:netrw_preview=1 " open previews vertically let g:netrw_browse_split =3 " open files in new Tab nmap n :Vexplore " } " } " Filetype-Specific Configurations { " HTML, XML, Jinja autocmd FileType html setlocal shiftwidth=2 tabstop=2 softtabstop=2 autocmd FileType css setlocal shiftwidth=2 tabstop=2 softtabstop=2 autocmd FileType xml setlocal shiftwidth=2 tabstop=2 softtabstop=2 autocmd FileType htmldjango setlocal shiftwidth=2 tabstop=2 softtabstop=2 autocmd FileType htmldjango inoremap {{ {{ }} autocmd FileType htmldjango inoremap {% {% %} autocmd FileType htmldjango inoremap {# {# #} " } " Markdown and Journal { autocmd FileType markdown setlocal shiftwidth=2 tabstop=2 softtabstop=2 autocmd FileType journal setlocal shiftwidth=2 tabstop=2 softtabstop=2 " } " Trim Whitespaces { function! TrimWhitespace() let l:save = winsaveview() %s/\\\@