" Vim configuration file " Language: Vim 5.6 script (with Vim 6.0 features) " Maintainer: Lubomir Host " Bugs Reports: Lubomir Host " License: GNU GPL " Version: 2002.02.05 " $Id: vimrc,v 1.39 2002/02/06 00:48:36 host8 Exp $ " Settings {{{ " To be secure & Vi nocompatible set secure nocompatible if version >= 600 syntax enable filetype on filetype plugin on filetype indent on else syntax on endif " Settings for C language {{{ let c_gnu=1 let c_comment_strings=1 let c_space_errors=1 " }}} " History and viminfo settings {{{ if has("history") set history=10000 endif if has("viminfo") if filewritable(expand("$HOME/.vim/viminfo")) == 1 || \ filewritable(expand("$HOME/.vim/")) == 2 set viminfo=!,%,'5000,\"10000,:10000,/10000,n~/.vim/viminfo else set viminfo= endif endif " Don't save backups of files. set nobackup " }}} " Status line settings {{{ ":set ruler " Display a status-bar. set laststatus=2 if has("statusline") set statusline=%1*%{GetID()}%0*%<%f\ %3*%m%1*%r%0*\ %2*%y%4*%w%0*%=[%b\ 0x%B]\ \ %8l,%10([%c%V/%{strlen(getline(line('.')))}]%)\ %P endif " }}} " Settings for Explorer script {{{ let g:explDetailedHelp=1 let g:explDetailedList=1 let g:explDateFormat="%d %b %Y %H:%M" "}}} " Settings for gcc & make {{{ let g:cflags="-Wall -pedantic" let g:c_debug_flags="-ggdb -DDEBUG" let g:makeflags="" "}}} " Settings for AutoLastMod {{{ " Set this to 1 if you will automaticaly change date of modification of file. let g:autolastmod=1 " Modification is made on line like this variable: let g:autolastmodtext="Last modified: " " }}} " Priority between files for file name completion (suffixes) {{{ " Do not give .h low priority in command-line filename completion. set suffixes-=.h set suffixes+=.aux set suffixes+=.bbl set suffixes+=.blg set suffixes+=.log set wildignore+=*.dvi " }}} " Automatically setting options in various files set modeline " Available TAGS files set tags=./TAGS,./tags,tags " Don't add EOF at end of file set noendofline " Do case insensitive matching set noignorecase set showfulltag set ch=2 bs=2 tabstop=4 set incsearch report=0 title set showcmd showmatch showmode " Indent of 1 tab with size of 4 spaces set tabstop=4 set shiftwidth=4 " Use an indent of 4 spaces, with no tabs. This setting is recommended by PEAR " (PHP Extension and Application Repository) Conding Standarts. If you want " this setting uncomment the expandtab setting below. ":set expandtab " Settings for mouse (gvim under Xwindows) set nomousefocus mousehide " Cursor always in the middle of the screen set scrolloff=999 " Make window maximalized set winheight=100 " The screen will not be redrawn while executing macros, registers " and other commands that have not been typed. To force an updates use |:redraw|. set lazyredraw " Vim beeping go to the hell... set vb t_vb= " Set this, if you will open all windows for files specified " on the commandline at vim startup. "let g:open_all_win=1 let g:open_all_win=0 " Settings for folding long lines let g:fold_long_lines=300 " }}} " Keybord mappings {{{ " " start of line "noremap i inoremap cnoremap " end of line noremap i inoremap " back one word inoremap " forward one word "inoremap " Switching between windows by pressing one time CTRL-X keys. noremap " Tip from http://vim.sourceforge.net/tips/tip.php?tip_id=173 noremap j_ noremap k_ " Make Insert-mode completion more convenient: imap set remap map :split imap :split " diakritika ":map :so ~/.vim/diakritika.vim ":imap :so ~/.vim/diakritika.vim " Open new window with the file ~/.tcshrc (my shell configuration file) map :split ~/.tcshrc imap :split ~/.tcshrc " Open new window with file ~/.vimrc (ViM configuration file) map :split ~/.vimrc imap :split ~/.vimrc " Open new window with dir ~/.vim (ViM configuration dir) map :split ~/.vim imap :split ~/.vim " Safe delete line (don't add line to registers) ":imap "_ddi imap :call SafeLineDelete()i " Search for the current Visual selection. vmap S y/=escape(@",'/\') " Mappings for folding {{{ " Open one foldlevel of folds in whole file " Note: 'Z' works like 'z' but for all lines in file noremap Zo mzggvGzo'z noremap ZO mzggvGzO'z " same as 'zR' noremap Zc mzggvGzc'z noremap ZC mzggvGzC'z noremap Zd mzggvGzd'z noremap ZD mzggvGzD'z noremap Za mzggvGza'z noremap ZA mzggvGzA'z noremap Zx mzggvGzx'z noremap ZX mzggvGzX'z " }}} " }}} " New commands {{{ command! -nargs=1 Printf call libcallnr("/lib/libc.so.6", "printf", ) command! -nargs=0 FoldLongLines call FoldLongLines() command! -nargs=0 Indent call Indent() command! -nargs=0 CallProg call CallProg() command! -nargs=0 OpenAllWin call OpenAllWin() command! -nargs=0 UnquoteMailBody call UnquoteMailBody() command! -nargs=* ReadFileAboveCursor call ReadFileAboveCursor() command! -nargs=* R call ReadFileAboveCursor() " }}} " Autocomands {{{ if has("autocmd") " Autocomands for ~/.vimrc {{{ augroup VimConfig autocmd! " Reread configuration of ViM if file ~/.vimrc is saved autocmd BufWritePost ~/.vimrc so ~/.vimrc autocmd BufWritePost vimrc so ~/.vimrc augroup END " }}} " Autocommands for *.c, *.h, *.cc *.cpp {{{ augroup C autocmd! "formatovanie C-zdrojakov autocmd BufEnter *.c,*.h,*.cc,*.cpp map mfggvG$='f autocmd BufEnter *.c,*.h,*.cc,*.cpp imap mfggvG$='fi autocmd BufEnter *.c,*.h,*.cc,*.cpp map yii yyp3wdwi autocmd BufEnter *.c,*.h,*.cc,*.cpp map :call CallProg() autocmd BufRead,BufNewFile *.c,*.h,*.cc,*.cpp setlocal cindent autocmd BufRead,BufNewFile *.c,*.h,*.cc,*.cpp setlocal cinoptions=>4,e0,n0,f0,{0,}0,^0,:4,=4,p4,t4,c3,+4,(2s,u1s,)20,*30,g4,h4 autocmd BufRead,BufNewFile *.c,*.h,*.cc,*.cpp setlocal cinkeys=0{,0},:,0#,!,o,O,e augroup END " }}} " Autocommands for *.html *.cgi {{{ " Automatic updates date of last modification in HTML files. File must " contain line "^Last modified: ", else will be date writtend on the current " line. augroup HtmlCgi autocmd! " Appending right part of tag in HTML files. autocmd BufEnter *.html imap QQ 2Ff/pF QQ 2Ff/pF :call CallProg() autocmd BufRead,BufNewFile *.tcl setlocal autoindent augroup END " }}} " Autocomands for Makefile {{{ augroup Makefile autocmd! autocmd BufEnter [Mm]akefile* map :call CallProg() augroup END " }}} " Autocomands on Win32 {{{ if has("gui_win32") au GUIEnter * simalt ~x endif " }}} endif " if has("autocmd") " }}} Autocomands " Functions {{{ " Function ChangeFoldMethod() {{{ " Function for changing folding method. " if version >= 600 fun! ChangeFoldMethod() let choice = confirm("Which folde method?", "&manual\n&indent\n&expr\nma&rker\n&syntax", 2) if choice == 1 set foldmethod=manual elseif choice == 2 set foldmethod=indent elseif choice == 3 set foldmethod=expr elseif choice == 4 set foldmethod=marker elseif choice == 5 set foldmethod=syntax else endif endfun endif " ChangeFoldMethod() }}} " Function FoldLongLines() {{{ " if version >= 600 fun! FoldLongLines() " Get screen size: let lines = system("`which tcsh` -f -c telltc | " . \ "grep lines | awk '{print \$6-1}'") let info = "[" . lines . ";0HProcessing line " " Set mark for return back exec "normal mF" " Delete line Printf(&t_dl) exec "1go" let lnum = line(".") let lend = line("$") while lnum <= lend Printf(info . lnum) " Skip closed folds if foldclosed(lnum) != -1 let lnum = foldclosedend(lnum) + 1 continue endif let dlzka = strlen(getline(".")) if dlzka >= g:fold_long_lines " Create fold for one line exec "normal zfl" endif let lnum = line(".") " Move one line down exec "normal OB" if lnum == lend break endif endwhile Printf(" -- OK\n") " Skip back to the mark exec "normal 'F" redraw! endfun endif " FoldLongLines() }}} " Function AutoLastMod() {{{ " Provides atomatic change of date in files, if it is set via " modeline variable autolastmod to appropriate value. " fun! AutoLastMod() if exists("g:autolastmod") if g:autolastmod < 0 return 0; elseif g:autolastmod == 1 call LastMod(g:autolastmodtext) endif endif endfun " AutoLastMod() }}} " Function LastMod() {{{ " Automatic change date in *.html files. " fun! LastMod(text, ...) mark d let line = a:text . strftime("%Y %b %d %X") " text of changed line let find = "g/^" . a:text " regexpr to find line let matx = "^" . a:text " ...if line was found exec find let curr_line = getline(".") if match(curr_line, matx) == 0 call setline(line("."), line) exec "'d" endif endfun " LastMod() }}} " Function OpenAllWin() {{{ " Opens windows for all files in the command line. " Variable "opened" is used for testing, if window for file was already opened " or not. This is prevention for repeat window opening after ViM config file " reload. " fun! OpenAllWin() let i = 0 if !exists("opened") while i < argc() - 1 split n let i = i + 1 endwhile endif let opened = 1 endfun if exists("g:open_all_win") if g:open_all_win == 1 call OpenAllWin() endif endif " OpenAllWin() }}} " Function CallProg() {{{ fun! CallProg() let choice = confirm("Call:", "&make\nm&ake in cwd\n" . \ "&compile\nc&ompile in cwd\n" . \ "&run\nr&un in cwd") if choice == 1 exec ":wall" exec "! cd %:p:h; pwd; make " . g:makeflags elseif choice == 2 exec ":wall" exec "! cd " . \ getcwd() . "; pwd; make " . g:makeflags elseif choice == 3 :call Compile(1) elseif choice == 4 :call Compile(0) elseif choice == 5 exec "! cd %:p:h; pwd; ./%:t:r" elseif choice == 6 exec "! cd " . getcwd() . "; pwd; ./%<" endif endfun " CallProg() }}} " Function Compile() {{{ fun! Compile(do_chdir) let cmd = "" let filename = "" let filename_ext = "" if a:do_chdir == 1 let cmd = "! cd %:p:h; pwd; " let filename = "%:t:r" let filename_ext = "%:t" else let cmd = "! cd " . getcwd() . "; pwd; " let filename = "%<" let filename_ext = "%" endif let choice = confirm("Call:", \ "&compile\n" . \ "compile and &debug\n" . \ "compile and &run\n" . \ "compile using first &line") if choice != 0 exec ":wall" endif if choice == 1 exec cmd . "gcc " . g:cflags . \ " -o " . filename . " " . filename_ext elseif choice == 2 exec cmd . "gcc " . g:cflags . " " . g:c_debug_flags . \ " -o " . filename . " " . filename_ext " && gdb " . filename elseif choice == 3 exec cmd . "gcc " . g:cflags . \ " -o " . filename . " " . filename_ext " && ./" . filename elseif choice == 4 exec cmd . "gcc " . g:cflags . \ " -o " . filename . " " . filename_ext . \ substitute(getline(2), "VIMGCC", "", "g") endif endfun " Compile() }}} " Function Indent() {{{ " Indents source code. fun! Indent() " If there is set equalprg to source indenting (ie. perltidy for perl sources) " we have not to executes "'f" at the end, else we will got "Mark not set" " error message. if &equalprg == "" exec "normal mfggvG$='f" else exec "normal mfggvG$=" endif endfun " Indent() }}} " Function UnquoteMailBody() {{{ " fun! UnquoteMailBody() " Every backslash character must be escaped in function -- Nepto exec "normal :%s/^\\([ ]*>[ ]*\\)*\\(\\|[^>].*\\)$/\\2/g" endfun " UnquoteMailBody() }}} " Function SafeLineDelete() {{{ " fun! SafeLineDelete() exec "normal \"_dd" endfun " SafeLineDelete() }}} " Function GetID() {{{ " - used in statusline. " If you are root, function return "# " string --> it is showed at begin of " statusline " If you aren't root, function return empty string --> nothing is visible let g:get_id="" if executable("id") " Check for your name ID let g:get_id = $USER " If you are root, set to '#', else set to '' if g:get_id == "root" let g:get_id = "# " else let g:get_id = "" endif endif fun! GetID() return g:get_id endfun " GetID() }}} " Function ReadFileAboveCursor() {{{ " fun! ReadFileAboveCursor(file, ...) let str = ":" . (v:lnum - 1) . "read " . a:file let idx = 1 while idx <= a:0 exec "let str = str . \" \" . a:" . idx let idx = idx + 1 endwhile exec str endfun " ReadFileAboveCursor() }}} " }}} " Gvim settings {{{ if &t_Co > 2 || has("gui_running") hi Normal guibg=Black guifg=White hi Cursor guibg=Green guifg=NONE hi NonText guibg=Black hi Constant gui=NONE hi Special gui=NONE endif " }}} " Colors {{{ set background=dark hi User1 term=inverse,bold cterm=inverse,bold ctermfg=red hi User2 term=bold cterm=bold ctermfg=yellow hi User3 term=inverse,bold cterm=inverse,bold ctermfg=blue hi User4 term=inverse,bold cterm=inverse,bold ctermfg=lightblue hi Folded term=standout ctermbg=black ctermfg=Blue guifg=DarkBlue hi FoldColumn term=standout ctermbg=black ctermfg=DarkBlue guibg=Grey guifg=DarkBlue " }}} " Modeline {{{ " vim:set ts=4: " vim600:fdm=marker fdl=0 fdc=3 vb t_vb=: " }}}