Jun
02


2008-06-02 11:27 am 作者:tangfl.openid.35.com

Special Thanks to  Wu Yongwei

" vim:expandtab shiftwidth=2 tabstop=8 textwidth=72
" Tangfulin's _vimrc for Vim 7

" Last Change: 2008-06-01 00:01:44

if v:version < 700

  echoerr 'This _vimrc requires Vim 7 or later.'

  quit

endif

if has('autocmd')

  " Remove ALL autocommands for the current group

  au!

endif

if has('gui_running')

  " Always show file types in menu

  let do_syntax_sel_menu=1

endif

if has('multi_byte')

  " Legacy encoding is the system default encoding

  let legacy_encoding=&encoding

endif

if has('gui_running') && has('multi_byte')

  " 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

    let legacy_encoding=&encoding

  endif

endif

set nocompatible

source $VIMRUNTIME/vimrc_example.vim

if has('gui_running')

  source $VIMRUNTIME/mswin.vim

  unmap  <C-Y>|             " <C-Y> for Redo is kept in insert mode

  iunmap <C-A>|             " <C-A> for Select-All is kept in normal 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,default,latin1          " default value

set grepprg=grep\ -nH

set statusline=%<%f\ %h%m%r%=%k[%{(&fenc==\"\")?&enc:&fenc}%{(&bomb?\",BOM\":\"\")}]\ %-14.(%l,%c%V%)\ %P

set dictionary+=C:\Program\\\ Files\Vim\vimfiles\words

set tags+=C:\Program\\\ Files\Vim\vimfiles\systags      " help ft-c-omni

set directory=~\Locals~1\Temp

set path=.,

        \,

" Personal setting for working with Windows NT/2000/XP (requires tee in path)

if &shell =~? 'cmd'

  "set shellxquote=\"

  set shellpipe=2>&1\|\ tee

endif

" Quote shell if it contains space and is not quoted

if &shell =~? '^[^"].* .*[^"]'

  let &shell='"' . &shell . '"'

endif

" Set British spelling convention for International English

if has('syntax')

  set spelllang=en_gb

endif

if has('eval')

  " Function to find the absolute path of a runtime file

  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

  " Function to display the current character code in its 'file encoding'

  function! EchoCharCode()

    let char_enc=matchstr(getline('.'), '.', col('.') - 1)

    let char_fenc=iconv(char_enc, &encoding, &fileencoding)

    let i=0

    let len=len(char_fenc)

    let hex_code=''

    while i < len

      let hex_code.=printf('%.2x',char2nr(char_fenc[i]))

      let i+=1

    endwhile

    echo '<' . char_enc . '> Hex ' . hex_code . ' (' .

          \(&fileencoding != '' ? &fileencoding : &encoding) . ')'

  endfunction

  " Key mapping to display the current character in its 'file encoding'

  nnoremap <silent> gn :call EchoCharCode()<CR>

  " Function to switch the cursor position between the first column and the

  " first non-blank column

  function! GoToFirstNonBlankOrFirstColumn()

    let cur_col=col('.')

    normal! ^

    if cur_col != 1 && cur_col == col('.')

      normal! 0

    endif

  endfunction

  " Key mappings to make Home go to first non-blank column or first column

  nnoremap <silent> <Home>      :call GoToFirstNonBlankOrFirstColumn()<CR>

  inoremap <silent> <Home> <C-O>:call GoToFirstNonBlankOrFirstColumn()<CR>

  " Function to insert the current date

  function! InsertCurrentDate()

    let curr_date=strftime('%Y-%m-%d', localtime())

    silent! exec 'normal! gi' .  curr_date . "\<ESC>l"

  endfunction

  " Key mapping to insert the current date

  inoremap <silent> <C-\><C-D> <C-O>:call InsertCurrentDate()<CR>

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 (requires a calcu in path)

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 for confirmed exiting

nnoremap ZX :confirm qa<CR>

" Key mapping for opening the clipboard (Vim script #1014) to avoid

" conflict with the NERD Commenter (Vim script #1218)

nmap <unique> <silent> <Leader>co <Plug>ClipBrdOpen

" Key mapping to stop the search highlight

nmap <silent> <F2>      :nohlsearch<CR>

imap <silent> <F2> <C-O>:nohlsearch<CR>

" Key mappings to fold line according to syntax

nmap <silent> <F3> :set fdl=1 fdm=syntax<bar>syn sync fromstart<CR>

nmap <C-F3>   zv

nmap <M-F3>   zc

" Key mapping for the VimExplorer (Vim script #1950)

nmap <silent> <F4> :VE %:p:h<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 mapping for the taglist.vim plug-in (Vim script #273)

nmap <F9>      :Tlist<CR>

imap <F9> <C-O>:Tlist<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>

" 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 taglist

  let Tlist_Inc_Winwidth=0

  " 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:lang_east . '.UTF-8'

    set ambiwidth=double

    set encoding=utf-8

    let s:utf8_east_mode=1

  endfunction

function! UTF8_West()

    exec 'language messages ' . s:lang_west . '.UTF-8'

    set ambiwidth=single

    set encoding=utf-8

    let s:utf8_east_mode=0

  endfunction

function! UTF8_SwitchMode()

    if exists('b:utf8_east_mode')

      unlet b:utf8_east_mode

    endif

    if s:utf8_east_mode

      call UTF8_West()

      call UTF8_SetFont()

    else

      call UTF8_East()

      call UTF8_SetFont()

    endif

  endfunction

function! UTF8_SetFont()

    if &encoding != 'utf-8'

      return

    endif

    if &fileencoding == 'cp936' ||

          \&fileencoding == 'gbk' ||

          \&fileencoding == 'euc-cn'

      let s:font_east=s:font_schinese

    elseif &fileencoding == 'cp950' ||

          \&fileencoding == 'big5' ||

          \&fileencoding == 'euc-tw'

      let s:font_east=s:font_tchinese

    endif

    if exists('b:utf8_east_mode') && s:utf8_east_mode != b:utf8_east_mode

      let s:utf8_east_mode=b:utf8_east_mode

      let &ambiwidth=(s:utf8_east_mode ? 'double' : 'single')

    endif

    if s:utf8_east_mode

      exec 'set guifont=' . s:font_east

      set guifontwide=

    else

      exec 'set guifont=' . s:font_west

      if exists('s:legacy_encoding_is_west')

        exec 'set guifontwide=' . s:font_east

      endif

    endif

  endfunction

function! UTF8_CheckAndSetFont()

    if &fileencoding == 'cp936' ||

          \&fileencoding == 'gbk' ||

          \&fileencoding == 'euc-cn' ||

          \&fileencoding == 'cp950' ||

          \&fileencoding == 'big5' ||

          \&fileencoding == 'euc-tw'

      let b:utf8_east_mode=1

    elseif &fileencoding == 'latin1' ||

          \&fileencoding =~ 'iso-8859-.*' ||

          \&fileencoding =~ 'koi8-.' ||

          \&fileencoding == 'macroman' ||

          \&fileencoding == 'cp437' ||

          \&fileencoding == 'cp850' ||

          \&fileencoding =~ 'cp125.'

      let b:utf8_east_mode=0

    endif

    if (s:utf8_east_mode && &guifont == s:font_east) ||

          \(!s:utf8_east_mode && &guifont == s:font_west)

      call UTF8_SetFont()

    endif

  endfunction

  " Rebuild the menu to make the translations display correctly

  " --------------------------------------------------------------------

  " Uncomment the following code if all of the following conditions

  " hold:

  "   1) Unicode support is wanted (enabled by default for gVim in this

  "      _vimrc);

  "   2) The libintl.dll shipped with gVim for Windows is not updated

  "      with a new one that supports encoding conversion (see also

  "      <URL:http://tinyurl.com/2hnwaq> for issues with this approach);

  "   3) The environment variable LANG is not manually set to something

  "      like "zh_CN.UTF-8", and the default language is not ASCII-based

  "      (English).

  " The reason why the code is not enabled by default is because it can

  " interfere with the localization of menus created by plug-ins.

  " --------------------------------------------------------------------

  "

  "if $LANG !~ '\.' && v:lang !~? '^\(C\|en\)\(_\|\.\|$\)'

  "  runtime! delmenu.vim

  "endif

  " Fonts

  let s:font_schinese='NSimSun:h12:cDEFAULT'

  let s:font_tchinese='MingLiU:h12:cDEFAULT'

  if legacy_encoding == 'cp936'

    let s:font_schinese=''              " Use the system default font

  elseif legacy_encoding == 'cp950'

    let s:font_tchinese=''              " Use the system default font

  else

    let s:legacy_encoding_is_west=1

  endif

  if legacy_encoding != 'cp950'

    let s:font_east=s:font_schinese

  else

    let s:font_east=s:font_tchinese

  endif

  let s:font_west='Courier_New:h10:cDEFAULT'

  " Extract the current Eastern/Western language settings

  if v:lang =~? '^\(zh\)\|\(ja\)\|\(ko\)'

    let s:lang_east=matchstr(v:lang, '^[a-zA-Z_]*\ze\(\.\|$\)')

    let s:lang_west='en'

    let s:utf8_east_mode=1

    if v:lang=~? '^zh_TW'

      let s:font_east=s:font_tchinese

    endif

  else

    let s:lang_east='zh_CN'

    let s:lang_west=matchstr(v:lang, '^[a-zA-Z_]*\ze\(\.\|$\)')

    let s:utf8_east_mode=0

  endif

  " Set a suitable GUI font and the ambiwidth option

  if &encoding == 'utf-8'

    if s:utf8_east_mode

      call UTF8_East()

    else

      call UTF8_West()

    endif

  endif

  call UTF8_SetFont()

  " Key mapping to switch the Eastern/Western UTF-8 mode

  nmap <F8>      :call UTF8_SwitchMode()<CR>

  imap <F8> <C-O>:call UTF8_SwitchMode()<CR>

if has('autocmd')

    " Set the appropriate GUI font according to the fileencoding, but

    " not if user has manually changed it

    au BufWinEnter,WinEnter * call UTF8_CheckAndSetFont()

  endif

endif

" Key mapping to toggle spelling check

if has('syntax')

  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! 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! 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! UpdateLastChangeTime()

    let last_change_anchor='\(" Last Change:\s\+\)\d\{4}-\d\{2}-\d\{2} \d\{2}:\d\{2}:\d\{2}'

    let last_change_line=search('\%^\_.\{-}\(^\zs' . last_change_anchor . '\)', 'n')

    if last_change_line != 0

      let last_change_time=strftime('%Y-%m-%d %H:%M:%S', localtime())

      let last_change_text=substitute(getline(last_change_line), '^' . last_change_anchor, '\1', '') . last_change_time

      call setline(last_change_line, last_change_text)

    endif

  endfunction

function! RemoveTrailingSpace()

    if $VIM_HATE_SPACE_ERRORS != '0' &&

          \(&filetype == 'c' || &filetype == 'cpp' || &filetype == 'vim')

      normal! m`

      silent! :%s/\s\+$//e

      normal! ``

    endif

  endfunction

  " Set default file encodings to the legacy encoding

  "exec 'set fileencoding=' . legacy_encoding

  if legacy_encoding != 'latin1'

    let &fileencodings=substitute(

                      \&fileencodings, '\<default\>', legacy_encoding, '')

  else

    let &fileencodings=substitute(

                      \&fileencodings, ',default,', ',', '')

  endif

  " Set the directory to store _vim_mru_files (Vim script #521)

  let MRU_File=$HOME . '\_vim_mru_files'

  " And exclude the temporary files from being saved

  let MRU_Exclude_Files='\\itsalltext\\.*\|\\temp\\.*'

  " Use the legacy encoding for calling system() in VimExplorer

  let VEConf_systemEncoding=legacy_encoding

  " Use the legacy encoding for CVS in cvsmenu (Vim script #1245)

  let CVScmdencoding=legacy_encoding

  " but the encoding of files in CVS is still UTF-8

  let CVSfileencoding='utf-8'

  " Use automatic encoding detection (Vim script #1708)

  let $FENCVIEW_TELLENC='tellenc'       " See <URL:http://wyw.dcweb.cn/>

  let fencview_auto_patterns='*.txt,*.tex,*.htm{l\=},*.asp'

                           \.',README,CHANGES,INSTALL'

  let fencview_html_filetypes='html,aspvbs'

  " File types to use function echoing (Vim script #1735)

  let EchoFuncLangsUsed=['c', 'cpp']

  " Do not use menu for NERD Commenter

  let NERDMenuMode=0

  " Prevent NERD Commenter from complaining about unknown file types

  let NERDShutUp=1

  " Highlight space errors in C/C++ source files (Vim tip #935)

  if $VIM_HATE_SPACE_ERRORS != '0'

    let c_space_errors=1

  endif

  " Tune for C highlighting

  let c_gnu=1

  let c_no_curly_error=1

  " Load doxygen syntax file for c/cpp/idl files

  let load_doxygen_syntax=1

  " Use Bitstream Vera Sans Mono as special code font in doxygen, which

  " is available at

  " <URL:http://ftp.gnome.org/pub/GNOME/sources/ttf-bitstream-vera/1.10/>

  let doxygen_use_bitsream_vera=1

  " Let TOhtml output <PRE> and style sheet

  let html_use_css=1

  " 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 cvs        setlocal textwidth=72

  au FileType html,xhtml setlocal indentexpr=

  au FileType mail       setlocal expandtab softtabstop=2 textwidth=70

  " Detect file encoding based on file type

  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()

  " Quickly exiting help files

  au BufRead *.txt      if &buftype=='help'|nmap <buffer> q <C-W>c|endif

  " Setting for files following the GNU coding standard

  au BufEnter D:/mingw*             call GnuIndent()

  " Automatically update change time

  au BufWritePre *vimrc,*.vim       call UpdateLastChangeTime()

  " Remove trailing spaces for C/C++ and Vim files

  au BufWritePre *                  call RemoveTrailingSpace()

endif
推荐(0)
收藏

发表评论:

得到OpenID
使用OpenID提供商
35OpenID 35OpenID MyOpenID MyOpenID Flickr Flickr
Google Google Yahoo Yahoo! AOL AOL
Blogger Blogger LiveJournal LiveJournal Verisign Verisign
ClaimID ClaimID Technorati Technorati Vidoop Vidoop
OpenID OpenID 帮助
您还没有登录,请登录后继续操作。
提示:您必需打开Cookie才能使用本系统
请输入您的 OpenID OpenID 登录:
例如:http://yourname.openid.35.com
close