set nocompatible " be iMproved, required filetype off " required " set the runtime path to include Vundle and initialize set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() " alternatively, pass a path where Vundle should install plugins "call vundle#begin('~/some/path/here') " let Vundle manage Vundle, required Plugin 'VundleVim/Vundle.vim' " Keep Plugin commands between vundle#begin/end. " plugin on GitHub repo Plugin 'scrooloose/nerdtree' " left panel with file explorer: F11 or ,b Plugin 'millermedeiros/vim-statline' " better buffer status line Plugin 'ervandew/supertab' " completion with in insert mode Plugin 'tomtom/tlib_vim' " utilities library for other plugins Plugin 'tomtom/tcomment_vim' " easy comments: gcc or gc Plugin 'tpope/vim-eunuch' " proxy to Linux commands, most notably :SudoWrite Plugin 'tpope/vim-surround' " new moves: i (inside) and a (around) Plugin 'oblitum/rainbow' " rainbow parentheses: ,r " Plugin 'kien/rainbow_parentheses' " superseeded by rainbow " Plugin 'sjl/gundo' " multiple path tree undo history Plugin 'fholgado/minibufexpl' " bottom « tabs » flat list of opened buffers Plugin 'majutsushi/tagbar' " right panel with functions/classes: ,é " Plugin 'terryma/vim-multiple-cursors' " Not enough vimesque, either `Ctrl-V` or `:%s` are sufficient. " Plugin 'airblade/vim-gitgutter' " Not enough useful compared to plain old `git diff`, at the end. Plugin 'terryma/vim-expand-region' " expand/shrink the current visual selection: + and - " Plugin 'tomtom/quickfixsigns_vim' " gutter with various symbols (too slow) " Plugin 'vim-scripts/TaskList' " Plugin 'kien/ctrlp' " Plugin 'Valloric/YouCompleteMe' " Plugin 'SirVer/ultisnips' " Plugin 'honza/vim-snippets' " Plugin 'jeaye/color_coded' Plugin 'lervag/vimtex' Plugin 'vim-scripts/a.vim' " alternate between header/code files: :A Plugin 'leafgarland/typescript-vim' " All of your Plugins must be added before the following line call vundle#end() " required filetype plugin indent on " required set nocompatible " do not try to be vi-compatible " call pathogen#infect() " set sessionoptions-=options " Because pathogen. set guifont=Deja\ Vu\ Sans\ Mono\ 10 syntax on " syntax coloring by default let base16colorspace=256 color base16-railscasts-noj set background=dark if &t_Co >= 256 && ! has("gui_running") " do not use solarized within term with 256 colors colorscheme inkpot endif set textwidth=120 set wrap " auto wrap line view, but not text itself filetype indent on " activates indenting for files set softtabstop=4 " width of a tab set tabstop=4 set shiftwidth=4 " width of the indentation set expandtab set ignorecase " case-insentive search by default set smartcase " search case-sensitive if there is an upper-case letter set gdefault " when replacing, use /g by default set showmatch " paren match highlighting set hlsearch " highlight what you search for set incsearch " type-ahead-find set wildmenu " command-line completion shows a list of matches set wildmode=longest,list:longest,full " Bash-vim completion behavior set autochdir " use current working directory of a file as base path set encoding=utf-8 set nu " show line numbers set showmode " show the current mode on the last line set showcmd " show informations about selection while in visual mode set guioptions-=T "remove toolbar set colorcolumn=72,120 " highligth the 80th and 120th column hi CursorLine gui=underline term=underline guibg=NONE ctermbg=NONE " The `!` implements a toggle nnoremap l :set cursorline! " all operations such as yy, D, and P work with the clipboard. " No need to prefix them with "* or "+ set clipboard=unnamed " New split placed below set splitbelow " New vsplit placed right set splitright set foldmethod=syntax set foldlevelstart=20 " buffer are always loaded with opened folds " persistent undo across sessions set undofile set undodir=~/.vim/undodir " always keep lines around the cursor set scrolloff=5 " Let cursor move past the last char in visual block mode set virtualedit=block " show more matching characters set matchpairs+=<:> let mapleader = "," " leader key is comma let maplocalleader = "\" " xx will delete the line without copying it into the default register nnoremap xx "_dd nnoremap t :set noexpandtab nnoremap T :set expandtab " Yank the line, comment it, paste it nmap g yygccp " When jumping to a given line, center the screen nnoremap G Gzz " ,v will reselect the text that was just pasted nnoremap v V`] " ,w will disable autowrap line break nnoremap w :set tw=0 nnoremap W :set tw=80 nnoremap x :set tw=120 " ,s will split vertically and swith over the new panel nnoremap s vl:bn " ,S will split horizontally and swith over the new panel nnoremap S sl:bn nnoremap nnoremap " Wrap a paragraph and justify it :runtime macros/justify.vim nnoremap j gw}{V}:call Justify('tw',4) " activate rainbow parenthesis " nnoremap R :RainbowParenthesesToggle nnoremap r :RainbowToggle " activate gundo nnoremap u :GundoToggle " remove all C/C++ comments and blank lines " nnoremap c :%s/\/\*\_.*\*\/\n\{,1}\|^\s*\/\/.*\n\|\s*\/\/.*//:%s/^\s*\n// nnoremap c :close nnoremap n :noh " set a tiny guifont size nnoremap h :set guifont=Deja\ Vu\ Sans\ Mono\ 4 " set a normal guifont size nnoremap f :set guifont=Deja\ Vu\ Sans\ Mono\ 12 " set a big guifont size nnoremap ç :set guifont=Deja\ Vu\ Sans\ Mono\ 16 " highligth git merge marks nnoremap m /[<=>]\{7\} " double percentage sign in command mode is expanded " to directory of current file - http://vimcasts.org/e/14 cnoremap %% =expand('%:h').'/' " Put plugins and dictionaries in this dir (also on Windows) let vimDir = '$HOME/.vim' let &runtimepath.=','.vimDir " Keep undo history across sessions by storing it in a file if has('persistent_undo') let myUndoDir = expand(vimDir . '/undodir') " Create dirs call system('mkdir ' . vimDir) call system('mkdir ' . myUndoDir) let &undodir = myUndoDir set undofile endif " Ctrl-P config let g:ctrlp_working_path_mode = 'ra' " search for files from the nearest ancestor that contains a VCS let g:ctrlp_user_command = ['.git', 'cd %s && git ls-files'] " list only files versionned within GIT map p :CtrlP " semantic selection expansion/shrink map + (expand_region_expand) map - (expand_region_shrink) " reload config after editing vimrc autocmd! BufWritePost .vimrc source $MYVIMRC " use shift-space as escape "inoremap " print tabs with a special character (add ",eol:·" for end of lines) " set listchars=trail:·,nbsp:·,tab:▸\ ,extends:»,precedes:«, set listchars=trail:·,nbsp:·,tab:˲\ ,extends:»,precedes:«, set list " au VimEnter * echomsg system('/usr/games/fortune vimtweets') "au FocusLost * :wa " save every opened buffer when the window lost focus set laststatus=2 " always show the statusline, even when there is only one file edited " if has("statusline") " "set statusline=\ %f%m%r\ [%{strlen(&ft)?&ft:'aucun'},%{strlen(&fenc)?&fenc:&enc},%{&fileformat},ts:%{&tabstop}]%{fugitive#statusline()}%=%l,%c%V\ %P " set statusline=\ %f%m%r\ [%{strlen(&ft)?&ft:'aucun'},%{strlen(&fenc)?&fenc:&enc},%{&fileformat},ts:%{&tabstop}]%=%l,%c%V\ %P " elseif has("cmdline_info") " set ruler " show current line and column number " endif " Style of the status line of the current window hi StatusLine ctermfg=15 ctermbg=239 cterm=bold guifg=#000000 guibg=#ffaa00 gui=bold " Style of the status line of the Non-Current window "hi StatusLineNC ctermfg=249 guifg=#b2b2b2 ctermbg=237 guibg=#3a3a3a cterm=none gui=none if has("fname_case") au BufNewFile,BufRead *.lsp,*.lisp,*.el,*.cl,*.jl,*.L,.emacs,.sawfishrc,*.pddl setf lisp else au BufNewFile,BufRead *.lsp,*.lisp,*.el,*.cl,*.jl,.emacs,.sawfishrc,*.pddl setf lisp endif au BufRead,BufNewFile *.thrift setfiletype thrift au BufRead,BufNewFile *.ts setfiletype typescript " move the current line up or down with the Ctrl-arrow keys nmap :move .+1 nmap :move .-2 imap :move .+1 imap :move .-2 vmap :move '>+1gv vmap :move '<-2gv " filetype plugin on " set ofu=syntaxcomplete#Complete au BufRead,BufNewFile *.mwiki setf Wikipedia au BufRead,BufNewFile *.wikipedia.org.* setf Wikipedia " autocomplétion with instead of , depending on the context " function! Smart_TabComplete() " let line = getline('.') " curline " let substr = strpart(line, -1, col('.')+1) " from start to cursor " let substr = matchstr(substr, "[^ \t]*$") " word till cursor " if (strlen(substr)==0) " nothing to match on empty string " return "\" " endif " let has_period = match(substr, '\.') != -1 " position of period, if any " let has_slash = match(substr, '\/') != -1 " position of slash, if any " if (!has_period && !has_slash) " return "\\" " existing text matching " elseif ( has_slash ) " return "\\" " file matching " else " return "\\" " plugin matching " endif " endfunction " inoremap =Smart_TabComplete() " Append modeline after last line in buffer. " Use substitute() instead of printf() to handle '%%s' modeline in LaTeX " files. function! AppendModeline() let l:modeline = printf(" vim: set ts=%d sw=%d tw=%d :", \ &tabstop, &shiftwidth, &textwidth) let l:modeline = substitute(&commentstring, "%s", l:modeline, "") call append(line("$"), l:modeline) endfunction nnoremap ml :call AppendModeline() "switch spellcheck languages let g:myLang = 0 let g:myLangList = [ "nospell", "fr_fr", "en_gb" ] function! MySpellLang() "loop through languages let g:myLang = g:myLang + 1 if g:myLang >= len(g:myLangList) | let g:myLang = 0 | endif if g:myLang == 0 | set nospell | endif if g:myLang == 1 | setlocal spell spelllang=fr_fr | endif if g:myLang == 2 | setlocal spell spelllang=en_us | endif echo "language:" g:myLangList[g:myLang] endf map :call MySpellLang() imap :call MySpellLang() " search the file for FIXME, TODO and put them in a handy list map TaskList " side pane of class and functions "map :TlistToggle nmap :TagbarToggle nnoremap é :TagbarToggle " side pane of files map :NERDTreeToggle nnoremap b :NERDTreeToggle " nnoremap t :NERDTreeToggle " " let NERDTreeSortOrder=['\.h$','\.hpp$','\.cpp$'] " NERDTress File highlighting function! NERDTreeHighlightFile(extension, fg) let a_name = 'ndhf_' . substitute(a:extension, "\\.", "_", "") exec 'autocmd FileType nerdtree highlight '.a_name.' ctermbg='.'NONE'.' ctermfg='.a:fg.' guibg='.'NONE'.' guifg='.a:fg exec 'autocmd FileType nerdtree syn match '.a_name.' #^\s\+.*'.a:extension.'\W\**$#' exec 'autocmd FileType nerdtree syn match '.a_name.' #^\s\+.*'.a:extension.'$#' endfunction " doc call NERDTreeHighlightFile('README', 'green') call NERDTreeHighlightFile('md' , 'green') " source files call NERDTreeHighlightFile('c' , 'lightmagenta') call NERDTreeHighlightFile('cc' , 'lightmagenta') call NERDTreeHighlightFile('cpp', 'lightmagenta') call NERDTreeHighlightFile('mm' , 'lightmagenta') call NERDTreeHighlightFile('hpp', 'lightred') " headers call NERDTreeHighlightFile('h' , 'cyan') " shell scripts call NERDTreeHighlightFile('sh' , 'lightgreen') call NERDTreeHighlightFile('bash', 'lightgreen') " scripts call NERDTreeHighlightFile('py' , 'yellow') " makefiles call NERDTreeHighlightFile('CMakeLists.txt', 'red') call NERDTreeHighlightFile('Doxyfile.in', 'red') call NERDTreeHighlightFile('Doxyfile', 'lightred') call NERDTreeHighlightFile('makefile' , 'lightred') call NERDTreeHighlightFile('Makefile' , 'lightred') " go to definition and center screen (navigate forward in the tags stack) "nnoremap :YcmCompleter GoTozz " jump back from definition (navigate backward in the jumps stack) "nnoremap " open the definition in a vertical split and center screen "nnoremap :vsp :exec(":YcmCompleter GoTo")zz "nnoremap ? :YcmCompleter GetDoc " Trigger configuration. Do not use if you use https://github.com/Valloric/YouCompleteMe. let g:UltiSnipsExpandTrigger="" " configure tags - add additional tags here or comment out not-used ones " set tags+=./tags;$HOME " set tags+=~/code/paradiseo/tags " set tags+=~/.vim/tags/cpp " build tags of your own project with CTRL+F12 map :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . " go to definition and center screen (navigate forward in the tags stack) nnoremap zz " jump back from definition (navigate backward in the tags stack) nnoremap " open the definition in a vertical split and center screen nnoremap :vsp :exec("tag ".expand(""))zz " OmniCppComplete " let OmniCpp_NamespaceSearch = 1 " let OmniCpp_GlobalScopeSearch = 1 " let OmniCpp_ShowAccess = 1 " let OmniCpp_ShowPrototypeInAbbr = 1 " show function parameters " let OmniCpp_MayCompleteDot = 1 " autocomplete after . " let OmniCpp_MayCompleteArrow = 1 " autocomplete after -> " let OmniCpp_MayCompleteScope = 1 " autocomplete after :: " let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"] " automatically open and close the popup menu / preview window " au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif " set completeopt=menuone,menu,longest,preview " close the buffer without deleting its window ":runtime bundle/bclose.vim " nmap :bc Kwbd " nmap d :b#bd# " nmap :bc :b#bd# let g:tex_flavor = 'latex' nmap lt (vimtex-toc-toggle)