" " Install plugins " set nocompatible " be iMproved, required filetype off " required " set the runtime path to include Vundle and initialize " Install with git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() " let Vundle manage Vundle, required Plugin 'VundleVim/Vundle.vim' Plugin 'Raimondi/delimitMate' " Autoclose quotes, parenthesis, brackets, etc. Plugin 'Yggdroot/indentLine' Plugin 'airblade/vim-gitgutter' " Git-indicators on the left Plugin 'dhruvasagar/vim-table-mode' " Nice ascii tables Plugin 'itchyny/lightline.vim' " Status-line Plugin 'junegunn/vim-easy-align' " Align at any chars Plugin 'ntpeters/vim-better-whitespace' " Complain on evil eol whitespace Plugin 'preservim/nerdcommenter' " Comments... Plugin 'preservim/nerdtree' " Nerdtree... Plugin 'tpope/vim-fugitive' " git integration call vundle#end() filetype plugin indent on syntax on syntax sync minlines=256 " " Settings " set autoindent set autoread " Automatically reread changed files without asking me anything set autowrite " Automatically save before :next, :make etc. set backspace=indent,eol,start " Makes backspace key more powerful. set complete=.,w,b,u,t set completeopt=longest,menuone set display+=lastline set encoding=utf-8 " Set default encoding to UTF-8 set fileformats=unix,dos,mac " Prefer Unix over Windows over OS 9 formats set hidden set history=500 set hlsearch set ignorecase set incsearch set laststatus=2 set lazyredraw set nobackup " Don't create annoying backup files set nocursorcolumn set nocursorline set noerrorbells " No beeps set noshowmode " We show the mode with airlien or lightline set noswapfile " Don't use swapfile set nowritebackup set nrformats-=octal set number " Show line numbers set re=1 set ruler " Show the cursor position all the time set scrolloff=7 set showcmd " Show me what I'm typing set showmatch " Show matching brackets by flickering set sidescrolloff=7 set smartcase set splitbelow " Split horizontal windows below to the current windows set splitright " Split vertical windows right to the current windows set synmaxcol=300 set tabpagemax=50 set ttyfast " Make Vim to handle long lines nicely. set wrap set textwidth=79 set formatoptions=qrn1 " Time out on key codes but not mappings. set notimeout set ttimeout set ttimeoutlen=10 if has('gui_running') "set transparency=3 set regexpengine=1 " fix js regex syntax endif " Better colorhandling if has('termguicolors') set termguicolors endif let mapleader = "," " dont save .netrwhist history let g:netrw_dirhistmax=0 " Allow saving of files as sudo when I forgot to start vim using sudo. cmap w!! w !sudo tee > /dev/null % " open help vertically command! -nargs=* -complete=help Help vertical belowright help " Different Cursorshapes for the modes "let &t_SI = "\[6 q" "let &t_SR = "\[4 q" "let &t_EI = "\[2 q" " ==================== Remap Keys ==================== " Remaps % to tab so navigate to matching brackets nnoremap % vnoremap % " Visual mode pressing * or # searches for the current selection vnoremap * :call VisualSelection('f') vnoremap # :call VisualSelection('b') " Center, kill hl nnoremap n nzzzv nnoremap N Nzzzv nnoremap :nohlsearch nnoremap zz " CTRL-U in insert mode deletes a lot. Use CTRL-G u to first break undo, " so that you can undo CTRL-U after inserting a line break. inoremap u " Toggle line numbers and rulers nmap ll :set number! nmap lr :set relativenumber! nmap cc :set cursorcolumn! nmap cl :set cursorline! " Better split switching with alt map j map k map h map l map j map k map h map l " Move up and down on split lines map gk map gj map k gk map j gj " Spell checking nnoremap :setlocal spell! spell? map ss :setlocal spell! map sn ]s map sp [s map sa zg map s? z= " trim all whitespaces away nnoremap W :%s/\s\+$//:let @/='' " Do not show stupid q: window map q: :q " Paste Mode set pastetoggle= nmap p :pu " ==================== File Type settings ==================== set tabstop=4 set softtabstop=4 set shiftwidth=4 set noexpandtab set shiftround set smarttab au BufNewFile,BufRead *.vim setlocal noet ts=4 sw=4 sts=4 au BufNewFile,BufRead *.ino setlocal noet ts=4 sw=4 sts=4 au BufNewFile,BufRead *.txt setlocal noet ts=4 sw=4 sts=4 au BufNewFile,BufRead *.md setlocal noet ts=4 sw=4 sts=4 au BufNewFile,BufRead *.json setlocal et ts=2 sw=2 sts=2 au BufNewFile,BufRead *.go setlocal noet ts=4 sw=4 sts=4 au BufNewFile,BufRead *.lua setlocal noet ts=4 sw=4 sts=4 au BufNewFile,BufRead *.py setlocal et ts=4 sw=4 sts=4 au BufNewFile,BufRead *.yml,*.yaml setlocal et ts=2 sw=2 sts=2 au BufNewFile,BufRead *.htm,*.html setlocal noet ts=4 sw=4 sts=4 au FileType dockerfile setlocal et ts=2 sw=2 sts=2 au FileType nginx setlocal noet ts=4 sw=4 sts=4 au FileType fstab,systemd set noet au FileType gitconfig,sh,toml set noet " ==================== Wildmenu ==================== set wildmenu set wildmode=list:full set wildignore+=.hg,.git,.svn " Version control set wildignore+=*.aux,*.out,*.toc " LaTeX intermediate files set wildignore+=*.jpg,*.bmp,*.gif,*.png,*.jpeg " binary images set wildignore+=*.o,*.obj,*.exe,*.dll,*.manifest " compiled object files set wildignore+=*.spl " compiled spelling word lists set wildignore+=*.sw? " Vim swap files set wildignore+=*.DS_Store " OSX bullshit set wildignore+=*.luac " Lua byte code set wildignore+=migrations " Django migrations set wildignore+=go/pkg " Go static files set wildignore+=go/bin " Go bin files set wildignore+=go/bin-vagrant " Go bin-vagrant files set wildignore+=*.pyc " Python byte code set wildignore+=*.orig " Merge resolution files " ==================== PLUGIN: Fugitive ==================== nnoremap ga :Git add %:p nnoremap gs :Gstatus nnoremap gp :Gpush vnoremap gb :Gblame " ==================== PLUGIN: Lightline ==================== " let g:lightline = { \ 'active': { \ 'left': [ [ 'mode', 'paste'], \ [ 'fugitive', 'filename', 'modified', 'ctrlpmark' ], \ ], \ 'right': [ [ 'lineinfo' ], \ [ 'percent' ], \ [ 'fileformat', 'fileencoding', 'filetype' ] ] \ }, \ 'inactive': { \ }, \ 'component_function': { \ 'lineinfo': 'LightLineInfo', \ 'percent': 'LightLinePercent', \ 'modified': 'LightLineModified', \ 'filename': 'LightLineFilename', \ 'fileformat': 'LightLineFileformat', \ 'filetype': 'LightLineFiletype', \ 'fileencoding': 'LightLineFileencoding', \ 'mode': 'LightLineMode', \ 'fugitive': 'LightLineFugitive', \ 'ctrlpmark': 'CtrlPMark', \ }, \ } function! LightLineModified() if &filetype == "help" return "" elseif &modified return "+" elseif &modifiable return "" else return "" endif endfunction function! LightLineFileformat() return winwidth(0) > 70 ? &fileformat : '' endfunction function! LightLineFiletype() return winwidth(0) > 70 ? (strlen(&filetype) ? &filetype : 'no ft') : '' endfunction function! LightLineFileencoding() return winwidth(0) > 70 ? (strlen(&fenc) ? &fenc : &enc) : '' endfunction function! LightLineInfo() return winwidth(0) > 60 ? printf("%3d:%-2d", line('.'), col('.')) : '' endfunction function! LightLinePercent() return &ft =~? 'vimfiler' ? '' : (100 * line('.') / line('$')) . '%' endfunction function! LightLineFugitive() return exists('*fugitive#head') ? fugitive#head() : '' endfunction function! LightLineMode() let fname = expand('%:t') return fname == 'ControlP' ? 'CtrlP' : \ &ft == 'vimfiler' ? 'VimFiler' : \ winwidth(0) > 60 ? lightline#mode() : '' endfunction function! LightLineFilename() let fname = expand('%:t') if mode() == 't' return '' endif return fname == 'ControlP' ? g:lightline.ctrlp_item : \ &ft == 'vimfiler' ? vimfiler#get_status_string() : \ ('' != LightLineReadonly() ? LightLineReadonly() . ' ' : '') . \ ('' != fname ? fname : '[No Name]') endfunction function! LightLineReadonly() return &ft !~? 'help' && &readonly ? 'RO' : '' endfunction function! CtrlPMark() if expand('%:t') =~ 'ControlP' call lightline#link('iR'[g:lightline.ctrlp_regex]) return lightline#concatenate([g:lightline.ctrlp_prev, g:lightline.ctrlp_item \ , g:lightline.ctrlp_next], 0) else return '' endif endfunction let g:ctrlp_status_func = { \ 'main': 'CtrlPStatusFunc_1', \ 'prog': 'CtrlPStatusFunc_2', \ } " ==================== PLUGIN: NerdTree ==================== " For toggling nmap :NERDTreeToggle nmap :NERDTreeToggle noremap n :NERDTreeToggle noremap f :NERDTreeFind let NERDTreeShowHidden=1 let NERDTreeIgnore=['\.vim$', '\~$', '\.git$', '.DS_Store'] " Close nerdtree and vim on close file autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif " ==================== Base64 de- and encoding ==================== let g:indentLine_enabled = 0 let g:indentLine_char = '┊' nmap il :IndentLinesToggle " ==================== Base64 de- and encoding ==================== vnoremap b64d y:let @"=system('base64 -w 0 --decode', @")gvP vnoremap b64e y:let @"=system('base64 -w 0', @")gvP " vim:ts=2:sw=2:et