--(0)> cat .bashrc #!/bin/bash #this should go in your ~/.bashrc file # Define ANSI color sequences NORMAL="/[/033[0m/]" WHITE="/[/033[0;37;40m/]" MAGENTA="/[/033[0;35;40m/]" BRIGHTBLUE="/[/033[1;34;40m/]" BRIGHTWHITE="/[/033[1;37;40m/]" BRIGHTMAGENTA="/[/033[1;35;40m/]" # Find out if we are root if [ $UID -eq 0 ] ; then # The # character serves as an extra reminder that I am root SYM='#' else SYM='-' fi # Define the actual prompt # This is split up for easier reading within this book P1="$MAGENTA$SYM$BRIGHTMAGENTA-$BRIGHTBLUE($WHITE/u$MAGENTA@$WHITE" P2="/h$BRIGHTBLUE)$BRIGHTMAGENTA-$BRIGHTBLUE($BRIGHTWHITE/w$BRIGHTBLUE" P3=")$BRIGHTMAGENTA-$MAGENTA$SYM$NORMAL/n$MAGENTA$SYM$BRIGHTMAGENTA-" P4="$BRIGHTBLUE($BRIGHTWHITE/$?$BRIGHTBLUE)$MAGENTA>$NORMAL " PS1="$P1$P2$P3$P4" 语法高亮 1 yntax on 2 set tabstop=4 3 set softtabstop=4 4 set shiftwidth=4 5 set autoindent 6 set cindent 7 set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s 8 set nu 9 if &term=="xterm" 10 set t_Co=8 11 set t_Sb=^[[4%dm 12 set t_Sf=^[[3%dm 13 endif """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Maintainer: amix the lucky stiff " http://amix.dk - amix@amix.dk " " Version: 3.6 - 25/08/10 14:40:30 " " Blog_post: " http://amix.dk/blog/post/19486#The-ultimate-vim-configuration-vimrc " Syntax_highlighted: " http://amix.dk/vim/vimrc.html " Raw_version: " http://amix.dk/vim/vimrc.txt " " How_to_Install_on_Unix: " $ mkdir ~/.vim_runtime " $ svn co svn://orangoo.com/vim ~/.vim_runtime " $ cat ~/.vim_runtime/install.sh " $ sh ~/.vim_runtime/install.sh <system> " <sytem> can be `mac`, `linux` or `windows` " " How_to_Upgrade: " $ svn update ~/.vim_runtime " " Sections: " -> General " -> VIM user interface " -> Colors and Fonts " -> Files and backups " -> Text, tab and indent related " -> Visual mode related " -> Command mode related " -> Moving around, tabs and buffers " -> Statusline " -> Parenthesis/bracket expanding " -> General Abbrevs " -> Editing mappings " " -> Cope " -> Minibuffer plugin " -> Omni complete functions " -> Python section " -> JavaScript section " " " Plugins_Included: " > minibufexpl.vim - http://www.vim.org/scripts/script.php?script_id=159 " Makes it easy to get an overview of buffers: " info -> :e ~/.vim_runtime/plugin/minibufexpl.vim " " > bufexplorer - http://www.vim.org/scripts/script.php?script_id=42 " Makes it easy to switch between buffers: " info -> :help bufExplorer " " > yankring.vim - http://www.vim.org/scripts/script.php?script_id=1234 " Emacs's killring, useful when using the clipboard: " info -> :help yankring " " > surround.vim - http://www.vim.org/scripts/script.php?script_id=1697 " Makes it easy to work with surrounding text: " info -> :help surround " " > snipMate.vim - http://www.vim.org/scripts/script.php?script_id=2540 " Snippets for many languages (similar to TextMate's): " info -> :help snipMate " " > mru.vim - http://www.vim.org/scripts/script.php?script_id=521 " Plugin to manage Most Recently Used (MRU) files: " info -> :e ~/.vim_runtime/plugin/mru.vim " " > Command-T - http://www.vim.org/scripts/script.php?script_id=3025 " Command-T plug-in provides an extremely fast, intuitive mechanism for opening filesa: " info -> :help CommandT " screencast and web-help -> http://amix.dk/blog/post/19501 " " " Revisions: " > 3.6: Added lots of stuff (colors, Command-T, Vim 7.3 persistent undo etc.) " > 3.5: Paste mode is now shown in status line if you are in paste mode " > 3.4: Added mru.vim " > 3.3: Added syntax highlighting for Mako mako.vim " > 3.2: Turned on python_highlight_all for better syntax " highlighting for Python " > 3.1: Added revisions ;) and bufexplorer.vim " """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => General """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Sets how many lines of history VIM has to remember set history=700 " Enable filetype plugin filetype plugin on filetype indent on " Set to auto read when a file is changed from the outside set autoread function! MySys() return "linux" endfunction " With a map leader it's possible to do extra key combinations " like <leader>w saves the current file let mapleader = "," let g:mapleader = "," " Fast saving nmap <leader>w :w!<cr> " Fast editing of the .vimrc map <leader>e :e! ~/.vim_runtime/vimrc<cr> " When vimrc is edited, reload it autocmd! bufwritepost vimrc source ~/.vim_runtime/vimrc """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => VIM user interface """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Set 7 lines to the curors - when moving vertical.. set so=7 set wildmenu "Turn on WiLd menu set ruler "Always show current position set cmdheight=2 "The commandbar height set hid "Change buffer - without saving " Set backspace config set backspace=eol,start,indent set whichwrap+=<,>,h,l set ignorecase "Ignore case when searching set smartcase set hlsearch "Highlight search things set incsearch "Make search act like search in modern browsers set nolazyredraw "Don't redraw while executing macros set magic "Set magic on, for regular expressions set showmatch "Show matching bracets when text indicator is over them set mat=2 "How many tenths of a second to blink " No sound on errors set noerrorbells set novisualbell set t_vb= set tm=500 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Colors and Fonts """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" syntax enable "Enable syntax hl " Set font according to system if MySys() == "mac" set gfn=Menlo:h14 set shell=/bin/bash elseif MySys() == "windows" set gfn=Bitstream/ Vera/ Sans/ Mono:h10 elseif MySys() == "linux" set gfn=Monospace/ 10 set shell=/bin/bash endif if has("gui_running") set guioptions-=T set t_Co=256 set background=dark colorscheme peaksea set nonu else colorscheme zellner set background=dark set nonu endif set encoding=utf8 try lang en_US catch endtry set ffs=unix,dos,mac "Default file types """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Files, backups and undo """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Turn backup off, since most stuff is in SVN, git anyway... set nobackup set nowb set noswapfile "Persistent undo try if MySys() == "windows" set undodir=C:/Windows/Temp else set undodir=~/.vim_runtime/undodir endif set undofile catch endtry """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Text, tab and indent related """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" set expandtab set shiftwidth=4 set tabstop=4 set smarttab set lbr set tw=500 set ai "Auto indent set si "Smart indet set wrap "Wrap lines """""""""""""""""""""""""""""" " => Visual mode related """""""""""""""""""""""""""""" " Really useful! " In visual mode when you press * or # to search for the current selection vnoremap <silent> * :call VisualSearch('f')<CR> vnoremap <silent> # :call VisualSearch('b')<CR> " When you press gv you vimgrep after the selected text vnoremap <silent> gv :call VisualSearch('gv')<CR> map <leader>g :vimgrep // **/*.<left><left><left><left><left><left><left> function! CmdLine(str) exe "menu Foo.Bar :" . a:str emenu Foo.Bar unmenu Foo endfunction " From an idea by Michael Naumann function! VisualSearch(direction) range let l:saved_reg = @" execute "normal! vgvy" let l:pattern = escape(@", '///.*$^~[]') let l:pattern = substitute(l:pattern, "/n$", "", "") if a:direction == 'b' execute "normal ?" . l:pattern . "^M" elseif a:direction == 'gv' call CmdLine("vimgrep " . '/'. l:pattern . '/' . ' **/*.') elseif a:direction == 'f' execute "normal /" . l:pattern . "^M" endif let @/ = l:pattern let @" = l:saved_reg endfunction """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Command mode related """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Smart mappings on the command line cno $h e ~/ cno $d e ~/Desktop/ cno $j e ./ cno $c e <C-/>eCurrentFileDir("e")<cr> " $q is super useful when browsing on the command line cno $q <C-/>eDeleteTillSlash()<cr> " Bash like keys for the command line cnoremap <C-A> <Home> cnoremap <C-E> <End> cnoremap <C-K> <C-U> cnoremap <C-P> <Up> cnoremap <C-N> <Down> " Useful on some European keyboards map 陆 $ imap 陆 $ vmap 陆 $ cmap 陆 $ func! Cwd() let cwd = getcwd() return "e " . cwd endfunc func! DeleteTillSlash() let g:cmd = getcmdline() if MySys() == "linux" || MySys() == "mac" let g:cmd_edited = substitute(g:cmd, "//(.*/[//]//).*", "//1", "") else let g:cmd_edited = substitute(g:cmd, "//(.*/[]//).*", "//1", "") endif if g:cmd == g:cmd_edited if MySys() == "linux" || MySys() == "mac" let g:cmd_edited = substitute(g:cmd, "//(.*/[//]//).*/", "//1", "") else let g:cmd_edited = substitute(g:cmd, "//(.*/[/]//).*/[/]", "//1", "") endif endif return g:cmd_edited endfunc func! CurrentFileDir(cmd) return a:cmd . " " . expand("%:p:h") . "/" endfunc """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Moving around, tabs and buffers """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Map space to / (search) and c-space to ? (backgwards search) map <space> / map <c-space> ? map <silent> <leader><cr> :noh<cr> " Smart way to move btw. windows map <C-j> <C-W>j map <C-k> <C-W>k map <C-h> <C-W>h map <C-l> <C-W>l " Close the current buffer map <leader>bd :Bclose<cr> " Close all the buffers map <leader>ba :1,300 bd!<cr> " Use the arrows to something usefull map <right> :bn<cr> map <left> :bp<cr> " Tab configuration map <leader>tn :tabnew<cr> map <leader>te :tabedit map <leader>tc :tabclose<cr> map <leader>tm :tabmove " When pressing <leader>cd switch to the directory of the open buffer map <leader>cd :cd %:p:h<cr> command! Bclose call <SID>BufcloseCloseIt() function! <SID>BufcloseCloseIt() let l:currentBufNum = bufnr("%") let l:alternateBufNum = bufnr("#") if buflisted(l:alternateBufNum) buffer # else bnext endif if bufnr("%") == l:currentBufNum new endif if buflisted(l:currentBufNum) execute("bdelete! ".l:currentBufNum) endif endfunction " Specify the behavior when switching between buffers try set switchbuf=usetab set stal=2 catch endtry """""""""""""""""""""""""""""" " => Statusline """""""""""""""""""""""""""""" " Always hide the statusline set laststatus=2 " Format the statusline set statusline=/ %{HasPaste()}%F%m%r%h/ %w/ / CWD:/ %r%{CurDir()}%h/ / / Line:/ %l/%L:%c function! CurDir() let curdir = substitute(getcwd(), '/Users/amir/', "~/", "g") return curdir endfunction function! HasPaste() if &paste return 'PASTE MODE ' else return '' endif endfunction """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Parenthesis/bracket expanding """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" vnoremap $1 <esc>`>a)<esc>`<i(<esc> vnoremap $2 <esc>`>a]<esc>`<i[<esc> vnoremap $3 <esc>`>a}<esc>`<i{<esc> vnoremap $$ <esc>`>a"<esc>`<i"<esc> vnoremap $q <esc>`>a'<esc>`<i'<esc> vnoremap $e <esc>`>a"<esc>`<i"<esc> " Map auto complete of (, ", ', [ inoremap $1 ()<esc>i inoremap $2 []<esc>i inoremap $3 {}<esc>i inoremap $4 {<esc>o}<esc>O inoremap $q ''<esc>i inoremap $e ""<esc>i inoremap $t <><esc>i """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => General Abbrevs """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" iab xdate <c-r>=strftime("%d/%m/%y %H:%M:%S")<cr> """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Editing mappings """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "Remap VIM 0 map 0 ^ "Move a line of text using ALT+[jk] or Comamnd+[jk] on mac nmap <M-j> mz:m+<cr>`z nmap <M-k> mz:m-2<cr>`z vmap <M-j> :m'>+<cr>`<my`>mzgv`yo`z vmap <M-k> :m'<-2<cr>`>my`<mzgv`yo`z if MySys() == "mac" nmap <D-j> <M-j> nmap <D-k> <M-k> vmap <D-j> <M-j> vmap <D-k> <M-k> endif "Delete trailing white space, useful for Python ;) func! DeleteTrailingWS() exe "normal mz" %s//s/+$//ge exe "normal `z" endfunc autocmd BufWrite *.py :call DeleteTrailingWS() set guitablabel=%t """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Cope """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Do :help cope if you are unsure what cope is. It's super useful! map <leader>cc :botright cope<cr> map <leader>n :cn<cr> map <leader>p :cp<cr> """""""""""""""""""""""""""""" " => bufExplorer plugin """""""""""""""""""""""""""""" let g:bufExplorerDefaultHelp=0 let g:bufExplorerShowRelativePath=1 map <leader>o :BufExplorer<cr> """""""""""""""""""""""""""""" " => Minibuffer plugin """""""""""""""""""""""""""""" let g:miniBufExplModSelTarget = 1 let g:miniBufExplorerMoreThanOne = 2 let g:miniBufExplModSelTarget = 0 let g:miniBufExplUseSingleClick = 1 let g:miniBufExplMapWindowNavVim = 1 let g:miniBufExplVSplit = 25 let g:miniBufExplSplitBelow=1 let g:bufExplorerSortBy = "name" autocmd BufRead,BufNew :call UMiniBufExplorer map <leader>u :TMiniBufExplorer<cr> """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Omni complete functions """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" autocmd FileType css set omnifunc=csscomplete#CompleteCSS """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Spell checking """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "Pressing ,ss will toggle and untoggle spell checking map <leader>ss :setlocal spell!<cr> "Shortcuts using <leader> map <leader>sn ]s map <leader>sp [s map <leader>sa zg map <leader>s? z= """""""""""""""""""""""""""""" " => Python section """""""""""""""""""""""""""""" let python_highlight_all = 1 au FileType python syn keyword pythonDecorator True None False self au BufNewFile,BufRead *.jinja set syntax=htmljinja au BufNewFile,BufRead *.mako set ft=mako au FileType python inoremap <buffer> $r return au FileType python inoremap <buffer> $i import au FileType python inoremap <buffer> $p print au FileType python inoremap <buffer> $f #--- PH ----------------------------------------------<esc>FP2xi au FileType python map <buffer> <leader>1 /class au FileType python map <buffer> <leader>2 /def au FileType python map <buffer> <leader>C ?class au FileType python map <buffer> <leader>D ?def """""""""""""""""""""""""""""" " => JavaScript section """"""""""""""""""""""""""""""" au FileType javascript call JavaScriptFold() au FileType javascript setl fen au FileType javascript setl nocindent au FileType javascript imap <c-t> AJS.log();<esc>hi au FileType javascript imap <c-a> alert();<esc>hi au FileType javascript inoremap <buffer> $r return au FileType javascript inoremap <buffer> $f //--- PH ----------------------------------------------<esc>FP2xi function! JavaScriptFold() setl foldmethod=syntax setl foldlevelstart=1 syn region foldBraces start=/{/ end=/}/ transparent fold keepend extend function! FoldText() return substitute(getline(v:foldstart), '{.*', '{...}', '') endfunction setl foldtext=FoldText() endfunction """""""""""""""""""""""""""""" " => MRU plugin """""""""""""""""""""""""""""" let MRU_Max_Entries = 400 map <leader>f :MRU<CR> """""""""""""""""""""""""""""" " => Command-T """""""""""""""""""""""""""""" let g:CommandTMaxHeight = 15 set wildignore+=*.o,*.obj,.git,*.pyc noremap <leader>j :CommandT<cr> noremap <leader>y :CommandTFlush<cr> """""""""""""""""""""""""""""" " => Vim grep """""""""""""""""""""""""""""" let Grep_Skip_Dirs = 'RCS CVS SCCS .svn generated' set grepprg=/bin/grep/ -nH """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => MISC """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Remove the Windows ^M - when the encodings gets messed up noremap <Leader>m mmHmt:%s/<C-V><cr>//ge<cr>'tzt'm "Quickly open a buffer for scripbble map <leader>q :e ~/buffer<cr> au BufRead,BufNewFile ~/buffer iab <buffer> xh1 =========================================== map <leader>pp :setlocal paste!<cr> map <leader>bb :cd ..<cr> " Vim color file " Create by besterChen " QQ:1123830499 set background=dark if version > 580 hi clear if exists("syntax_on") syntax reset endif endif let g:colors_name="darkZ" hi Normal guifg=#C1FFC1 guibg=#0E1F03 gui=none " highlight groups hi Cursor guifg=black guibg=yellow gui=none hi ErrorMsg guifg=white guibg=red gui=none hi VertSplit guifg=gray40 guibg=gray40 gui=none hi Folded guifg=DarkSlateGray3 guibg=grey30 gui=none hi FoldColumn guifg=tan guibg=grey30 gui=none hi IncSearch guifg=#b0ffff guibg=#2050d0 hi LineNr guifg=burlywood3 gui=none hi ModeMsg guifg=SkyBlue gui=none hi MoreMsg guifg=SeaGreen gui=none hi NonText guifg=cyan gui=none hi Question guifg=springgreen gui=none hi Search guifg=gray80 guibg=#445599 gui=none hi SpecialKey guifg=cyan gui=none hi StatusLine guifg=black guibg=Pink gui=bold hi StatusLineNC guifg=grey guibg=gray40 gui=none hi Title guifg=#ff4400 gui=none gui=bold hi Visual guifg=gray17 guibg=tan1 gui=none hi WarningMsg guifg=salmon gui=none hi Pmenu guifg=white guibg=#445599 gui=none hi PmenuSel guifg=#445599 guibg=gray hi WildMenu guifg=gray guibg=gray17 gui=none hi MatchParen guifg=cyan guibg=#6C6C6C gui=bold hi DiffAdd guifg=black guibg=wheat1 hi DiffChange guifg=black guibg=skyblue1 hi DiffText guifg=black guibg=hotpink1 gui=none hi DiffDelete guibg=gray45 guifg=black gui=none " syntax highlighting groups hi Comment guifg=#00AA00 gui=italic hi Constant guifg=red gui=none hi Identifier guifg=#3FA1E2 gui=none hi Function guifg=#EB4868 gui=none hi Statement guifg=#3FA1E2 gui=none hi PreProc guifg=red gui=none hi Type guifg=#4444FF gui=none hi Special guifg=orange gui=none hi Ignore guifg=red gui=none hi Todo guifg=red guibg=yellow2 gui=none hi String guifg=#F94BF9 gui=none " color terminal definitions hi SpecialKey ctermfg=red hi NonText cterm=bold ctermfg=darkblue hi Directory ctermfg=darkcyan hi ErrorMsg cterm=bold ctermfg=7 ctermbg=1 hi IncSearch cterm=NONE ctermfg=yellow ctermbg=green hi Search cterm=NONE ctermfg=white ctermbg=grey hi MoreMsg ctermfg=darkgreen hi ModeMsg cterm=NONE ctermfg=brown hi LineNr ctermfg=3 hi Question ctermfg=green hi StatusLine cterm=bold,reverse hi StatusLineNC cterm=reverse hi VertSplit cterm=reverse hi Title ctermfg=5 hi Visual cterm=reverse hi VisualNOS cterm=bold,underline hi WarningMsg ctermfg=1 hi WildMenu ctermfg=0 ctermbg=3 hi Folded ctermfg=darkgrey ctermbg=NONE hi FoldColumn ctermfg=darkgrey ctermbg=NONE hi DiffAdd ctermbg=4 hi DiffChange ctermbg=5 hi DiffDelete cterm=bold ctermfg=4 ctermbg=6 hi DiffText cterm=bold ctermbg=1 hi Comment ctermfg=darkcyan hi Constant ctermfg=brown hi Special ctermfg=5 hi Identifier ctermfg=6 hi Statement ctermfg=3 hi PreProc ctermfg=5 hi Type ctermfg=2 hi Underlined cterm=underline ctermfg=5 hi Ignore ctermfg=darkgrey hi Error cterm=bold ctermfg=7 ctermbg=1 " Vim syntax file " Language: C " Maintainer: Bram Moolenaar <Bram@vim.org> " Last Change: 2008 Mar 19 " Quit when a (custom) syntax file was already loaded if exists("b:current_syntax") finish endif " A bunch of useful C keywords syn keyword cStatement goto break return continue asm syn keyword cLabel case default syn keyword cConditional if else switch syn keyword cRepeat while for do syn keyword cTodo contained TODO FIXME XXX " cCommentGroup allows adding matches for special things in comments syn cluster cCommentGroup contains=cTodo " String and Character constants " Highlight special characters (those which have a backslash) differently syn match cSpecial display contained "///(x/x/+/|/o/{1,3}/|./|$/)" if !exists("c_no_utf") syn match cSpecial display contained "///(u/x/{4}/|U/x/{8}/)" endif if exists("c_no_cformat") syn region cString start=+L/="+ skip=+/|//"+ end=+"+ contains=cSpecial,@Spell " cCppString: same as cString, but ends at end of line syn region cCppString start=+L/="+ skip=+/|//"/|//$+ excludenl end=+"+ end='$' contains=cSpecial,@Spell else if !exists("c_no_c99") " ISO C99 syn match cFormat display "%/(/d/+/$/)/=[-+' #0*]*/(/d*/|/*/|/*/d/+/$/)/(/./(/d*/|/*/|/*/d/+/$/)/)/=/([hlLjzt]/|ll/|hh/)/=/([aAbdiuoxXDOUfFeEgGcCsSpn]/|/[/^/=.[^]]*/]/)" contained else syn match cFormat display "%/(/d/+/$/)/=[-+' #0*]*/(/d*/|/*/|/*/d/+/$/)/(/./(/d*/|/*/|/*/d/+/$/)/)/=/([hlL]/|ll/)/=/([bdiuoxXDOUfeEgGcCsSpn]/|/[/^/=.[^]]*/]/)" contained endif syn match cFormat display "%%" contained syn region cString start=+L/="+ skip=+/|//"+ end=+"+ contains=cSpecial,cFormat,@Spell " cCppString: same as cString, but ends at end of line syn region cCppString start=+L/="+ skip=+/|//"/|//$+ excludenl end=+"+ end='$' contains=cSpecial,cFormat,@Spell endif syn match cCharacter "L/='[^//]'" syn match cCharacter "L'[^']*'" contains=cSpecial if exists("c_gnu") syn match cSpecialError "L/='//[^'/"?//abefnrtv]'" syn match cSpecialCharacter "L/='//['/"?//abefnrtv]'" else syn match cSpecialError "L/='//[^'/"?//abfnrtv]'" syn match cSpecialCharacter "L/='//['/"?//abfnrtv]'" endif syn match cSpecialCharacter display "L/='///o/{1,3}'" syn match cSpecialCharacter display "'//x/x/{1,2}'" syn match cSpecialCharacter display "L'//x/x/+'" "when wanted, highlight trailing white space if exists("c_space_errors") if !exists("c_no_trail_space_error") syn match cSpaceError display excludenl "/s/+$" endif if !exists("c_no_tab_space_error") syn match cSpaceError display " /+/t"me=e-1 endif endif " This should be before cErrInParen to avoid problems with #define ({ xxx }) if exists("c_curly_error") syntax match cCurlyError "}" syntax region cBlock start="{" end="}" contains=ALLBUT,cCurlyError,@cParenGroup,cErrInParen,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell fold else syntax region cBlock start="{" end="}" transparent fold endif "catch errors caused by wrong parenthesis and brackets " also accept <% for {, %> for }, <: for [ and :> for ] (C99) " But avoid matching <::. syn cluster cParenGroup contains=cParenError,cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom if exists("c_no_curly_error") syn region cParen transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell " cCppParen: same as cParen but ends at end-of-line; used in cDefine syn region cCppParen transparent start='(' skip='//$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell syn match cParenError display ")" syn match cErrInParen display contained "^[{}]/|^<%/|^%>" elseif exists("c_no_bracket_error") syn region cParen transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell " cCppParen: same as cParen but ends at end-of-line; used in cDefine syn region cCppParen transparent start='(' skip='//$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell syn match cParenError display ")" syn match cErrInParen display contained "[{}]/|<%/|%>" else syn region cParen transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell " cCppParen: same as cParen but ends at end-of-line; used in cDefine syn region cCppParen transparent start='(' skip='//$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell syn match cParenError display "[/])]" syn match cErrInParen display contained "[/]{}]/|<%/|%>" syn region cBracket transparent start='/[/|<::/@!' end=']/|:>' contains=ALLBUT,@cParenGroup,cErrInParen,cCppParen,cCppBracket,cCppString,@Spell " cCppBracket: same as cParen but ends at end-of-line; used in cDefine syn region cCppBracket transparent start='/[/|<::/@!' skip='//$' excludenl end=']/|:>' end='$' contained contains=ALLBUT,@cParenGroup,cErrInParen,cParen,cBracket,cString,@Spell syn match cErrInBracket display contained "[);{}]/|<%/|%>" endif "integer number, or floating point number without a dot and with "f". syn case ignore syn match cNumbers display transparent "/</d/|/./d" contains=cNumber,cFloat,cOctalError,cOctal " Same, but without octal error (for comments) syn match cNumbersCom display contained transparent "/</d/|/./d" contains=cNumber,cFloat,cOctal syn match cNumber display contained "/d/+/(u/=l/{0,2}/|ll/=u/)/>" "hex number syn match cNumber display contained "0x/x/+/(u/=l/{0,2}/|ll/=u/)/>" " Flag the first zero of an octal number as something special syn match cOctal display contained "0/o/+/(u/=l/{0,2}/|ll/=u/)/>" contains=cOctalZero syn match cOctalZero display contained "/<0" syn match cFloat display contained "/d/+f" "floating point number, with dot, optional exponent syn match cFloat display contained "/d/+/./d*/(e[-+]/=/d/+/)/=[fl]/=" "floating point number, starting with a dot, optional exponent syn match cFloat display contained "/./d/+/(e[-+]/=/d/+/)/=[fl]/=/>" "floating point number, without dot, with exponent syn match cFloat display contained "/d/+e[-+]/=/d/+[fl]/=/>" if !exists("c_no_c99") "hexadecimal floating point number, optional leading digits, with dot, with exponent syn match cFloat display contained "0x/x*/./x/+p[-+]/=/d/+[fl]/=/>" "hexadecimal floating point number, with leading digits, optional dot, with exponent syn match cFloat display contained "0x/x/+/./=p[-+]/=/d/+[fl]/=/>" endif " flag an octal number with wrong digits syn match cOctalError display contained "0/o*[89]/d*" syn case match if exists("c_comment_strings") " A comment can contain cString, cCharacter and cNumber. " But a "*/" inside a cString in a cComment DOES end the comment! So we " need to use a special type of cString: cCommentString, which also ends on " "*/", and sees a "*" at the start of the line as comment again. " Unfortunately this doesn't very well work for // type of comments :-( syntax match cCommentSkip contained "^/s*/*/($/|/s/+/)" syntax region cCommentString contained start=+L/=///@<!"+ skip=+/|//"+ end=+"+ end=+/*/+me=s-1 contains=cSpecial,cCommentSkip syntax region cComment2String contained start=+L/=///@<!"+ skip=+/|//"+ end=+"+ end="$" contains=cSpecial syntax region cCommentL start="//" skip="//$" end="$" keepend contains=@cCommentGroup,cComment2String,cCharacter,cNumbersCom,cSpaceError,@Spell if exists("c_no_comment_fold") " Use "extend" here to have preprocessor lines not terminate halfway a " comment. syntax region cComment matchgroup=cCommentStart start="//*" end="/*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell extend else syntax region cComment matchgroup=cCommentStart start="//*" end="/*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell fold extend endif else syn region cCommentL start="//" skip="//$" end="$" keepend contains=@cCommentGroup,cSpaceError,@Spell if exists("c_no_comment_fold") syn region cComment matchgroup=cCommentStart start="//*" end="/*/" contains=@cCommentGroup,cCommentStartError,cSpaceError,@Spell extend else syn region cComment matchgroup=cCommentStart start="//*" end="/*/" contains=@cCommentGroup,cCommentStartError,cSpaceError,@Spell fold extend endif endif " keep a // comment separately, it terminates a preproc. conditional syntax match cCommentError display "/*/" syntax match cCommentStartError display "//*"me=e-1 contained syn keyword cOperator sizeof if exists("c_gnu") syn keyword cStatement __asm__ syn keyword cOperator typeof __real__ __imag__ endif syn keyword cType int long short char void syn keyword cType signed unsigned float double if !exists("c_no_ansi") || exists("c_ansi_typedefs") syn keyword cType size_t ssize_t off_t wchar_t ptrdiff_t sig_atomic_t fpos_t syn keyword cType clock_t time_t va_list jmp_buf FILE DIR div_t ldiv_t syn keyword cType mbstate_t wctrans_t wint_t wctype_t endif if !exists("c_no_c99") " ISO C99 syn keyword cType bool complex syn keyword cType int8_t int16_t int32_t int64_t syn keyword cType uint8_t uint16_t uint32_t uint64_t syn keyword cType int_least8_t int_least16_t int_least32_t int_least64_t syn keyword cType uint_least8_t uint_least16_t uint_least32_t uint_least64_t syn keyword cType int_fast8_t int_fast16_t int_fast32_t int_fast64_t syn keyword cType uint_fast8_t uint_fast16_t uint_fast32_t uint_fast64_t syn keyword cType intptr_t uintptr_t syn keyword cType intmax_t uintmax_t endif if exists("c_gnu") syn keyword cType __label__ __complex__ __volatile__ endif syn keyword cStructure struct union enum typedef syn keyword cStorageClass static register auto volatile extern const if exists("c_gnu") syn keyword cStorageClass inline __attribute__ endif if !exists("c_no_c99") syn keyword cStorageClass inline restrict endif if !exists("c_no_ansi") || exists("c_ansi_constants") || exists("c_gnu") if exists("c_gnu") syn keyword cConstant __GNUC__ __FUNCTION__ __PRETTY_FUNCTION__ __func__ endif syn keyword cConstant __LINE__ __FILE__ __DATE__ __TIME__ __STDC__ syn keyword cConstant __STDC_VERSION__ syn keyword cConstant CHAR_BIT MB_LEN_MAX MB_CUR_MAX syn keyword cConstant UCHAR_MAX UINT_MAX ULONG_MAX USHRT_MAX syn keyword cConstant CHAR_MIN INT_MIN LONG_MIN SHRT_MIN syn keyword cConstant CHAR_MAX INT_MAX LONG_MAX SHRT_MAX syn keyword cConstant SCHAR_MIN SINT_MIN SLONG_MIN SSHRT_MIN syn keyword cConstant SCHAR_MAX SINT_MAX SLONG_MAX SSHRT_MAX if !exists("c_no_c99") syn keyword cConstant __func__ syn keyword cConstant LLONG_MIN LLONG_MAX ULLONG_MAX syn keyword cConstant INT8_MIN INT16_MIN INT32_MIN INT64_MIN syn keyword cConstant INT8_MAX INT16_MAX INT32_MAX INT64_MAX syn keyword cConstant UINT8_MAX UINT16_MAX UINT32_MAX UINT64_MAX syn keyword cConstant INT_LEAST8_MIN INT_LEAST16_MIN INT_LEAST32_MIN INT_LEAST64_MIN syn keyword cConstant INT_LEAST8_MAX INT_LEAST16_MAX INT_LEAST32_MAX INT_LEAST64_MAX syn keyword cConstant UINT_LEAST8_MAX UINT_LEAST16_MAX UINT_LEAST32_MAX UINT_LEAST64_MAX syn keyword cConstant INT_FAST8_MIN INT_FAST16_MIN INT_FAST32_MIN INT_FAST64_MIN syn keyword cConstant INT_FAST8_MAX INT_FAST16_MAX INT_FAST32_MAX INT_FAST64_MAX syn keyword cConstant UINT_FAST8_MAX UINT_FAST16_MAX UINT_FAST32_MAX UINT_FAST64_MAX syn keyword cConstant INTPTR_MIN INTPTR_MAX UINTPTR_MAX syn keyword cConstant INTMAX_MIN INTMAX_MAX UINTMAX_MAX syn keyword cConstant PTRDIFF_MIN PTRDIFF_MAX SIG_ATOMIC_MIN SIG_ATOMIC_MAX syn keyword cConstant SIZE_MAX WCHAR_MIN WCHAR_MAX WINT_MIN WINT_MAX endif syn keyword cConstant FLT_RADIX FLT_ROUNDS syn keyword cConstant FLT_DIG FLT_MANT_DIG FLT_EPSILON syn keyword cConstant DBL_DIG DBL_MANT_DIG DBL_EPSILON syn keyword cConstant LDBL_DIG LDBL_MANT_DIG LDBL_EPSILON syn keyword cConstant FLT_MIN FLT_MAX FLT_MIN_EXP FLT_MAX_EXP syn keyword cConstant FLT_MIN_10_EXP FLT_MAX_10_EXP syn keyword cConstant DBL_MIN DBL_MAX DBL_MIN_EXP DBL_MAX_EXP syn keyword cConstant DBL_MIN_10_EXP DBL_MAX_10_EXP syn keyword cConstant LDBL_MIN LDBL_MAX LDBL_MIN_EXP LDBL_MAX_EXP syn keyword cConstant LDBL_MIN_10_EXP LDBL_MAX_10_EXP syn keyword cConstant HUGE_VAL CLOCKS_PER_SEC NULL syn keyword cConstant LC_ALL LC_COLLATE LC_CTYPE LC_MONETARY syn keyword cConstant LC_NUMERIC LC_TIME syn keyword cConstant SIG_DFL SIG_ERR SIG_IGN syn keyword cConstant SIGABRT SIGFPE SIGILL SIGHUP SIGINT SIGSEGV SIGTERM " Add POSIX signals as well... syn keyword cConstant SIGABRT SIGALRM SIGCHLD SIGCONT SIGFPE SIGHUP syn keyword cConstant SIGILL SIGINT SIGKILL SIGPIPE SIGQUIT SIGSEGV syn keyword cConstant SIGSTOP SIGTERM SIGTRAP SIGTSTP SIGTTIN SIGTTOU syn keyword cConstant SIGUSR1 SIGUSR2 syn keyword cConstant _IOFBF _IOLBF _IONBF BUFSIZ EOF WEOF syn keyword cConstant FOPEN_MAX FILENAME_MAX L_tmpnam syn keyword cConstant SEEK_CUR SEEK_END SEEK_SET syn keyword cConstant TMP_MAX stderr stdin stdout syn keyword cConstant EXIT_FAILURE EXIT_SUCCESS RAND_MAX " Add POSIX errors as well syn keyword cConstant E2BIG EACCES EAGAIN EBADF EBADMSG EBUSY syn keyword cConstant ECANCELED ECHILD EDEADLK EDOM EEXIST EFAULT syn keyword cConstant EFBIG EILSEQ EINPROGRESS EINTR EINVAL EIO EISDIR syn keyword cConstant EMFILE EMLINK EMSGSIZE ENAMETOOLONG ENFILE ENODEV syn keyword cConstant ENOENT ENOEXEC ENOLCK ENOMEM ENOSPC ENOSYS syn keyword cConstant ENOTDIR ENOTEMPTY ENOTSUP ENOTTY ENXIO EPERM syn keyword cConstant EPIPE ERANGE EROFS ESPIPE ESRCH ETIMEDOUT EXDEV " math.h syn keyword cConstant M_E M_LOG2E M_LOG10E M_LN2 M_LN10 M_PI M_PI_2 M_PI_4 syn keyword cConstant M_1_PI M_2_PI M_2_SQRTPI M_SQRT2 M_SQRT1_2 endif if !exists("c_no_c99") " ISO C99 syn keyword cConstant true false endif " Accept %: for # (C99) syn region cPreCondit start="^/s*/(%:/|#/)/s*/(if/|ifdef/|ifndef/|elif/)/>" skip="//$" end="$" end="//"me=s-1 contains=cComment,cCppString,cCharacter,cCppParen,cParenError,cNumbers,cCommentError,cSpaceError syn match cPreCondit display "^/s*/(%:/|#/)/s*/(else/|endif/)/>" if !exists("c_no_if0") if !exists("c_no_if0_fold") syn region cCppOut start="^/s*/(%:/|#/)/s*if/s/+0/+/>" end="./@=/|$" contains=cCppOut2 fold else syn region cCppOut start="^/s*/(%:/|#/)/s*if/s/+0/+/>" end="./@=/|$" contains=cCppOut2 endif syn region cCppOut2 contained start="0" end="^/s*/(%:/|#/)/s*/(endif/>/|else/>/|elif/>/)" contains=cSpaceError,cCppSkip syn region cCppSkip contained start="^/s*/(%:/|#/)/s*/(if/>/|ifdef/>/|ifndef/>/)" skip="//$" end="^/s*/(%:/|#/)/s*endif/>" contains=cSpaceError,cCppSkip endif syn region cIncluded display contained start=+"+ skip=+/|//"+ end=+"+ syn match cIncluded display contained "<[^>]*>" syn match cInclude display "^/s*/(%:/|#/)/s*include/>/s*["<]" contains=cIncluded "syn match cLineSkip "//$" syn cluster cPreProcGroup contains=cPreCondit,cIncluded,cInclude,cDefine,cErrInParen,cErrInBracket,cUserLabel,cSpecial,cOctalZero,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cString,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cParen,cBracket,cMulti syn region cDefine start="^/s*/(%:/|#/)/s*/(define/|undef/)/>" skip="//$" end="$" end="//"me=s-1 keepend contains=ALLBUT,@cPreProcGroup,@Spell syn region cPreProc start="^/s*/(%:/|#/)/s*/(pragma/>/|line/>/|warning/>/|warn/>/|error/>/)" skip="//$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell " Highlight User Labels syn cluster cMultiGroup contains=cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cCppParen,cCppBracket,cCppString syn region cMulti transparent start='?' skip='::' end=':' contains=ALLBUT,@cMultiGroup,@Spell "======================================================== " Highlight All Function "======================================================== syn match cFunction "/<[a-zA-Z_][a-zA-Z_0-9]*/>[^()]*)("me=e-2 syn match cFunction "/<[a-zA-Z_][a-zA-Z_0-9]*/>/s*("me=e-1 hi cFunction gui=NONE guifg=#B73838 "======================================================== " Highlight All Math Operator "======================================================== " C math operators syn match cMathOperator display "[-+/*%=]" "" C pointer operators syn match cPointerOperator display "->/|/./|/:/:" " C logical operators - boolean results syn match cLogicalOperator display "[!<>]=/=" syn match cLogicalOperator display "==" " C bit operators syn match cBinaryOperator display "/(&/||/|/^/|<</|>>/)=/=" syn match cBinaryOperator display "/~" syn match cBinaryOperatorError display "/~=" " More C logical operators - highlight in preference to binary syn match cLogicalOperator display "&&/|||" syn match cLogicalOperatorError display "/(&&/|||/)=" " More C priority operators - highlight in preference to binary syn match cpriorityperator display "(/|)/|/[/|/]/|{/|}" " Math Operator hi cMathOperator guifg=#9AC0CD hi cPointerOperator guifg=#EEAEEE hi cLogicalOperator guifg=#CDCD00 hi cBinaryOperator guifg=#BBFFFF hi cBinaryOperatorError guifg=#C0FF3E hi cLogicalOperator guifg=#C0FF3E hi cLogicalOperatorError guifg=#C0FF3E hi cpriorityperator guifg=#CDAD00 " Avoid matching foo::bar() in C++ by requiring that the next char is not ':' syn cluster cLabelGroup contains=cUserLabel syn match cUserCont display "^/s*/I/i*/s*:$" contains=@cLabelGroup syn match cUserCont display ";/s*/I/i*/s*:$" contains=@cLabelGroup syn match cUserCont display "^/s*/I/i*/s*:[^:]"me=e-1 contains=@cLabelGroup syn match cUserCont display ";/s*/I/i*/s*:[^:]"me=e-1 contains=@cLabelGroup syn match cUserLabel display "/I/i*" contained " Avoid recognizing most bitfields as labels syn match cBitField display "^/s*/I/i*/s*:/s*[1-9]"me=e-1 contains=cType syn match cBitField display ";/s*/I/i*/s*:/s*[1-9]"me=e-1 contains=cType if exists("c_minlines") let b:c_minlines = c_minlines else if !exists("c_no_if0") let b:c_minlines = 50 " #if 0 constructs can be long else let b:c_minlines = 15 " mostly for () constructs endif endif if exists("c_curly_error") syn sync fromstart else exec "syn sync ccomment cComment minlines=" . b:c_minlines endif " Define the default highlighting. " Only used when an item doesn't have highlighting yet hi def link cFormat cSpecial hi def link cCppString cString hi def link cCommentL cComment hi def link cCommentStart cComment hi def link cLabel Label hi def link cUserLabel Label hi def link cConditional Conditional hi def link cRepeat Repeat hi def link cCharacter Character hi def link cSpecialCharacter cSpecial hi def link cNumber Number hi def link cOctal Number hi def link cOctalZero PreProc " link this to Error if you want hi def link cFloat Float hi def link cOctalError cError hi def link cParenError cError hi def link cErrInParen cError hi def link cErrInBracket cError hi def link cCommentError cError hi def link cCommentStartError cError hi def link cSpaceError cError hi def link cSpecialError cError hi def link cCurlyError cError hi def link cOperator Operator hi def link cStructure Structure hi def link cStorageClass StorageClass hi def link cInclude Include hi def link cPreProc PreProc hi def link cDefine Macro hi def link cIncluded cString hi def link cError Error hi def link cStatement Statement hi def link cPreCondit PreCondit hi def link cType Type hi def link cConstant Constant hi def link cCommentString cString hi def link cComment2String cString hi def link cCommentSkip cComment hi def link cString String hi def link cComment Comment hi def link cSpecial SpecialChar hi def link cTodo Todo hi def link cCppSkip cCppOut hi def link cCppOut2 cCppOut hi def link cCppOut Comment let b:current_syntax = "c" " vim: ts=8 " Vim syntax file " Language: C++ " Maintainer: Ken Shan <ccshan@post.harvard.edu> " Last Change: 2002 Jul 15 " For version 5.x: Clear all syntax items " For version 6.x: Quit when a syntax file was already loaded if version < 600 syntax clear elseif exists("b:current_syntax") finish endif " Read the C syntax to start with if version < 600 so <sfile>:p:h/c.vim else runtime! syntax/c.vim unlet b:current_syntax endif " C++ extentions syn keyword cppStatement new delete this friend using syn keyword cppAccess public protected private syn keyword cppType inline virtual explicit export bool wchar_t syn keyword cppExceptions throw try catch syn keyword cppOperator operator typeid syn keyword cppOperator and bitor or xor compl bitand and_eq or_eq xor_eq not not_eq syn match cppCast "/</(const/|static/|dynamic/|reinterpret/)_cast/s*<"me=e-1 syn match cppCast "/</(const/|static/|dynamic/|reinterpret/)_cast/s*$" syn keyword cppStorageClass mutable syn keyword cppStructure class typename template namespace syn keyword cppNumber NPOS syn keyword cppBoolean true false "======================================================== " Highlight All Class Name "======================================================== syn match cClassName "/<[a-zA-Z_][a-zA-Z_0-9]*/>*/:"me=e-1 hi cClassName gui=NONE guifg=CYAN " The minimum and maximum operators in GNU C++ syn match cppMinMax "[<>]?" " Default highlighting if version >= 508 || !exists("did_cpp_syntax_inits") if version < 508 let did_cpp_syntax_inits = 1 command -nargs=+ HiLink hi link <args> else command -nargs=+ HiLink hi def link <args> endif HiLink cppAccess cppStatement HiLink cppCast cppStatement HiLink cppExceptions Exception HiLink cppOperator Operator HiLink cppStatement Statement HiLink cppType Type HiLink cppStorageClass StorageClass HiLink cppStructure Structure HiLink cppNumber Number HiLink cppBoolean Boolean delcommand HiLink endif let b:current_syntax = "cpp" " vim: ts=8