diff --git a/vim/vimrc b/vim/vimrc index f7be7e3..636f055 100755 --- a/vim/vimrc +++ b/vim/vimrc @@ -1,7 +1,23 @@ -"source $VIMRUNTIME/vimrc_example.vim -"source $VIMRUNTIME/mswin.vim -"behave mswin +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" 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 @@ -11,47 +27,211 @@ if has("multi_byte") "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 noexpandtab +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 -set nocompatible " Use Vim defaults (much better!) -set backspace=indent,eol,start " allow backspacing over everything in insert mode -"set bs=2 " allow backspacing over everything in insert mode -"set backup " keep a backup file -set viminfo='20,\"50 " read/write a .viminfo file, don't store more - " than 50 lines of registers -set history=50 " keep 50 lines of command line history -set ruler " show the cursor position all the time -set tabstop=4 " make tabes to be equal to 4 space chars. -set shiftwidth=4 " for indentation shift by 4 chars. -set noexpandtab " don't expand tabs. For MG devel/mg/.vimrc sets expandtab. -set softtabstop=4 " insert/ deletes 4 space chars. -set smarttab " insert/ space in front of line instead of tab. -set fileformat=unix " line ending is unix -set textwidth=80 " 80 char text +" 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 + + + + + + +set viminfo='20,\"50 " read/write a .viminfo file, don't store more +" 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 -" In many terminal emulators the mouse works just fine, thus enable it. -if has('mouse') - set mouse=a + +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 + +"set autoread "update file modified outside of vim + +" 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 +" + +" 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") + set spell +endif +" Show 80th column. +if exists("+colorcolumn") + set colorcolumn=+1 " color textwidth+1-th line endif -" a copy-past from my linux vimrc -if &term=="xterm" - set t_Co=8 - set t_Sb=[4%dm - set t_Sf=[3%dm -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 " 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 - " - " This will turn on svrf highlighting - au BufRead,BufNewFile *.svrf set filetype=calibre + syntax on + set hlsearch endif +" 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:ยท + + + +" +" .gvimrc content here. +" +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 + colors vahagn_black_terminal +endif +" Configure coloring on command line terminals. +if &term=="xterm" + set t_Co=8 + set t_Sb=[4%dm + set t_Sf=[3%dm +endif +" In many terminal emulators the mouse works just fine, thus enable it. +if has('mouse') +" set mouse=n +endif + + + + + + + + + + + + + + + + + " 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 @@ -61,144 +241,91 @@ endif " try to quit without saving, and swap files will keep you safe if your computer " crashes. if exists('&hidden') - set hidden -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 -endif - -" Display line numbers on the left -if exists('&number') - set number -endif - -" Turn on spell check. -if exists("+spell") - set spell -endif - -" Show 80th column. -if exists("+colorcolumn") - set colorcolumn=+1 " color textwidth+1-th line + set hidden endif " Modelined are used to configure files. if exists('&modeline') - set modeline - set modelines=10 + set modeline + set modelines=10 endif -" Set fold method if supported +" Set fold method if supported if has('folding') - set nofoldenable - set foldmethod=indent "fold based on indent - set foldnestmax=5 - set foldlevel=1 - 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 - -" Unset expandtab for make files in any case. -if has('autocmd') - autocmd FileType make setlocal noexpandtab -endif - -" Set expandtab for python files in any case. -if has('autocmd') - autocmd FileType python setlocal expandtab + 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 + " 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 - " Put these in an autocmd group, so that we can delete them easily. - augroup vimrcEx - au! + " 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\+/ - " For all text files set 'textwidth' to 78 characters. - autocmd FileType text setlocal textwidth=79 + " 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 + " 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 -else - set autoindent " always set autoindenting on endif " has("autocmd") " Convenient command to see the difference between the current buffer and the " file it was loaded from, thus the changes you made. " Only define it when not defined already. if !exists(":DiffOrig") - command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis - \ | wincmd p | diffthis + command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis + \ | wincmd p | diffthis endif -set diffexpr=MyDiff() -function MyDiff() - let opt = '-a --binary ' - if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif - if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif - let arg1 = v:fname_in - if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif - let arg2 = v:fname_new - if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif - let arg3 = v:fname_out - if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif - let eq = '' - if $VIMRUNTIME =~ ' ' - if &sh =~ '\ ' . arg3 . eq -endfunction - -" Don't let vim be too smart. -set formatoptions=cql +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Key Mappings " -" P4 -command! -nargs=* PFedit :!p4 edit % -command! -nargs=* PFrevert :!p4 revert % -command! -nargs=* PFdiff :!p4 diff % + +" F4 grep the word under cursor. +map :execute "grep " . expand("") . " -r *.h *.cpp *.c *.f" cw +" Create a new tab. +map :tabnew +" +"command! -nargs=* PFdiff :!p4 diff % " " Loads CF5Compile " Compile and run file if Ctrl-F5 is pressed. " if !exists('*CF5Compile') - runtime plugin/cf5-compiler.vim -endif + runtime plugin/cf5-compiler.vim +endif map :call CF5Compile(1) map :call CF5Compile(0) " @@ -214,7 +341,7 @@ noremap gj imap gk imap gj " -" Working with tabs especially if using Putty. +" Working with tabs especially if using console version. " nnoremap th :tabfirst nnoremap tj :tabnext @@ -223,41 +350,38 @@ nnoremap tl :tablast nnoremap tm :tabm nnoremap td :tabclose " -" .gvimrc content here. +" .gvimrc content here. " if has("gui_running") - - colors darkblue " set color scheme - set lines=50 - set columns=85 - if has("win32") || has("win64") - set guifont=FreeMono:h14:cANSI - "set guifont=Courier\ AM:h12 - endif + ":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 - ":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 - - " Open file in a new tab. + " Open file in a new tab. if has("browsefilter") let g:browsefilter = "All Files (*.*)\t*\n" endif - "if has("browse") - map :browse tabnew %:p:h - "endif else - colors vahagn_black_terminal endif +" +" 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' + call vundle#end() + filetype plugin indent on +endif