302 lines
7.7 KiB
VimL
302 lines
7.7 KiB
VimL
" Vim configuration
|
|
" Author: Mad <madmaurice@zom.bi>
|
|
" Last Revision: Saturday, 19. December 2015 17:51
|
|
|
|
set nocompatible
|
|
filetype off
|
|
|
|
" --- init vundle {{{
|
|
set rtp+=~/.vim/bundle/Vundle.vim
|
|
call vundle#begin()
|
|
|
|
" --- Let Vundle manage Vundle
|
|
Plugin 'VundleVim/Vundle.vim'
|
|
" }}}
|
|
|
|
" --- My plugins {{{
|
|
Plugin 'scrooloose/nerdtree' " FileBrowser on the left side
|
|
Plugin 'ervandew/supertab' "Auto completion
|
|
Plugin 'ap/vim-templates' "File templates
|
|
Plugin 'godlygeek/tabular' "Tabularize
|
|
Plugin 'MarcWeber/vim-addon-mw-utils' " Dependency for snipmate
|
|
Plugin 'tomtom/tlib_vim' "Dependency for snipmate
|
|
Plugin 'garbas/vim-snipmate' "Snippets
|
|
Plugin 'easymotion/vim-easymotion' "Easy Motion
|
|
Plugin 'kana/vim-textobj-user' "User defined text objects
|
|
Plugin 'kana/vim-textobj-indent' "Indent based text objects
|
|
Plugin 'benmills/vimux' "Tmux integration
|
|
Plugin 'vim-scripts/argtextobj.vim' "function argument textobj
|
|
Plugin 'rstacruz/sparkup' "quick html writing
|
|
Plugin 'ap/vim-buftabline' "Buffer as tabline
|
|
Plugin 'vim-scripts/L9' "dependency for FuzzyFinder
|
|
Plugin 'vim-scripts/FuzzyFinder' "Fuzzy finding
|
|
Plugin 'cohama/lexima.vim' "Auto pairs
|
|
Plugin 'tpope/vim-surround' "Vim surround
|
|
Plugin 'vim-scripts/rfc-syntax' " RFC Syntax highlight
|
|
" }}}
|
|
|
|
" --- End init vundle {{{
|
|
call vundle#end()
|
|
filetype plugin indent on
|
|
" }}}
|
|
|
|
" --- General configurations {{{
|
|
set whichwrap+=<,>,[,]
|
|
set autoread "auto read file if changed
|
|
set wildmenu "Command completion
|
|
set gdefault " substitute all by default
|
|
set noruler
|
|
set laststatus=2 " Add Status line always
|
|
set number "Show linenumbers
|
|
set backspace=eol,start,indent "Make backspace behave like it's supposed to
|
|
set incsearch "Search while typing pattern
|
|
set lazyredraw "No redrawing while running macros
|
|
set magic "Allow magic modelines
|
|
set showmatch
|
|
set mat=2
|
|
set noerrorbells "No visual nuisance
|
|
set novisualbell
|
|
set t_vb=
|
|
set tm=500
|
|
set encoding=utf8 "Always use utf8
|
|
set ffs=unix,dos,mac " Auto use EOL according to file
|
|
set noswapfile
|
|
set expandtab "Tabbing
|
|
set smarttab " Deleting and creating spaces representing tabs
|
|
set ai "auto indent
|
|
set si "smart indent
|
|
set wrap "wrap lines
|
|
set shiftwidth=4
|
|
set tabstop=4
|
|
set lbr " Smart line breaking
|
|
set tw=500
|
|
set t_Co=256
|
|
set hidden
|
|
set scrolloff=1000
|
|
set shortmess+=I
|
|
syntax enable "Syntax highlighting
|
|
colorscheme madtheme "Colorscheme
|
|
" Backups in different folder
|
|
set backup
|
|
set writebackup
|
|
set backupdir=~/.vim/backup//
|
|
set directory=~/.vim/backup//
|
|
set undofile
|
|
set undodir=$HOME/.vim/undo
|
|
set undolevels=1000
|
|
set undoreload=10000
|
|
" Split behaviour
|
|
set splitright
|
|
set splitbelow
|
|
" we dont need to show the mode
|
|
set noshowmode
|
|
set listchars=eol:↲,tab:▶▹,nbsp:␣,extends:…,trail:•
|
|
" }}}
|
|
|
|
" --- Latex {{{
|
|
au BufRead,BufNewFile *.tex set ft=tex
|
|
" }}}
|
|
|
|
" --- Abbreviations {{{
|
|
iab _date <C-R>=strftime("%A, %d. %B %Y %H:%M")<CR>
|
|
iab _zmail madmaurice@zom.bi
|
|
iab _tumail valentin.gehrke@mailbox.tu-dresden.de
|
|
" }}}
|
|
|
|
" --- Autoload when saving vimrc {{{
|
|
au! BufWritePost .vimrc source ~/.vimrc
|
|
" }}}
|
|
|
|
" --- Vim file easyfolding {{{
|
|
augroup ft_vim
|
|
au!
|
|
au FileType vim setlocal foldmethod=marker
|
|
augroup END
|
|
" }}}
|
|
|
|
" --- Own functions {{{
|
|
function! AddSemicolon()
|
|
normal m'A;
|
|
normal `'
|
|
endfunction
|
|
|
|
function! RunCmdVimux()
|
|
let l:cmd = input("Run: ")
|
|
if l:cmd !~ '\s\+'
|
|
call VimuxRunCommand("clear && " . l:cmd)
|
|
endif
|
|
endfunction
|
|
|
|
function! IsModified()
|
|
if &modified
|
|
return '* '
|
|
endif
|
|
return ''
|
|
endfunction
|
|
|
|
function! s:tig_status()
|
|
!~/.vim/findgitroot.sh "tig status"
|
|
endfunction
|
|
command! TigStatus call s:tig_status()
|
|
" }}}
|
|
|
|
" --- ModeColor {{{
|
|
function! ModeColor(mode)
|
|
if a:mode == 'i'
|
|
if &paste
|
|
hi link ModeLine ModeLineInsertPaste
|
|
else
|
|
hi link ModeLine ModeLineInsert
|
|
endif
|
|
elseif a:mode == 'r'
|
|
hi link ModeLine ModeLineReplace
|
|
else
|
|
hi link ModeLine ModeLineNormal
|
|
endif
|
|
endfunction
|
|
|
|
au InsertEnter * call ModeColor(v:insertmode)
|
|
au InsertChange * call ModeColor(v:insertmode)
|
|
au InsertLeave * call ModeColor('n')
|
|
call ModeColor('n')
|
|
" }}}
|
|
|
|
" --- Bindings {{{
|
|
let mapleader = ","
|
|
" word movement with tab
|
|
nnoremap <Tab> W
|
|
nnoremap <S-Tab> B
|
|
" Close and write buffers
|
|
nnoremap <silent> <leader>q :b#<bar>bd#<CR>
|
|
nnoremap <silent> <leader>w :w<cr>
|
|
" Insert empty line before and after
|
|
nnoremap <silent> <C-o> o<ESC>kO
|
|
" Fuzzy Finder
|
|
nnoremap <silent> <leader>f :FufFile<cr>
|
|
" nnoremap <silent> <> ?^$<cr>
|
|
" evil spaces
|
|
nnoremap <silent> <leader>c m':%s/\s\+$//e<cr>`'
|
|
" double empty lines
|
|
nnoremap <silent> <leader>v m':%s/\n\{3,}/\r\r/e<cr>`'
|
|
" Toggle paste
|
|
nnoremap <silent> <leader>p :set invpaste paste?<cr>
|
|
" Quick tabularize
|
|
nnoremap <leader>a :Tabularize /
|
|
vnoremap <leader>a :'<,'>Tabularize /
|
|
" VimRC
|
|
nnoremap <leader>oc :e ~/.vimrc<cr>
|
|
nnoremap <leader>sc :so ~/.vimrc<cr>
|
|
" Toggle invisble chars
|
|
nnoremap <silent> <leader>i :set list!<cr>
|
|
" Vimux
|
|
nnoremap <leader>rr :call RunCmdVimux()<cr>
|
|
nnoremap <leader>rq :call VimuxCloseRunner()<cr>
|
|
nnoremap <silent> ; :call AddSemicolon()<cr>
|
|
nnoremap <silent> <leader>t :g/TODO/<cr>
|
|
nnoremap <silent> <C-G> :TigStatus<CR>
|
|
" 0 should find first non blank
|
|
nmap 0 ^
|
|
" Easy buffer switching
|
|
nnoremap <silent> M :bnext<cr>
|
|
nnoremap <silent> N :bprev<cr>
|
|
" Moving through windows
|
|
nnoremap <silent> <C-l> <C-w>l
|
|
nnoremap <silent> <C-h> <C-w>h
|
|
nnoremap <silent> <C-j> <C-w>j
|
|
nnoremap <silent> <C-k> <C-w>k
|
|
inoremap <silent> <C-l> <Esc><C-w>l
|
|
inoremap <silent> <C-h> <Esc><C-w>h
|
|
inoremap <silent> <C-j> <Esc><C-w>j
|
|
inoremap <silent> <C-k> <Esc><C-w>k
|
|
nnoremap K :q<cr>
|
|
" Quick macroing
|
|
nnoremap Q @@
|
|
" --- Don't need a help
|
|
inoremap <F1> <nop>
|
|
nnoremap <F1> <nop>
|
|
vnoremap <F1> <nop>
|
|
" -- Make Y behave correct
|
|
map Y y$
|
|
" -- Quick adding of spaces
|
|
nnoremap <silent> <space> i<space><Esc>l
|
|
|
|
" Showing and hiding special characters
|
|
nnoremap <silent> <leader>l :set nolist!<cr>
|
|
|
|
" Equally resize windows
|
|
nnoremap <silent> <leader>= :wincmd =<cr>
|
|
|
|
" Automatic running
|
|
autocmd filetype python nnoremap <F5> :w<cr>:!python %<cr>
|
|
|
|
" Sudo to write
|
|
cnoremap w!! w !sudo tee % >/dev/null
|
|
|
|
" --- Just a nuisance
|
|
map q: <nop>
|
|
|
|
" --- No moving in insert mode allowed
|
|
ino <down> <Nop>
|
|
ino <up> <Nop>
|
|
ino <left> <Nop>
|
|
ino <right> <Nop>
|
|
|
|
" --- Different use of undo
|
|
nnoremap U <c-r>
|
|
" }}}
|
|
|
|
" --- Useless whitespaces {{{
|
|
highlight WhitespaceEOL ctermbg=Red guibg=Red
|
|
match WhitespaceEOL /\s\+$/
|
|
" }}}
|
|
|
|
" --- Rice {{{
|
|
set statusline=\ %#Modified#%{IsModified()}%*
|
|
set statusline+=%f
|
|
set statusline+=\ %#ModeLine#%=%*
|
|
set statusline+=\ L%l
|
|
set statusline+=\ C%c
|
|
hi Modified ctermfg=red
|
|
hi StatusLine cterm=None ctermfg=green ctermbg=none
|
|
hi Search cterm=NONE ctermfg=none ctermbg=none
|
|
hi IncSearch cterm=underline ctermbg=none ctermfg=green
|
|
" }}}
|
|
|
|
" --- Supertab {{{
|
|
let g:SuperTabNoCompleteAfter = ['^',',','\s']
|
|
" }}}
|
|
|
|
" --- NERDTree config {{{
|
|
nmap <silent> <leader>e :NERDTreeToggle<CR>
|
|
" Open NERDTree when vim is started without files to open
|
|
autocmd StdinReadPre * let s:std_in=1
|
|
autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif
|
|
" Auto refresh NERDTree when focus
|
|
autocmd WinEnter * if exists('b:NERDTree') | execute 'normal R' | endif
|
|
let NERDTreeWinSize = 30
|
|
let NERDChristmasTree = 0
|
|
let NERDTreeChDirMode = 2
|
|
let NERDTreeIgnore=['\~$','\.pyc$','\.swp$']
|
|
let NERDTreeWinPos="left"
|
|
let NERDTreeMinimalUI = 1
|
|
let NERDTreeQuitOnOpen = 1
|
|
" }}}
|
|
|
|
" --- EasyMotion config {{{
|
|
let g:EasyMotion_do_mapping = 0 " Disable default mappings
|
|
|
|
map / <Plug>(easymotion-sn)
|
|
omap / <Plug>(easymotion-tn)
|
|
map ? <Plug>(easymotion-bd-jk)
|
|
map f <Plug>(easymotion-fl)
|
|
map F <Plug>(easymotion-Fl)
|
|
"map n <Plug>(easymotion-next)
|
|
"map N <Plug>(easymotion-prev)
|
|
" }}}
|
|
|
|
" --- Auto pairs config {{{
|
|
let g:lexima_enable_basic_rules = 1
|
|
" }}}
|
|
" --- Codestyle {{{
|
|
au BufRead,BufNewFile *.{cpp,hpp,h} match ErrorMsg '\%>80v.\+'
|
|
" }}}
|