1 " vim:shiftwidth=2:tabstop=8:expandtab
2 if has('autocmd')
3 " Remove ALL autocommands for the current group
4 au!
5 " Mark .asm files MASM-type assembly
6 au BufNewFile,BufReadPre *.asm let b:asmsyntax='masm'
7 endif
8 if has('gui_running')
9 let do_syntax_sel_menu=1
10 endif
11 if has('gui_running') && $LANG !~ '\.'
12 set encoding=utf-8
13 endif
14 set nocompatible
15 source $VIMRUNTIME/vimrc_example.vim
16 set autoindent
17 set nobackup
18 set showmatch
19 set formatoptions+=mM
20 set fileencodings=ucs-bom,utf-8,gbk
21 set statusline=%<%f\ %h%m%r%=%k[%{(&fenc==\"\")?&enc:&fenc}%{(&bomb?\",BOM\":\"\")}]\ %-14.(%l,%c%V%)\ %P
22 if has('mouse')
23 set mouse=a
24 endif
25 if has('multi_byte') && v:version > 601
26 if v:lang =~? '^\(zh\)\|\(ja\)\|\(ko\)'
27 set ambiwidth=double
28 endif
29 endif
30 " Key mappings to ease browsing long lines
31 noremap <C-J> gj
32 noremap <C-K> gk
33 noremap <Down> gj
34 noremap <Up> gk
35 inoremap <Down> <C-O>gj
36 inoremap <Up> <C-O>gk
37 " Key mappings for quick arithmetic inside Vim
38 nnoremap <silent> <Leader>ma yypV:!calcu '<C-R>"'<CR>k$
39 vnoremap <silent> <Leader>ma yo<ESC>pV:!calcu '<C-R>"'<CR>k$
40 nnoremap <silent> <Leader>mr yyV:!calcu '<C-R>"'<CR>$
41 vnoremap <silent> <Leader>mr ygvmaomb:r !calcu '<C-R>"'<CR>"ay$dd`bv`a"ap
42 " Key mapping to stop the search highlight
43 nmap <silent> <F2> :nohlsearch<CR>
44 imap <silent> <F2> <C-O>:nohlsearch<CR>
45 " Key mapping for the taglist.vim plugin
46 nmap <F9> :Tlist<CR>
47 imap <F9> <C-O>:Tlist<CR>
48 " Key mappings for the quickfix commands
49 nmap <F11> :cn<CR>
50 nmap <F12> :cp<CR>
51 " Non-GUI setting
52 if !has('gui_running')
53 " Do not increase the windows width in the taglist.vim plugin
54 if has('eval')
55 let Tlist_Inc_Winwidth=0
56 endif
57 " Set text-mode menu
58 if has('wildmenu')
59 set wildmenu
60 set cpoptions-=<
61 set wildcharm=<C-Z>
62 nmap <F10> :emenu <C-Z>
63 imap <F10> <C-O>:emenu <C-Z>
64 endif
65 endif
66 if has('autocmd')
67 function! SetFileEncodings(encodings)
68 let b:my_fileencodings_bak=&fileencodings
69 let &fileencodings=a:encodings
70 endfunction
71 function! RestoreFileEncodings()
72 let &fileencodings=b:my_fileencodings_bak
73 unlet b:my_fileencodings_bak
74 endfunction
75 function! CheckFileEncoding()
76 if &modified && &fileencoding != ''
77 exec 'e! ++enc=' . &fileencoding
78 endif
79 endfunction
80 function! ConvertHtmlEncoding(encoding)
81 if a:encoding ==? 'gb2312'
82 return 'gbk' " GB2312 imprecisely means GBK in HTML
83 elseif a:encoding ==? 'iso-8859-1'
84 return 'latin1' " The canonical encoding name in Vim
85 elseif a:encoding ==? 'utf8'
86 return 'utf-8' " Other encoding aliases should follow here
87 else
88 return a:encoding
89 endif
90 endfunction
91 function! DetectHtmlEncoding()
92 if &filetype != 'html'
93 return
94 endif
95 normal m`
96 normal gg
97 if search('\c<meta http-equiv=\("\?\)Content-Type\1 content="text/html; charset=[-A-Za-z0-9_]\+">') != 0
98 let reg_bak=@"
99 normal y$
100 let charset=matchstr(@", 'text/html; charset=\zs[-A-Za-z0-9_]\+')
101 let charset=ConvertHtmlEncoding(charset)
102 normal ``
103 let @"=reg_bak
104 if &fileencodings == ''
105 let auto_encodings=',' . &encoding . ','
106 else
107 let auto_encodings=',' . &fileencodings . ','
108 endif
109 if charset !=? &fileencoding &&
110 \(auto_encodings =~ ',' . &fileencoding . ',' || &fileencoding == '')
111 silent! exec 'e ++enc=' . charset
112 endif
113 else
114 normal ``
115 endif
116 endfunction
117 function! GnuIndent()
118 setlocal cinoptions=>4,n-2,{2,^-2,:2,=2,g0,h2,p5,t0,+2,(0,u0,w1,m1
119 setlocal shiftwidth=2
120 setlocal tabstop=8
121 endfunction
122 function! RemoveTrailingSpace()
123 if $VIM_HATE_SPACE_ERRORS != '0' &&
124 \(&filetype == 'c' || &filetype == 'cpp' || &filetype == 'vim')
125 normal m`
126 silent! :%s/\s\+$//e
127 normal ``
128 endif
129 endfunction
130 " Highlight space errors in C/C++ source files (Vim tip #935)
131 if $VIM_HATE_SPACE_ERRORS != '0'
132 let c_space_errors=1
133 endif
134 " Use Canadian spelling convention in engspchk (Vim script #195)
135 let spchkdialect='can'
136 " Show syntax highlighting attributes of character under cursor (Vim
137 " script #383)
138 map <Leader>a :call SyntaxAttr()<CR>
139 " Automatically find scripts in the autoload directory
140 au FuncUndefined * exec 'runtime autoload/' . expand('<afile>') . '.vim'
141 " File type related autosetting
142 au FileType c,cpp setlocal cinoptions=:0,g0,(0,w1 shiftwidth=4 tabstop=4
143 au FileType diff setlocal shiftwidth=4 tabstop=4
144 au FileType html setlocal autoindent indentexpr=
145 au FileType changelog setlocal textwidth=76
146 " Text file encoding autodetection
147 au BufReadPre *.gb call SetFileEncodings('gbk')
148 au BufReadPre *.big5 call SetFileEncodings('big5')
149 au BufReadPre *.nfo call SetFileEncodings('cp437')
150 au BufReadPost *.gb,*.big5,*.nfo call RestoreFileEncodings()
151 au BufWinEnter *.txt call CheckFileEncoding()
152 " Detect charset encoding in an HTML file
153 au BufReadPost *.htm* nested call DetectHtmlEncoding()
154 " Recognize standard C++ headers
155 au BufEnter /usr/include/c++/* setf cpp
156 au BufEnter /usr/include/g++-3/* setf cpp
157 " Setting for files following the GNU coding standard
158 au BufEnter /usr/* call GnuIndent()
159 " Remove trailing spaces for C/C++ and Vim files
160 au BufWritePre * call RemoveTrailingSpace()
161 endif