" vim:shiftwidth=2:tabstop=8:expandtab
" WARNING: Vim 6.x typically has problems using encoding UTF-8 _and_
" localized CJK (Chinese, Japanese, and Korean) messages on CJK versions
" of Windows (or other version of Windows with the legacy encoding set
" to a CJK one). By default this script will enable UTF-8 in GVIM,
" which can cause this problem. A patch (and the patched Win32 binary)
" is available at <URL:http://wyw.dcweb.cn/>. You may also choose to
" work around this problem by setting the environment variable LANG as
" follows:
"
" set LANG=en (English msg only; other non-CJK locales will do too)
"
" or
"
" set LANG=zh_CN.CP936 (spell out and use the legacy encoding)
"
" Vim 7 has not this problem (and is now recommended).
if has('autocmd')
" Remove ALL autocommands for the current group
au!
" Mark .asm files MASM-type assembly
au BufNewFile,BufReadPre *.asm let b:asmsyntax='masm'
" Load doxygen syntax file for c/cpp/idl files
let mysyntaxfile=$VIM . '\vimfiles\syntax\doxygen_load.vim'
endif
if has('gui_running')
let do_syntax_sel_menu=1
endif
set nocompatible
source $VIMRUNTIME/vimrc_example.vim
if has('gui_running')
source $VIMRUNTIME/mswin.vim
unmap <C-Y>| " <C-Y> is still allowed in insert mode
" Key mapping to switch windows quickly (<C-Tab> is already mapped)
nnoremap <C-S-Tab> <C-W>W
inoremap <C-S-Tab> <C-O><C-W>W
endif
set autoindent
set nobackup
set formatoptions+=mM
set fileencodings=ucs-bom,utf-8,cp936
set grepprg=grep\ -n
set statusline=%<%f\ %h%m%r%=%k[%{(&fenc==\"\")?&enc:&fenc}%{(&bomb?\",BOM\":\"\")}]\ %-14.(%l,%c%V%)\ %P
set tags+=C:\Program\\\ Files\Vim\vimfiles\systags " help ft-c-omni
set path=.,
\D:/mingw/lib/gcc-lib/mingw32/2.95.3-8/include,
\D:/mingw/include,
\D:/mingw/include/g++-3,
\,
" The matchparen plugin (standard in Vim 7) works better than 'showmatch'
if v:version < 700
set showmatch
endif
" Set suitable spelling convention for International English
if v:version >= 700 && has('syntax')
" Use the British spelling convention of Vim 7
set spelllang=en_gb
elseif has('eval')
" Use Canadian spelling convention of engspchk (Vim script #195)
let spchkdialect='can'
endif
" Function to find the absolute path of a runtime file
if has('eval')
function FindRuntimeFile(filename, ...)
if a:0 != 0 && a:1 =~ 'w'
let require_writable = 1
else
let require_writable = 0
endif
let runtimepaths = &runtimepath . ','
while strlen(runtimepaths) != 0
let filepath = substitute(runtimepaths, ',.*', '', '') . '/' . a:filename
if filereadable(filepath)
if !require_writable || filewritable(filepath)
return filepath
endif
endif
let runtimepaths = substitute(runtimepaths, '[^,]*,', '', '')
endwhile
return ''
endfunction
endif
" Personal setting for working with Windows NT/2000/XP (requires tee in path)
if &shell =~? 'cmd'
"set shellxquote=\"
set shellpipe=2>&1\|\ tee
endif
" Key mappings to ease browsing long lines
noremap <C-J> gj
noremap <C-K> gk
inoremap <M-Home> <C-O>g0
inoremap <M-End> <C-O>g$
" Key mappings for quick arithmetic inside Vim
nnoremap <silent> <Leader>ma yypV:!calcu <C-R>"<CR>k$
vnoremap <silent> <Leader>ma yo<ESC>pV:!calcu <C-R>"<CR>k$
nnoremap <silent> <Leader>mr yyV:!calcu <C-R>"<CR>$
vnoremap <silent> <Leader>mr ygvmaomb:r !calcu <C-R>"<CR>"ay$dd`bv`a"ap
" Key mapping to stop the search highlight
nmap <silent> <F2> :nohlsearch<CR>
imap <silent> <F2> <C-O>:nohlsearch<CR>
" Key mapping to toggle the display of status line for the last window
nmap <silent> <F6> :if &laststatus == 1<bar>
\set laststatus=2<bar>
\echo<bar>
\else<bar>
\set laststatus=1<bar>
\endif<CR>
" Key mappings for quickfix commands, tags, and buffers
nmap <F11> :cn<CR>
nmap <F12> :cp<CR>
nmap <M-F11> :copen<CR>
nmap <M-F12> :cclose<CR>
nmap <C-F11> :tn<CR>
nmap <C-F12> :tp<CR>
nmap <S-F11> :n<CR>
nmap <S-F12> :prev<CR>
" Key mapping for the taglist.vim plugin
nmap <F9> :Tlist<CR>
imap <F9> <C-O>:Tlist<CR>
" Function to turn each paragraph to a line (to work with, say, MS Word)
function! ParagraphToLine()
normal ma
if &formatoptions =~ 'w'
let reg_bak=@"
normal G$vy
if @" =~ '\s'
normal o
endif
let @"=reg_bak
silent! %s/\(\S\)$/\1\r/e
else
normal Go
endif
silent! g/\S/,/^\s*$/j
silent! %s/\s\+$//e
normal `a
endfunction
" Non-GUI setting
if !has('gui_running')
" English messages only
language messages en
" Do not increase the windows width in the taglist.vim plugin
if has('eval')
let Tlist_Inc_Winwidth=0
endif
" Set text-mode menu
if has('wildmenu')
set wildmenu
set cpoptions-=<
set wildcharm=<C-Z>
nmap <F10> :emenu <C-Z>
imap <F10> <C-O>:emenu <C-Z>
endif
" Change encoding according to the current console code page
if &termencoding != '' && &termencoding != &encoding
let &encoding=&termencoding
let &fileencodings='ucs-bom,utf-8,' . &encoding
endif
endif
" Display window width and height in GUI
if has('gui_running') && has('statusline')
let &statusline=substitute
\(&statusline, '%=', '%=%{winwidth(0)}x%{winheight(0)} ', '')
set laststatus=2
endif
" Set up language and font in GUI
if has('gui_running') && has('multi_byte')
function! UTF8_East()
exec 'language messages ' . s:east_lang . '.UTF-8'
set ambiwidth=double
set encoding=utf-8
set guifont=
endfunction
function! UTF8_West()
exec 'language messages ' . s:west_lang . '.UTF-8'
set ambiwidth=single
set encoding=utf-8
set guifont=Courier_New:h10:cDEFAULT
endfunction
function! UTF8_SwitchMode()
if &ambiwidth == 'single'
call UTF8_East()
else
call UTF8_West()
endif
endfunction
" Set encoding (and possibly fileencodings)
if $LANG !~ '\.' || $LANG =~? '\.UTF-8$'
set encoding=utf-8
else
let &encoding=matchstr($LANG, '\.\zs.*')
let &fileencodings='ucs-bom,utf-8,' . &encoding
endif
" Delmenu here has a strange side-effect to make the translation for
" `tear off this menu' display correctly, but will disable the menu
" for engspchk
if v:version >= 700 || v:lang !~? '^\(C\|en\)\(_\|\.\|$\)'
runtime! delmenu.vim
endif
" Extract the current east/west language settings
if v:lang =~? '^\(zh\)\|\(ja\)\|\(ko\)'
let s:east_lang=matchstr(v:lang, '^[a-zA-Z_]*\ze\(\.\|$\)')
let s:west_lang='en'
let s:default_east_lang=1
else
let s:east_lang='zh_CN'
let s:west_lang=matchstr(v:lang, '^[a-zA-Z_]*\ze\(\.\|$\)')
let s:default_east_lang=0
endif
" Set a suitable GUI font and the ambiwidth option
if &encoding == 'utf-8'
if s:default_east_lang
call UTF8_East()
else
call UTF8_West()
endif
elseif !s:default_east_lang
set guifont=Courier_New:h10:cDEFAULT
endif
" Key mapping to switch the east/west UTF-8 mode
nmap <F8> :call UTF8_SwitchMode()<CR>
imap <F8> <C-O>:call UTF8_SwitchMode()<CR>
endif
" Key mapping to toggle spelling check in Vim 7
if v:version >= 700 && has('syntax') && has('eval')
nmap <silent> <F7> :setlocal spell!<CR>
imap <silent> <F7> <C-O>:setlocal spell!<CR>
let spellfile_path = FindRuntimeFile('spell/en.' . &encoding . '.add', 'w')
if spellfile_path != ''
exec 'nmap <M-F7> :sp ' . spellfile_path . '<CR><bar><C-W>_'
endif
endif
if has('autocmd')
function! SetInitialFileEncoding()
if s:legacy_encoding != ''
exec 'set fileencoding=' . s:legacy_encoding
endif
endfunction
function! SetFileEncodings(encodings)
let b:my_fileencodings_bak=&fileencodings
let &fileencodings=a:encodings
endfunction
function! RestoreFileEncodings()
let &fileencodings=b:my_fileencodings_bak
unlet b:my_fileencodings_bak
endfunction
function! CheckFileEncoding()
if &modified && &fileencoding != ''
exec 'e! ++enc=' . &fileencoding
endif
endfunction
function! ConvertHtmlEncoding(encoding)
if a:encoding ==? 'gb2312'
return 'cp936' " GB2312 imprecisely means CP936 in HTML
elseif a:encoding ==? 'iso-8859-1'
return 'latin1' " The canonical encoding name in Vim
elseif a:encoding ==? 'utf8'
return 'utf-8' " Other encoding aliases should follow here
else
return a:encoding
endif
endfunction
function! DetectHtmlEncoding()
if &filetype != 'html'
return
endif
normal m`
normal gg
if search('\c<meta http-equiv=\("\?\)Content-Type\1 content="text/html; charset=[-A-Za-z0-9_]\+">') != 0
let reg_bak=@"
normal y$
let charset=matchstr(@", 'text/html; charset=\zs[-A-Za-z0-9_]\+')
let charset=ConvertHtmlEncoding(charset)
normal ``
let @"=reg_bak
if &fileencodings == ''
let auto_encodings=',' . &encoding . ','
else
let auto_encodings=',' . &fileencodings . ','
endif
if charset !=? &fileencoding &&
\(auto_encodings =~ ',' . &fileencoding . ',' || &fileencoding == '')
silent! exec 'e ++enc=' . charset
endif
else
normal ``
endif
endfunction
function! GnuIndent()
setlocal cinoptions=>4,n-2,{2,^-2,:2,=2,g0,h2,p5,t0,+2,(0,u0,w1,m1
setlocal shiftwidth=2
setlocal tabstop=8
endfunction
function! RemoveTrailingSpace()
if $VIM_HATE_SPACE_ERRORS != '0' &&
\(&filetype == 'c' || &filetype == 'cpp' || &filetype == 'vim')
normal m`
silent! :%s/\s\+$//e
normal ``
endif
endfunction
" Legacy encoding should be the one listed at the end of fileencodings
let s:legacy_encoding=matchstr(&fileencodings, ',\zs[^,]\+$')
" Set default file encoding to the legacy encoding
call SetInitialFileEncoding()
" Highlight space errors in C/C++ source files (Vim tip #935)
if $VIM_HATE_SPACE_ERRORS != '0'
let c_space_errors=1
endif
" Use the legacy encoding for CVS in cvsmenu (Vim script #1245)
let CVScvsoutputencoding=s:legacy_encoding
" Show syntax highlighting attributes of character under cursor (Vim
" script #383)
map <Leader>a :call SyntaxAttr()<CR>
" Automatically find scripts in the autoload directory
au FuncUndefined Syn* exec 'runtime autoload/' . expand('<afile>') . '.vim'
" File type related autosetting
au FileType c,cpp setlocal cinoptions=:0,g0,(0,w1 shiftwidth=4 tabstop=4
au FileType diff setlocal shiftwidth=4 tabstop=4
au FileType changelog setlocal textwidth=76
au FileType html setlocal indentexpr=
au FileType mail setlocal expandtab formatoptions+=aw
" Text file encoding autodetection
au BufReadPre *.gb call SetFileEncodings('cp936')
au BufReadPre *.big5 call SetFileEncodings('cp950')
au BufReadPre *.nfo call SetFileEncodings('cp437')
au BufReadPost *.gb,*.big5,*.nfo call RestoreFileEncodings()
au BufWinEnter *.txt call CheckFileEncoding()
" Detect charset encoding in an HTML file
au BufReadPost *.htm* nested call DetectHtmlEncoding()
" Ensure C/C++ headers are always recognized regardless of the suffix
au BufEnter */include/* setf cpp
" Setting for files following the GNU coding standard
au BufEnter D:/WuYongwei/cvssrc/socket++/* call GnuIndent()
au BufEnter D:/mingw* call GnuIndent()
" Remove trailing spaces for C/C++ and Vim files
au BufWritePre * call RemoveTrailingSpace()
endif