1 
  2 " 尝试设置编码方式为中文
  3 try
  4     lang zh_CN
  5 
  6     "设置默认编码方式,Vim 中所有字符的内部表示为UTF-8
  7     set encoding=utf-8
  8     set langmenu=zh_CN.UTF-8
  9     language message zh_CN.UTF8
 10 catch
 11 endtry
 12 
 13 " Multi-encoding setting, MUST BE IN THE BEGINNING OF .vimrc!
 14 if has("multi_byte")
 15     " When 'fileencodings' starts with 'ucs-bom', don't do this manually
 16     "set bomb
 17     set fileencodings=cucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
 18     " CJK environment detection and corresponding setting
 19     if v:lang =~ "^zh_CN"
 20         " Simplified Chinese, on Unix euc-cn, on MS-Windows cp936
 21         set encoding=cp936
 22         set termencoding=cp936
 23         if &fileencoding == ''
 24             set fileencoding=cp936
 25         endif
 26     elseif v:lang =~ "^zh_TW"
 27         " Traditional Chinese, on Unix euc-tw, on MS-Windows cp950
 28         set encoding=big5
 29         set termencoding=big5
 30         if &fileencoding == ''
 31             set fileencoding=big5
 32         endif
 33     elseif v:lang =~ "^ja_JP"
 34         " Japanese, on Unix euc-jp, on MS-Windows cp932
 35         set encoding=japan
 36         set termencoding=japan
 37         if &fileencoding == ''
 38             set fileencoding=japan
 39         endif
 40     elseif v:lang =~ "^ko"
 41         " Korean on Unix euc-kr, on MS-Windows cp949
 42         set encoding=korea
 43         set termencoding=korea
 44         if &fileencoding == ''
 45             set fileencoding=korea
 46         endif
 47     endif
 48     " Detect UTF-8 locale, and override CJK setting if needed
 49     if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
 50         set encoding=utf-8
 51         set termencoding=utf-8
 52         if &fileencoding == ''
 53             set fileencoding=utf-8
 54         endif
 55     endif
 56 else
 57     echoerr 'Sorry, this version of (g)Vim was not compiled with "multi_byte"'
 58 endif
 59 
 60 " 在处理未保存或只读文件的时候,弹出确认
 61 set confirm
 62 
 63 " 与windows共享剪贴板
 64 set clipboard+=unnamed
 65 
 66 " 开启检测文件的类型
 67 filetype on
 68 
 69 " 载入对应文件类型的插件与缩进功能
 70 filetype plugin indent on
 71 
 72 " 启动的时候不显示那个援助索马里儿童的提示
 73 " 以及各种提示
 74 set shortmess=atI
 75 
 76 " 不要换行
 77 " 当一行的内容超出窗口宽度时,不显示到下一行
 78 set wrap
 79 
 80 " 语法高亮
 81 syntax on
 82 
 83 " 自动缩进
 84 " 把当前行的对齐格式应用到下一行
 85 " 打开普通类型的文件时会自动缩进,
 86 " 该自动缩进不如 cindent 智能,
 87 " 但它可以为你编辑非C/C++ 文件提供一定帮助
 88 set autoindent
 89 
 90 " 使用C语言的缩进方式cindent
 91 " 根据特殊字符如“{”、“}”、“:”和语句
 92 " 是否结束等信息自动调整缩进,
 93 " 在编码的时候我们可以使用“V”命令选中一段文本后,
 94 " 按"="将这段文本重新调整缩进格式
 95 set cindent
 96 
 97 " 自动缩进时进位或者退位的空格数为4
 98 set shiftwidth=4
 99 
100 " set softtabstop=4
101 " 制表符Tab的宽度为4空格
102 set tabstop=4
103 
104 " Set to auto read when a file is changed from the outside
105 set autoread
106 
107 " 设置如何使用Backspace键,默认三种方式都设置上
108 set backspace=indent,eol,start
109 
110 " 设置匹配模式
111 " 类似当输入一个右括号时会匹配相应的那个左括号matchtime单位时间
112 set showmatch
113 
114 " 匹配括号高亮的时间(单位是十分之一秒)
115 set matchtime=2
116 
117 " forbid create back file
118 " 不备份修改的文件
119 set nobackup
120 
121 " 不要生成swap文件,当buffer被丢弃的时候隐藏它
122 setlocal noswapfile
123 set bufhidden=hide
124 
125 " line number
126 " 显示行号
127 set number
128 
129 " ruler
130 " 在编辑过程中,在右下角显示光标位置的状态行
131 set ruler
132 
133 " 配置色彩,在vim73/colors文件夹下
134 " 选好自己喜爱的颜色之后将mydesert替换掉
135 colorscheme mydesert
136 
137 " 设置字体
138 " 及字体大小
139 set guifont=Consolas:h12
140 
141 " 在一些地方忽略大小写的影响
142 "set ignorecase
143 
144 " 如果要强制区别大小写,用smartcase
145 set smartcase
146 
147 " 查找时对找到的词进行高亮显示
148 set hlsearch
149 
150 " 设置查找时的快速寻找,对于找到的词进行高亮
151 set incsearch
152 
153 " 用于命令集的扩展
154 " 如\m,\M,\v,\V
155 set magic
156 
157 " 出错时不用声音及视觉报警
158 set noerrorbells
159 set novisualbell
160 
161 """""""""""""""""""""""""""""""""""""""
162 "以下用于设置代码的自动折叠
163 """""""""""""""""""""""""""""""""""""""
164 
165 "设置默认的方式为所有折叠都是关闭的
166 "set foldenable
167 
168 "设置默认的方式为所有折叠都是打开的
169 set nofoldenable
170 
171 "设置以缩进方式自动折叠代码
172 set foldmethod=indent
173 
174 " 用+、-号标记缩进的行,数字代表缩进的深度
175 " set foldcolumn=4
176 
177 " 所有缩进等于或大于 'shiftwidth' foldlevel倍的折叠将被关闭
178 " 这样做的目的是让文件的默认模式是所有折叠都打开
179 "set foldlevel=100
180 
181 "set foldopen=block
182 "set foldclose=all
183 
184 " zo O-pen a fold (打开折叠)
185 " zc C-lose a fold (关闭折叠)
186 " zr 这将减少 (R-educe) 折叠
187 " zm 这将折叠更多 (M-ore)
188 map <silent> <F5> zO
189 map <silent> <F6> zC
190 map <silent> <F7> zR
191 map <silent> <F8> zM
192 
193 "用空格来开关当前光标处的折叠
194 nnoremap <silent> <space>  @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo') <CR>
195 
196 "进行版权声明的设置
197 "添加或更新头
198 map <silent> <F4> ms:call TitleDet() <CR>'s
199 function AddTitle()
200     call append(0,"/*")
201     call append(1," * =====================================================================================")
202     call append(2," *")
203     call append(3," *       Filename:  ".expand("%:t"))
204     call append(4," *")
205     call append(5," *    Description:  ")
206     call append(6," *")
207     call append(7," *        Version:  1.0")
208     call append(8," *        Created:  ")
209     call append(9," *       Revision:  none")
210     call append(10," *  Last modified:  ".strftime("%c"))
211     call append(11," *       Compiler:  mingw-gcc")
212     call append(12," *")
213     call append(13," *         Author:  HaoZhi (All rights reserved), leizonghao@gmail.com")
214     call append(14," *        Company:  HuaZhong University of Science & Technology")
215     call append(15," *")
216     call append(16," * =====================================================================================")
217     call append(17," */")
218     echohl WarningMsg | echo "添加版权信息成功" | echohl None
219 endf
220 "更新最近修改时间和文件名
221 function UpdateTitle()
222     normal m'
223     execute ' /*  Last modified:/s@:.*$@\=strftime(":\t%c")@'
224     normal ''
225     normal mk
226     execute ' /*       Filename:/s@:.*$@\=":\t".expand("%:t")@'
227     execute "noh"
228     normal 'k
229     echohl WarningMsg | echo "更新修改时间成功" | echohl None
230 endfunction
231 "判断前13行代码里面,是否有Last modified这个单词,
232 "如果没有的话,代表没有添加过作者信息,需要新添加;
233 "如果有的话,那么只需要更新即可
234 function TitleDet()
235     let n=1
236     "默认为添加
237     while n < 13
238         let line = getline(n)
239         if line =~ '^\s\*\s\sLast.modified:\s\S*.*$'
240             call UpdateTitle()
241             return
242         endif
243         let n = n + 1
244     endwhile
245     call AddTitle()
246 endfunction
247 
248 """""""""""""""""""""""""""""""""""""""""""""""
249 " 设置taglist的各项功能
250 """""""""""""""""""""""""""""""""""""""""""""""
251 "ctags代码查看功能,在左侧生成目录
252 "其中包括各个定义的变量,函数
253 "该功能用到了taglist.vim及ctags.exe
254 "通过F9功能键,打开索表,再次按F9或者‘q’退出
255 "Ctrl+w实现转跳
256 """""""""""""""""""""""""""""""""""""""""""""""
257 " let g:Tlist_Ctags_Cmd=$VIMRUNTIME.'\ctags.exe'
258 let Tlist_WinWidth=20
259 " let Tlist_Display_Tag_Scope = 0
260 let Tlist_Enable_Fold_Column = 0
261 let Tlist_GainFocus_On_ToggleOpen = 1
262 " let updatetime=1000
263 "设置F9快捷键
264 nmap <silent> <F9> :TlistToggle <CR>
265 
266 
267 """""""""""""""""""""""""""""""""""
268 "NERDTree的设置,在右侧打开一列表
269 """""""""""""""""""""""""""""""""""
270 "包含当前目录下的所有文件及可视化结构
271 "同时可进入子目录进行各项操作,
272 "Ctrl+w实现窗口转跳
273 """""""""""""""""""""""""""""""""""
274 if !exists("loaded_nerd_tree")
275     "extra syntax highlighting elements are added
276     let NERDChristmasTree=1
277     let NERDTreeAutoCenter=1
278     let NERDTreeBookmarksFile=$VIMRUNTIME.'\data\NERDBookmarks.txt'
279     "单击打开目录,双击打开文件
280     let NERDTreeMouseMode=2
281     let NERDTreeShowBookmarks=1
282     let NERDTreeShowFiles=1
283     let NERDTreeShowHidden=1
284     let NERDTreeShowLineNumbers=0
285     let NERDTreeWinSize=20
286     let NERDTreeWinPos='right'
287 endif
288 "F10为功能快速设置键
289 nmap <silent> <F10> :NERDTreeToggle <CR>
290 
291 
292 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
293 " cscope and ctags设置如下
294 " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
295 
296 " 当需要跟踪一个函数的调用时优先设置从tags中读取数据
297 if has("cscope")
298     set cscopeprg=$VIMRUNTIME/cscope.exe
299     set cscopetagorder=1    "1表示优先搜索tags,再cscope.out
300     set cscopetag
301 endif
302 " cscope的快捷键映射
303 " Ctrl+'_'按下之后松开,再选择相应的功能,进行转跳
304 "按下 s 寻找该函数或变量的原型
305 nmap <silent> <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR>
306 
307 "按下 g 寻找该函数或变量的定义definition
308 nmap <silent> <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR>
309 "**********按下 c 寻找该函数中调用的其他各个函数
310 nmap <silent> <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR>
311 "按下 t 转跳
312 nmap <silent> <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR>
313 "按下 e 寻找
314 nmap <silent> <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR>
315 "按下 f 寻找该文件
316 nmap <silent> <C-_>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
317 "按下 i 寻找including文件
318 nmap <silent> <C-_>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
319 "***最常用**按下 d 寻找该函数被哪些函数调用过
320 nmap <silent> <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR>
321 "Cscope缺省只解析C文件(.c和.h)、lex文件(.l)和yacc文件(.y)
322 "调用了ctags.exe与cscope.exe,实现函数原型与调用之间的互相查看
323 "即A调用了B时,在A中可通过ctrl+]查看B,在B中可通过**查看A
324 function! UpdateTagsAndCscope()
325     if filereadable("cscope.out")
326         silent cscope kill cscope.out
327     endif
328     silent "cd"
329     :silent ! "\%VIMRUNTIME\%\buildindex.bat"
330     "以下注释是在不断尝试中的改进,对于路径中的空格,有了不错的解决
331     ":silent ! "\%VIMRUNTIME\%\getFileList.bat" & "\%VIMRUNTIME\%\ctags.exe" -R --fields=+ianS --excmd=p --extra=+q --c++-kinds=+p --c-kinds=+p -L cscope.files & "\%VIMRUNTIME\%\cscope.exe" -Rbk
332     ":silent ! dir /b /s *.c *.cpp *.h *.s *.asm >cscope.files & "\%VIMRUNTIME\%\ctags.exe" -R --fields=+ianS --excmd=p --extra=+q --c++-kinds=+p --c-kinds=+p -L cscope.files & "\%VIMRUNTIME\%\cscope.exe" -Rbk
333 ""  :silent !dir /b *.c *.cpp *.h >cscope.files
334 ""  :silent ! \%VIMRUNTIME\%\cscope.exe" -Rbk
335     if filereadable("cscope.out")
336         silent cscope add cscope.out
337         echo "加载检索成功"
338     else
339         echo "加载检索失败"
340     endif
341 endfunction
342 
343 "F12快捷键,更新当前目录下的ctags与cscope.out文件
344 nmap <silent> <F12> :call UpdateTagsAndCscope() <CR>
345 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
346 " cscope and ctags设置结束
347 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
348 
349 """"""""""""""""""""""""""""""""""""""""""""""""""
350 "以下为a.vim的使用说明,它可以让编辑器在.c与.h、.cpp与.h之间
351 "快速的切换,用的是命令:A,帮助文档为alternate.txt,
352 "快捷方式为F2
353 """"""""""""""""""""""""""""""""""""""""""""""""""
354 nmap <silent> <F2> :A <CR>
355 
356 " 通过F11功能键,对整个文件进行格式排版
357 nmap <silent> <F11> gg=G
358 
359 """"""""""""""""""""""""""""""""""""""""""""""""
360 ""自动识别文件编码快捷方式
361 ""准确度很高,调用了fencview.vim
362 ""通过F3快捷键进行调用
363 """"""""""""""""""""""""""""""""""""""""""""""""
364 nmap <silent> <F3> :FencAutoDetect <CR>
365 
366 "用于汇编语言的编辑
367 "如果是asm,s,S的文件后缀名,则启用汇编相应显示方式
368 "设置了该语句之后asmx86.vim插件的作用无关紧要
369 autocmd FileType asm,s,S set filetype=masm
370 
371 ""设置txt的显示模式
372 autocmd BufRead,BufNewFile *.txt,*.log setlocal filetype=txt
373 
374 """""""""""""""""""""""""""""""""""""""""""""""""
375 "设置echofunc的用法
376 "亮点有二:
377 "1是当鼠标指向一个函数时,能显示它其中的参数的类型
378 "2是当输入一个函数时,在状态栏会有参数用法的提示
379 "you may use Alt+'-' and Alt+'=' 
380 "(configurable via EchoFuncKeyPrev and EchoFuncKeyNext)
381 "to cycle between function declarations (if exists)
382 "g:EchoFuncLangsDict 
383 "Dictionary to map the Vim file types to 
384 "tags languages that should be used. You do 
385 "not need to touch it in most cases. 
386 "g:EchoFuncLangsUsed 
387 "File types to enable echofunc, in case you 
388 "do not want to use EchoFunc on all file 
389 "types supported. Example: 
390 "let g:EchoFuncLangsUsed = ["java","cpp"] 
391 "g:EchoFuncMaxBalloonDeclarations 
392 "Maximum lines to display in balloon declarations. 
393 "g:EchoFuncKeyNext 
394 "Key to echo the next function 
395 "g:EchoFuncKeyPrev 
396 "Key to echo the previous function 
397 """""""""""""""""""""""""""""""""""""""""""""""""""
398 
399 "set csupport
400 let g:C_GlobalTemplateFile=$VIMRUNTIME.'\c-support\templates\Templates'
401 let g:C_CodeSnippets=$VIMRUNTIME.'\c-support\codesnippets\'