"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Behaviour. " " All our scripts and files are here. if filereadable(expand("~/devel/scripts/vim/vimrc")) set runtimepath+=~/devel/scripts/vim endif " Set 'nocompatible' to ward off unexpected things that your distro might " have made, as well as sanely reset options when re-sourcing .vimrc set nocompatible " Line ending is UNIX. set fileformat=unix " Swap files go here. "set directory="~/tmp,." console version complains all the time. " Don't backup files. set nobackup "set backupdir="~/tmp,." git commit doesn't work. " Try to set up UTF-8 encoding. if has('multi_byte') if &termencoding == "" let &termencoding = &encoding endif set encoding=utf-8 setglobal fileencoding=utf-8 "setglobal bomb set fileencodings=ucs-bom,utf-8,latin1 endif " Make tabes to be equal to 4 space chars. set tabstop=4 " Number of spaces a counts. If different from tabstop a combination of " tabs and spaces will be inserted. set softtabstop=4 " For indentation shift by 4 chars. set shiftwidth=4 " When on insert shiftwidth space in front of line. When off inserts " blanks according to softtabstop. set smarttab " Don't expand tabs. set expandtab if has('autocmd') " Unset expandtab for make files in any case. autocmd FileType make setlocal noexpandtab " Set expandtab for python files in any case. autocmd FileType python setlocal expandtab endif " Attempt to determine the type of a file based on its name and possibly its " contents. Use this to allow intelligent auto-indenting for each filetype, " and for plugins that are filetype specific. filetype indent plugin on " When opening a new line and no filetype-specific indenting is enabled, keep " the same indent as the line you're currently on. Useful for READMEs, etc. set autoindent " Allow backspacing over autoindent, line breaks and start of insert action set backspace=indent,eol,start " Stop certain movements from always going to the first character of a line. " While this behaviour deviates from that of Vi, it does what most users " coming from other editors would expect. set nostartofline " Try to not cross 80 char boundary. set textwidth=80 " Existing long lines are not broken. set formatoptions+=l " Auto-wrap comments using textwidth. set formatoptions=cq " Insert comment leader if is hit in insert mode or 'o' in Normal mode. set formatoptions+=ro "set formatoptions-=o " don't autoformat on 'o' e.g. comment wrapping " " C++ oriented. " "do not auto insert single line comments set comments-=:// " Auto-insert multi-line comment continuations set comments+=f:// " Do not indent after namespace XX{ set cino+=N-s " Match open-bracket indentation when breaking parameter lists over multiple " lines. set cino+=(0 " enable omni completion set omnifunc=syntaxcomplete#Complete " If modlines available then turn it on so each file could set its settings. " ex. # vim: set expandtab: if exists('+modeline') set modeline set modelines=5 endif " read/write a .viminfo file, don't store more if exists('+viminfo') set viminfo='20,\"50 endif " than 50 lines of registers let g:netrw_preview = 1 " netrw open window to the right let g:netrw_browse_split = 3 " open in a tab set ttyfast "tf "smooths redraw by using more bandwidth "set sessionoptions-=options "show shortmessages "set shortmess+=atIW " Set timeout for detecting command key sequence set timeoutlen=400 " Quickly time out on keycodes, but never time out on mappings set notimeout ttimeout ttimeoutlen=200 " Use to toggle between 'paste' and 'nopaste' "set pastetoggle= """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Display " " Configure coloring on command line terminals. if &term=="xterm" " enable 256 colors set t_Co=256 " set t_Co=8 set t_Sb=[4%dm set t_Sf=[3%dm endif " " Configure color theme, fonts and other graphics. " if has('gui_running') " set color scheme colorscheme darkblue "set guioptions-=m "set guioptions-=T set lines=50 set columns=85 " Set the font. if has("win32") || has("win64") "set guifont=FreeMono:h14:cANSI "set guifont=Courier\ AM:h12 else "set guifont=Bitstream\ Vera\ Sans\ Mono\ 12 set guifont=Monospace\ 12 endif else colorscheme vahagn_black_terminal endif " Switch syntax highlighting on, when the terminal has colors " Also switch on highlighting the last used search pattern. if &t_Co > 2 || has('gui_running') syntax on set hlsearch endif " wrap text at window edge without modifying buffer set nowrap " Scroll this much chars when scrolled horizontally. set sidescroll=1 " break at a suitable character (as in breakat) "set linebreak " Begin scrolling this lines from window edge. set scrolloff=0 " Set the command window height to 2 lines, to avoid many cases of having to " press to continue" set cmdheight=2 " Always display the status line, even if only one window is displayed set laststatus=2 " Display the cursor position on the last line of the screen or in the status " line of a window if exists('+ruler') set ruler endif " Instead of failing a command because of unsaved changes, raise a dialogue " asking if you wish to save changed files. if exists('+confirm') set confirm endif " Use visual bell instead of beeping when doing something wrong if exists('+visualbell') set visualbell " And reset the terminal code for the visual bell. If visualbell is set, and " this line is also included, vim will neither flash nor beep. If visualbell " is unset, this does nothing. set t_vb= endif " Display line numbers on the left if exists('+number') set number endif " Turn on spell check. if exists('+spell') && !&diff set spell highlight clear SpellBad highlight SpellBad cterm=underline ctermfg=red endif " Show 80th column. if exists('+colorcolumn') set colorcolumn=+1 " color textwidth+1-th line endif " Show command-line completion above the command line. set wildmenu " wildmenu ignore list set wildignore=*.o,*.obj,*.bak,*.exe,*.d,*.dd " Complete to longest common string set wildmode=longest:full " remember more history set history=1000 " Highlight searched string as typed. set incsearch " Enable syntax highlighting highlight DiffAdd cterm=none ctermfg=Black ctermbg=Green gui=none guifg=Black guibg=Green highlight DiffDelete cterm=none ctermfg=Black ctermbg=Red gui=none guifg=Black guibg=Red highlight DiffChange cterm=none ctermfg=Black ctermbg=Yellow gui=none guifg=Black guibg=Yellow highlight DiffText cterm=none ctermfg=Black ctermbg=Magenta gui=none guifg=Black guibg=Magenta " Display tabs and trailing spaces visually set list set listchars=tab:>-,trail:ยท " In many terminal emulators the mouse works just fine, thus enable it. if has('mouse') " set mouse=n endif """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " vimdiff " " Turn on spell check. if &diff "turn off spelling set nospell " ignore whitespaces set diffopt+=iwhite endif """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " TODO: review " " One such option is the 'hidden' option, which allows you to re-use the same " window and switch from an unsaved buffer without saving it first. Also allows " you to keep an undo history for multiple files when re-using the same window " in this way. Note that using persistent undo also lets you undo in multiple " files even in the same window, but is less efficient and is actually designed " for keeping undo history after closing Vim entirely. Vim will complain if you " try to quit without saving, and swap files will keep you safe if your computer " crashes. if exists('&hidden') set hidden endif " Set fold method if supported if has('folding') set nofoldenable set foldmethod=indent "fold based on indent set foldnestmax=3 set foldminlines=4 set foldlevel=1 set foldcolumn=2 " foldcolumn is width 2 if has("autocmd") autocmd FileType vim setlocal foldmethod=marker autocmd FileType c setlocal foldmethod=syntax autocmd FileType h setlocal foldmethod=syntax autocmd FileType cpp setlocal foldmethod=syntax endif endif " Only do this part when compiled with support for autocommands. if has('autocmd') " Enable file type detection. " Use the default filetype settings, so that mail gets 'tw' set to 72, " 'cindent' is on in C files, etc. " Also load indent files, to automatically do language-dependent indenting. filetype plugin indent on " start with all folds open au BufRead,BufNewFile,BufWinEnter * normal zR " highlight lone colon characters highlight WarnChar ctermbg=yellow ctermfg=red guibg=#FFCC33 guifg=#FF0000 "apply highlight when opening a file, changing text (N or I), or opening a split au BufRead,InsertCharPre *.cpp 2mat WarnChar /\w\+;\?:;\?\w\+/ " Put these in an autocmd group, so that we can delete them easily. augroup vimrcEx au! " When editing a file, always jump to the last known cursor position. " Don't do it when the position is invalid or when inside an event handler " (happens when dropping a file on gvim). " Also don't do it when the mark is in the first line, that is the default " position when opening a file. autocmd BufReadPost * \ if line("'\"") > 1 && line("'\"") <= line("$") | \ exe "normal! g`\"" | \ endif augroup END endif " has("autocmd") """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Commands " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Key Mappings " " " if has('gui_running') ":tab drop {file} " Hide show menu and toolbar. map :if &guioptions =~# 'm' \set guioptions-=m \set guioptions-=T \set showtabline=0 \else \set guioptions+=m \set guioptions+=T \set showtabline=1 \endif endif " open ctag definition in new tab map :tab split:exec("tag ".expand("")) " Create a new tab. "map :tabnew " " Grep the word under cursor. " " Grep options affect GNU grep. The intend is that greps not supporting the " options will continue working without options. " let $GREP_OPTIONS.=' --exclude-dir=.git --exclude-dir=.svn' let $GREP_OPTIONS.=' --exclude=tags --exclude=*.o --exclude=*.log' let $GREP_OPTIONS.=' --exclude=*.swp' let $GREP_OPTIONS.=' --exclude-dir=llcalc* --exclude-dir=00*' "let $GREP_OPTIONS.=' --include *.sh' "let $GREP_OPTIONS.=' --include *.php' "let $GREP_OPTIONS.=' --include *.h --include *.cpp --include *.c' "let $GREP_OPTIONS.=' --include *.py' "let $GREP_OPTIONS.=' --include *.java' "let $GREP_OPTIONS.=' --include *.f' "let $GREP_OPTIONS.=' --include *.xsd --include *.xml' "let $GREP_OPTIONS.=' --include Makefile' map af :execute "grep! ".expand("")." -r ." cw " " Loads CF5Compile " Compile and run file if Ctrl-F5 is pressed. " if !exists('*CF5Compile') runtime plugin/cf5-compiler.vim endif map a4 :call CF5CompileOnly() map a5 :call CF5CompileAndRun() " " 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 " " Move through wrapped lines instead of buffer lines. " noremap gk noremap gj "imap gk "imap gj " " Working with tabs especially if using console version. " nnoremap th :tabfirst nnoremap tj :tabnext nnoremap tk :tabprev nnoremap tl :tablast nnoremap tm :tabm nnoremap td :tabclose " " Locate and load .vimrc.local from curent directory. " if !exists('*LocalVimrcLoad') runtime plugin/local-vimrc.vim endif call LocalVimrcLoad( getcwd() ) """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Plugins " " " Vundle experimental stuff here. " if filereadable(expand('~/.vim/bundle/Vundle.vim/README.md')) filetype off set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() Plugin 'VundleVim/Vundle.vim' " " Adds nice status and tabline. " Plugin 'bling/vim-airline' let g:airline#extensions#tabline#enabled = 1 let g:airline#extensions#tabline#left_sep = ' ' let g:airline#extensions#tabline#left_alt_sep = '|' " " Manipulation with buffers and tabs. " Plugin 'vim-scripts/Buffergator' let g:buffergator_suppress_keymaps = 1 let g:buffergator_viewport_split_policy = "L" map ab :BuffergatorToggle "map at :BuffergatorTabsToggle " " " "Plugin 'eiginn/netrw' "let g:netrw_altv = 1 "let g:netrw_fastbrowse = 2 "let g:netrw_keepdir = 0 "let g:netrw_liststyle = 3 "let g:netrw_retmap = 1 "let g:netrw_silent = 1 "let g:netrw_special_syntax= 1 "map :Explore "map :Explore %:p:h " " " Plugin 'scrooloose/nerdtree' let g:NERDTreeQuitOnOpen = 1 let g:NERDTreeDirArrows = 1 let g:NERDTreeDirArrowExpandable = '+' let g:NERDTreeDirArrowCollapsible = '-' let g:NERDTreeIgnore = ['\.o$', '\.so$', '\.tsk$'] map at :NERDTreeToggle "map am :NERDTreeFind " " :A switches to the header file (or vise versa) " :AS splits and switches " :AV vertical splits and switches " :AT new tab and switches " :AN cycles through matches " :IH switches to file under cursor " :IHS splits and switches " :IHV vertical splits and switches " :IHT new tab and switches " :IHN cycles through matches " ih switches to file under cursor " is switches to the alternate file of file under " cursor (e.g. on switches to foo.cpp) " ihn cycles through matches " Plugin 'vim-scripts/a.vim' let g:alternateExtensions_h = "cpp,c" let g:alternateExtensions_cpp = "h" let g:alternateExtensions_c = "h" map ah :A " " Comment code. " gc - visusl mode - comment selection. " "Plugin 'tpope/vim-commentary' " " Git wrapper. " Plugin 'tpope/vim-fugitive' " " Shows git diff. " [c - jump prev diff " ]c - jump nex diff " hs - stage the hunk " hr - revert the hunk " :GitGutterNextHunk " :GitGutterPrevHunk " :GitGutterStageHunk " :GitGutterRevertHunk " :GitGutterToggle " :GitGutterLineHighlightsToggle " Plugin 'airblade/vim-gitgutter' set signcolumn=yes let g:gitgutter_map_keys = 0 let g:gitgutter_realtime = 0 let g:gitgutter_eager = 0 " " Check syntaxis on fly. " "Plugin 'scrooloose/syntastic' "let g:syntastic_cpp_compiler_options = ' -std=c++1y' "let g:syntastic_mode_map = { " \ "mode": "active", " \ "active_filetypes": ["ruby", "php"], " \ "passive_filetypes": ["c", "cpp"] } " " Nice colorschemes. " if &t_Co >= 256 || has('gui_running') Plugin 'nanotech/jellybeans.vim' "colorscheme jellybeans "let g:jellybeans_use_lowcolor_black = 0 endif if &t_Co >= 256 || has('gui_running') Plugin 'altercation/vim-colors-solarized.git' let g:solarized_termcolors=256 "set backgroung=dark "set backgroung=light "colorscheme solarized endif " " :set syntax=cpp.doxygen to highlight doxygen comments. " Plugin 'vim-scripts/DoxyGen-Syntax' " " In vim, place the cursor on the line and " :DoxLic - generates license comment. " :DoxAuthor - skeleton and leave the cursor just after @author tag. " :Dox - generates function/class comment. " :DoxUndoc(DEBUG) - if you want to ignore all code fragment ifdefed with " DEBUG. " :DoxBlock - " Plugin 'vim-scripts/DoxygenToolkit.vim' " " Color table and picker. " :XtermColorTable " press: # to yank, t to toggle, f to set text color " "Plugin 'xterm-color-table.vim' " call vundle#end() filetype plugin indent on filetype plugin on endif if exists("dddd") "Plugin 'Rip-Rip/clang_complete' "Plugin 'flazz/vim-colorschemes' "Plugin 'Valloric/YouCompleteMe' "Plugin 'rhysd/vim-clang-format' Plugin 'vim-scripts/Mark' Plugin 'danro/rename.vim' Plugin 'kana/vim-operator-user' Plugin 'kien/ctrlp.vim' let g:ctrlp_root_markers = ['.ctrlp'] let g:ctrlp_custom_ignore = { \ 'file': '\v\.(o|d|dd)$', \ } Plugin 'majutsushi/tagbar' map :TagbarToggle let g:tagbar_autoclose = 1 let g:tagbar_autofocus = 1 let g:tagbar_autoshowtag = 1 let g:tagbar_compact = 1 let g:tagbar_indent = 1 let g:tagbar_sort = 1 let g:tagbar_width = 60 let g:tagbar_ctags_bin = "/opt/swt/bin/ctags" Plugin 'mattn/emmet-vim' Plugin 'tmhedberg/matchit' Plugin 'tpope/vim-dispatch' Plugin 'tpope/vim-unimpaired' Plugin 'vim-scripts/Align' Plugin 'vim-scripts/taglist.vim' Plugin 'vim-scripts/xml.vim' Plugin 'junegunn/vim-easy-align' Plugin 'ntpeters/vim-better-whitespace' let g:strip_whitespace_on_save = 1 "Plugin 'vim-scripts/TagHighlight' "Plugin 'gcmt/taboo.vim' "let g:taboo_tab_format = "[%m:%N:%W] %f" " - - - - - - - - - - - - - - " powerline " - - - - - - - - - - - - - - let g:Powerline_symbols = "unicode" " Ack Plugin 'mileszs/ack.vim' let g:ack_default_options = " --ignore-file=is:tags -s -H --nocolor --nogroup --column" let g:ack_highlight = 1 endif