1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001
| " ============================================================================= " << 判断操作系统是 Windows 还是 Linux 和判断是终端还是 Gvim >> " =============================================================================
" ----------------------------------------------------------------------------- " < 判断操作系统是否是 Windows 还是 Linux > " ----------------------------------------------------------------------------- let g:iswindows = 0 let g:islinux = 0 if(has("win32") || has("win64") || has("win95") || has("win16")) let g:iswindows = 1 else let g:islinux = 1 endif
" ----------------------------------------------------------------------------- " < 判断是终端还是 Gvim > " ----------------------------------------------------------------------------- if has("gui_running") let g:isGUI = 1 else let g:isGUI = 0 endif
" ============================================================================= " << 以下为软件默认配置 >> " =============================================================================
" ----------------------------------------------------------------------------- " < Windows Gvim 默认配置> 做了一点修改 " ----------------------------------------------------------------------------- if (g:iswindows && g:isGUI) source $VIMRUNTIME/vimrc_example.vim source $VIMRUNTIME/mswin.vim behave mswin set diffexpr=MyDiff()
function MyDiff() let opt = '-a --binary ' if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif let arg1 = v:fname_in if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif let arg2 = v:fname_new if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif let arg3 = v:fname_out if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif let eq = '' if $VIMRUNTIME =~ ' ' if &sh =~ '\<cmd' let cmd = '""' . $VIMRUNTIME . '\diff"' let eq = '"' else let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"' endif else let cmd = $VIMRUNTIME . '\diff' endif silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq endfunction endif
" ----------------------------------------------------------------------------- " < Linux Gvim/Vim 默认配置> 做了一点修改 " ----------------------------------------------------------------------------- if g:islinux set hlsearch "高亮搜索 set incsearch "在输入要搜索的文字时,实时匹配
" Uncomment the following to have Vim jump to the last position when " reopening a file if has("autocmd") au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif endif
if g:isGUI " Source a global configuration file if available if filereadable("/etc/vim/gvimrc.local") source /etc/vim/gvimrc.local endif else " This line should not be removed as it ensures that various options are " properly set to work with the Vim-related packages available in Debian. runtime! debian.vim
" Vim5 and later versions support syntax highlighting. Uncommenting the next " line enables syntax highlighting by default. if has("syntax") syntax on endif
" set mouse=a " 在任何模式下启用鼠标 set t_Co=256 " 在终端启用256色 set backspace=2 " 设置退格键可用
" Source a global configuration file if available if filereadable("/etc/vim/vimrc.local") source /etc/vim/vimrc.local endif endif endif
" ============================================================================= " << 以下为用户自定义配置 >> " =============================================================================
" ----------------------------------------------------------------------------- " < Vundle 插件管理工具配置 > " ----------------------------------------------------------------------------- " 用于更方便的管理vim插件,具体用法参考 :h vundle 帮助 " Vundle工具安装方法为在终端输入如下命令 " git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle " 如果想在 windows 安装就必需先安装 "git for window",可查阅网上资料
set nocompatible "禁用 Vi 兼容模式 filetype off "禁用文件类型侦测
if g:islinux set rtp+=~/.vim/bundle/vundle/ call vundle else set rtp+=$VIM/vimfiles/bundle/vundle/ call vundle endif
" 使用Vundle来管理插件,这个必须要有。 Bundle 'gmarik/vundle'
" 以下为要安装或更新的插件,不同仓库都有(具体书写规范请参考帮助) " ----------------------------------------------------------------------------- " < a.vim 插件配置 > " ----------------------------------------------------------------------------- " :AS ---切换头文件并水平分割窗口 " Bundle 'a.vim' " ----------------------------------------------------------------------------- " < Align 插件配置 > " ----------------------------------------------------------------------------- " 一个对齐的插件,用来——排版与对齐代码,功能强大,不过用到的机会不多 Bundle 'Align' " ----------------------------------------------------------------------------- " < tab 键自动补全 > " ----------------------------------------------------------------------------- " Bundle 'SuperTab' " ----------------------------------------------------------------------------- " < auto-pairs 插件配置 > " ----------------------------------------------------------------------------- " 用于括号与引号自动补全,不过会与函数原型提示插件echofunc冲突 Bundle 'jiangmiao/auto-pairs' " ----------------------------------------------------------------------------- " < BufExplorer 插件配置 > " ----------------------------------------------------------------------------- " 快速轻松的在缓存中切换(相当于另一种多个文件间的切换方式) Bundle 'bufexplorer.zip' " ----------------------------------------------------------------------------- " < ccvext.vim 插件配置 > " ----------------------------------------------------------------------------- " 用于对指定文件自动生成tags与cscope文件并连接 " Bundle 'ccvext.vim' " ----------------------------------------------------------------------------- " < cSyntaxAfter 插件配置 > " ----------------------------------------------------------------------------- " 高亮括号与运算符等 Bundle 'cSyntaxAfter' " ----------------------------------------------------------------------------- " < ctrlp.vim 插件配置 > " ----------------------------------------------------------------------------- " 一个全路径模糊文件,缓冲区,最近最多使用,... 检索插件;详细帮助见 :h ctrlp " 常规模式下输入:Ctrl + p 调用插件 Bundle 'ctrlpvim/ctrlp.vim' " ----------------------------------------------------------------------------- " < emmet-vim(前身为Zen coding) 插件配置 > " ----------------------------------------------------------------------------- " HTML/CSS代码快速编写神器,详细帮助见 :h emmet.txt Bundle 'mattn/emmet-vim' " ----------------------------------------------------------------------------- " < indentLine 插件配置 > " ----------------------------------------------------------------------------- " 用于显示对齐线,与 indent_guides 在显示方式上不同,根据自己喜好选择了 " 在终端上会有屏幕刷新的问题,这个问题能解决有更好了 Bundle 'Yggdroot/indentLine' " ----------------------------------------------------------------------------- " < vim-javacompleteex(也就是 javacomplete 增强版)插件配置 > " ----------------------------------------------------------------------------- " java 补全插件 " Bundle 'vim-javacompleteex' " ----------------------------------------------------------------------------- " < Mark--Karkat(也就是 Mark) 插件配置 > " ----------------------------------------------------------------------------- " 给不同的单词高亮,表明不同的变量时很有用,详细帮助见 :h mark.txt Bundle 'Mark--Karkat' " ----------------------------------------------------------------------------- " < neocomplcache 插件配置 > " ----------------------------------------------------------------------------- " 关键字补全、文件路径补全、tag补全等等,各种,非常好用,速度超快。 Bundle 'Shougo/neocomplcache.vim' " ----------------------------------------------------------------------------- " < nerdcommenter 插件配置 > " ----------------------------------------------------------------------------- " 我主要用于C/C++代码注释(其它的也行) " 以下为插件默认快捷键,其中的说明是以C/C++为例的,其它语言类似 Bundle 'scrooloose/nerdcommenter' " ----------------------------------------------------------------------------- " < nerdtree 插件配置 > " ----------------------------------------------------------------------------- " 有目录村结构的文件浏览插件
" 常规模式下输入 F2 调用插件 Bundle 'scrooloose/nerdtree' " ----------------------------------------------------------------------------- " < omnicppcomplete 插件配置 > " ----------------------------------------------------------------------------- " 用于C/C++代码补全,这种补全主要针对命名空间、类、结构、共同体等进行补全,详细 " 说明可以参考帮助或网络教程等 " 使用前先执行如下 ctags 命令(本配置中可以直接使用 ccvext 插件来执行以下命令) " ctags -R --c++-kinds=+p --fields=+iaS --extra=+q " 我使用上面的参数生成标签后,对函数使用跳转时会出现多个选择 " Bundle 'OmniCppComplete' " ----------------------------------------------------------------------------- " < powerline 插件配置 > " ----------------------------------------------------------------------------- " 状态栏插件,更好的状态栏效果 Bundle 'Lokaltog/vim-powerline' " ----------------------------------------------------------------------------- " < repeat 插件配置 > " ----------------------------------------------------------------------------- " 主要用"."命令来重复上次插件使用的命令 Bundle 'repeat.vim' " ----------------------------------------------------------------------------- " < snipMate 插件配置 > " ----------------------------------------------------------------------------- " 用于各种代码补全,这种补全是一种对代码中的词与代码块的缩写补全,详细用法可以参 " 考使用说明或网络教程等。不过有时候也会与 supertab 插件在补全时产生冲突,如果大 " 侠有什么其它解决方法希望不要保留呀 Bundle 'msanders/snipmate.vim' " ----------------------------------------------------------------------------- " < SrcExpl 插件配置 > " ----------------------------------------------------------------------------- " 增强源代码浏览,其功能就像Windows中的"Source Insight" Bundle 'wesleyche/SrcExpl' " ----------------------------------------------------------------------------- " < std_c 插件配置 > " ----------------------------------------------------------------------------- " Bundle 'std_c.zip' " ----------------------------------------------------------------------------- " < surround 插件配置 > " ----------------------------------------------------------------------------- " 快速给单词/句子两边增加符号(包括html标签),缺点是不能用"."来重复命令 " 不过 repeat 插件可以解决这个问题,详细帮助见 :h surround.txt Bundle 'tpope/vim-surround' " ----------------------------------------------------------------------------- " < Syntastic 插件配置 > " ----------------------------------------------------------------------------- " 用于保存文件时查检语法 Bundle 'scrooloose/syntastic' " ----------------------------------------------------------------------------- " < Tagbar 插件配置 > " ----------------------------------------------------------------------------- " 相对 TagList 能更好的支持面向对象
" 常规模式下输入 tb 调用插件,如果有打开 TagList 窗口则先将其关闭 Bundle 'majutsushi/tagbar' " ----------------------------------------------------------------------------- " < TagList 插件配置 > " ----------------------------------------------------------------------------- " 高效地浏览源码, 其功能就像vc中的workpace " 那里面列出了当前文件中的所有宏,全局变量, 函数名等 " 常规模式下输入 tl 调用插件,如果有打开 Tagbar 窗口则先将其关闭 Bundle 'taglist.vim' " ----------------------------------------------------------------------------- " < txtbrowser 插件配置 > " ----------------------------------------------------------------------------- " 用于文本文件生成标签与与语法高亮(调用TagList插件生成标签,如果可以) Bundle 'TxtBrowser' " ----------------------------------------------------------------------------- " < ZoomWin 插件配置 > " ----------------------------------------------------------------------------- " 用于分割窗口的最大化与还原 " 常规模式下按快捷键 <c-w>o 在最大化与还原间切换 Bundle 'ZoomWin'
" Go 语法高亮 https://github.com/fatih/vim-go Bundle 'fatih/vim-go'
" Go 语法检查 Bundle 'rjohnsondev/vim-compiler-go'
" PHP DOC MAC ONLY Bundle 'rizzatti/dash.vim'
" 全文搜索(项目) 函数名 " 需要先安装 ack " yum install ack Bundle 'mileszs/ack.vim' Bundle 'dyng/ctrlsf.vim'
" 全局搜索 leader - t 开启 Bundle 'wincent/command-t'
" coffee-script compile Bundle 'kchmck/vim-coffee-script'
" ----------------------------------------------------------------------------- " < 编码配置 > " ----------------------------------------------------------------------------- " 注:使用utf-8格式后,软件与程序源码、文件路径不能有中文,否则报错 set encoding=utf-8 "设置gvim内部编码,默认不更改 set fileencoding=utf-8 "设置当前文件编码,可以更改,如:gbk(同cp936) set fileencodings=ucs-bom,utf-8,gbk,cp936,latin-1 "设置支持打开的文件的编码
" 文件格式,默认 ffs=dos,unix set fileformat=unix "设置新(当前)文件的<EOL>格式,可以更改,如:dos(windows系统常用) set fileformats=unix,dos,mac "给出文件的<EOL>格式类型
if (g:iswindows && g:isGUI) "解决菜单乱码 source $VIMRUNTIME/delmenu.vim source $VIMRUNTIME/menu.vim
"解决consle输出乱码 language messages zh_CN.utf-8 endif
" ----------------------------------------------------------------------------- " < 编写文件时的配置 > " ----------------------------------------------------------------------------- filetype on "启用文件类型侦测 filetype plugin on "针对不同的文件类型加载对应的插件 filetype plugin indent on "启用缩进 set smartindent "启用智能对齐方式 set expandtab "将Tab键转换为空格 set tabstop=4 "设置Tab键的宽度,可以更改,如:宽度为2 set shiftwidth=4 "换行时自动缩进宽度,可更改(宽度同tabstop) set smarttab "指定按一次backspace就删除shiftwidth宽度 " set foldenable "启用折叠 " set foldmethod=indent "indent 折叠方式 " set foldmethod=marker "marker 折叠方式
" 常规模式下用空格键来开关光标行所在折叠(注:zR 展开所有折叠,zM 关闭所有折叠) nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>
" 当文件在外部被修改,自动更新该文件 set autoread
" 常规模式下输入 cS 清除行尾空格 nmap cS :%s/\s\+$//g<CR>:noh<CR>
" 常规模式下输入 cM 清除行尾 ^M 符号 nmap cM :%s/\r$//g<CR>:noh<CR>
set ignorecase "搜索模式里忽略大小写 " set smartcase "如果搜索模式包含大写字符,不使用 'ignorecase' 选项,只有在输入搜索模式并且打开 'ignorecase' 选项时才会使用 " set noincsearch "在输入要搜索的文字时,取消实时匹配
" Ctrl + K 插入模式下光标向上移动 imap <c-k> <Up>
" Ctrl + J 插入模式下光标向下移动 imap <c-j> <Down>
" Ctrl + H 插入模式下光标向左移动 imap <c-h> <Left>
" Ctrl + L 插入模式下光标向右移动 imap <c-l> <Right>
" 启用每行超过80列的字符提示(字体变蓝并加下划线),不启用就注释掉 " au BufWinEnter * let w:m2=matchadd('Underlined', '\%>' . 80 . 'v.\+', -1)
" ----------------------------------------------------------------------------- " < 界面配置 > " ----------------------------------------------------------------------------- set number "显示行号 set laststatus=2 "启用状态栏信息 set cmdheight=2 "设置命令行的高度为2,默认为1 set cursorline "突出显示当前行 " set guifont=YaHei_Consolas_Hybrid:h10 "设置字体:字号(字体名称空格用下划线代替) set guifont=courier_new:h9 "设置字体:字号(字体名称空格用下划线代替) " set nowrap "设置不自动换行 set shortmess=atI "去掉欢迎界面
" 设置 gVim 窗口初始位置及大小 if g:isGUI set guifont=courier_new:h16 "设置字体:字号(字体名称空格用下划线代替) " au GUIEnter * simalt ~x "窗口启动时自动最大化 winpos 100 10 "指定窗口出现的位置,坐标原点在屏幕左上角 set lines=50 columns=180 "指定窗口大小,lines为高度,columns为宽度 endif
" 设置代码配色方案 if g:isGUI colorscheme molokai "Gvim配色方案 else colorscheme molokai "终端配色方案 endif
" 显示/隐藏菜单栏、工具栏、滚动条,可用 Ctrl + F11 切换 if g:isGUI set guioptions-=m set guioptions-=T set guioptions-=r set guioptions-=L nmap <silent> <c-F11> :if &guioptions =~ \set guioptions-=m <Bar> \set guioptions-=T <Bar> \set guioptions-=r <Bar> \set guioptions-=L <Bar> \else <Bar> \set guioptions+=m <Bar> \set guioptions+=T <Bar> \set guioptions+=r <Bar> \set guioptions+=L <Bar> \endif<CR> endif
" ----------------------------------------------------------------------------- " < 编译、连接、运行配置 (目前只配置了C、C++、Java语言)> " ----------------------------------------------------------------------------- " F9 一键保存、编译、连接存并运行 nmap <F9> :call Run()<CR> imap <F9> <ESC>:call Run()<CR>
" Ctrl + F9 一键保存并编译 nmap <c-F9> :call Compile()<CR> imap <c-F9> <ESC>:call Compile()<CR>
" Ctrl + F10 一键保存并连接 nmap <c-F10> :call Link()<CR> imap <c-F10> <ESC>:call Link()<CR>
let s:LastShellReturn_C = 0 let s:LastShellReturn_L = 0 let s:ShowWarning = 1 let s:Obj_Extension = '.o' let s:Exe_Extension = '.exe' let s:Class_Extension = '.class' let s:Sou_Error = 0
let s:windows_CFlags = 'gcc\ -fexec-charset=gbk\ -Wall\ -g\ -O0\ -c\ %\ -o\ %<.o' let s:linux_CFlags = 'gcc\ -Wall\ -g\ -O0\ -c\ %\ -o\ %<.o'
let s:windows_CPPFlags = 'g++\ -fexec-charset=gbk\ -Wall\ -g\ -O0\ -c\ %\ -o\ %<.o' let s:linux_CPPFlags = 'g++\ -Wall\ -g\ -O0\ -c\ %\ -o\ %<.o'
let s:JavaFlags = 'javac\ %'
func! Compile() exe ":ccl" exe ":update" let s:Sou_Error = 0 let s:LastShellReturn_C = 0 let Sou = expand("%:p") let v:statusmsg = '' if expand("%:e") == "c" || expand("%:e") == "cpp" || expand("%:e") == "cxx" let Obj = expand("%:p:r").s:Obj_Extension let Obj_Name = expand("%:p:t:r").s:Obj_Extension if !filereadable(Obj) || (filereadable(Obj) && (getftime(Obj) < getftime(Sou))) redraw! if expand("%:e") == "c" if g:iswindows exe ":setlocal makeprg=".s:windows_CFlags else exe ":setlocal makeprg=".s:linux_CFlags endif echohl WarningMsg | echo " compiling..." silent make elseif expand("%:e") == "cpp" || expand("%:e") == "cxx" if g:iswindows exe ":setlocal makeprg=".s:windows_CPPFlags else exe ":setlocal makeprg=".s:linux_CPPFlags endif echohl WarningMsg | echo " compiling..." silent make endif redraw! if v:shell_error != 0 let s:LastShellReturn_C = v:shell_error endif if g:iswindows if s:LastShellReturn_C != 0 exe ":bo cope" echohl WarningMsg | echo " compilation failed" else if s:ShowWarning exe ":bo cw" endif echohl WarningMsg | echo " compilation successful" endif else if empty(v:statusmsg) echohl WarningMsg | echo " compilation successful" else exe ":bo cope" endif endif else echohl WarningMsg | echo ""Obj_Name"is up to date" endif elseif expand("%:e") == "java" let class = expand("%:p:r").s:Class_Extension let class_Name = expand("%:p:t:r").s:Class_Extension if !filereadable(class) || (filereadable(class) && (getftime(class) < getftime(Sou))) redraw! exe ":setlocal makeprg=".s:JavaFlags echohl WarningMsg | echo " compiling..." silent make redraw! if v:shell_error != 0 let s:LastShellReturn_C = v:shell_error endif if g:iswindows if s:LastShellReturn_C != 0 exe ":bo cope" echohl WarningMsg | echo " compilation failed" else if s:ShowWarning exe ":bo cw" endif echohl WarningMsg | echo " compilation successful" endif else if empty(v:statusmsg) echohl WarningMsg | echo " compilation successful" else exe ":bo cope" endif endif else echohl WarningMsg | echo ""class_Name"is up to date" endif else let s:Sou_Error = 1 echohl WarningMsg | echo " please choose the correct source file" endif exe ":setlocal makeprg=make" endfunc
func! Link() call Compile() if s:Sou_Error || s:LastShellReturn_C != 0 return endif if expand("%:e") == "c" || expand("%:e") == "cpp" || expand("%:e") == "cxx" let s:LastShellReturn_L = 0 let Sou = expand("%:p") let Obj = expand("%:p:r").s:Obj_Extension if g:iswindows let Exe = expand("%:p:r").s:Exe_Extension let Exe_Name = expand("%:p:t:r").s:Exe_Extension else let Exe = expand("%:p:r") let Exe_Name = expand("%:p:t:r") endif let v:statusmsg = '' if filereadable(Obj) && (getftime(Obj) >= getftime(Sou)) redraw! if !executable(Exe) || (executable(Exe) && getftime(Exe) < getftime(Obj)) if expand("%:e") == "c" setlocal makeprg=gcc\ -o\ %<\ %<.o echohl WarningMsg | echo " linking..." silent make elseif expand("%:e") == "cpp" || expand("%:e") == "cxx" setlocal makeprg=g++\ -o\ %<\ %<.o echohl WarningMsg | echo " linking..." silent make endif redraw! if v:shell_error != 0 let s:LastShellReturn_L = v:shell_error endif if g:iswindows if s:LastShellReturn_L != 0 exe ":bo cope" echohl WarningMsg | echo " linking failed" else if s:ShowWarning exe ":bo cw" endif echohl WarningMsg | echo " linking successful" endif else if empty(v:statusmsg) echohl WarningMsg | echo " linking successful" else exe ":bo cope" endif endif else echohl WarningMsg | echo ""Exe_Name"is up to date" endif endif setlocal makeprg=make elseif expand("%:e") == "java" return endif endfunc
func! Run() let s:ShowWarning = 0 call Link() let s:ShowWarning = 1 if s:Sou_Error || s:LastShellReturn_C != 0 || s:LastShellReturn_L != 0 return endif let Sou = expand("%:p") if expand("%:e") == "c" || expand("%:e") == "cpp" || expand("%:e") == "cxx" let Obj = expand("%:p:r").s:Obj_Extension if g:iswindows let Exe = expand("%:p:r").s:Exe_Extension else let Exe = expand("%:p:r") endif if executable(Exe) && getftime(Exe) >= getftime(Obj) && getftime(Obj) >= getftime(Sou) redraw! echohl WarningMsg | echo " running..." if g:iswindows exe ":!%<.exe" else if g:isGUI exe ":!gnome-terminal -x bash -c './%<; echo; echo 请按 Enter 键继续; read'" else exe ":!clear; ./%<" endif endif redraw! echohl WarningMsg | echo " running finish" endif elseif expand("%:e") == "java" let class = expand("%:p:r").s:Class_Extension if getftime(class) >= getftime(Sou) redraw! echohl WarningMsg | echo " running..." if g:iswindows exe ":!java %<" else if g:isGUI exe ":!gnome-terminal -x bash -c 'java %<; echo; echo 请按 Enter 键继续; read'" else exe ":!clear; java %<" endif endif redraw! echohl WarningMsg | echo " running finish" endif endif endfunc
" ----------------------------------------------------------------------------- " < 其它配置 > " ----------------------------------------------------------------------------- set writebackup "保存文件前建立备份,保存成功后删除该备份 set nobackup "设置无备份文件 " set noswapfile "设置无临时文件 " set vb t_vb= "关闭提示音
" ============================================================================= " << 以下为常用插件配置 >> " =============================================================================
" ----------------------------------------------------------------------------- " < a.vim 插件配置 > " ----------------------------------------------------------------------------- " 用于切换C/C++头文件 " :A ---切换头文件并独占整个窗口 " :AV ---切换头文件并垂直分割窗口 " :AS ---切换头文件并水平分割窗口
" ----------------------------------------------------------------------------- " < BufExplorer 插件配置 > " ----------------------------------------------------------------------------- " 快速轻松的在缓存中切换(相当于另一种多个文件间的切换方式) " <Leader>be 在当前窗口显示缓存列表并打开选定文件 " <Leader>bs 水平分割窗口显示缓存列表,并在缓存列表窗口中打开选定文件 " <Leader>bv 垂直分割窗口显示缓存列表,并在缓存列表窗口中打开选定文件
" ----------------------------------------------------------------------------- " < ccvext.vim 插件配置 > " ----------------------------------------------------------------------------- " 用于对指定文件自动生成tags与cscope文件并连接 " 如果是Windows系统, 则生成的文件在源文件所在盘符根目录的.symbs目录下(如: X:\.symbs\) " 如果是Linux系统, 则生成的文件在~/.symbs/目录下 " 具体用法可参考www.vim.org中此插件的说明 " <Leader>sy 自动生成tags与cscope文件并连接 " <Leader>sc 连接已存在的tags与cscope文件
" ----------------------------------------------------------------------------- " < cSyntaxAfter 插件配置 > " ----------------------------------------------------------------------------- " 高亮括号与运算符等 " au! BufRead,BufNewFile,BufEnter *.{c,cpp,h,java,javascript} call CSyntaxAfter()
" ----------------------------------------------------------------------------- " < indentLine 插件配置 > " ----------------------------------------------------------------------------- " 用于显示对齐线,与 indent_guides 在显示方式上不同,根据自己喜好选择了 " 在终端上会有屏幕刷新的问题,这个问题能解决有更好了 " 开启/关闭对齐线 nmap <leader>il :IndentLinesToggle<CR>
" 设置Gvim的对齐线样式 if g:isGUI let g:indentLine_char = "┊" let g:indentLine_first_char = "┊" endif
" 设置终端对齐线颜色,如果不喜欢可以将其注释掉采用默认颜色 let g:indentLine_color_term = 239
" 设置 GUI 对齐线颜色,如果不喜欢可以将其注释掉采用默认颜色 " let g:indentLine_color_gui = '#A4E57E'
" " ----------------------------------------------------------------------------- " " < MiniBufExplorer 插件配置 > " " ----------------------------------------------------------------------------- " " 快速浏览和操作Buffer " " 主要用于同时打开多个文件并相与切换
" " let g:miniBufExplMapWindowNavArrows = 1 "用Ctrl加方向键切换到上下左右的窗口中去 " let g:miniBufExplMapWindowNavVim = 1 "用<C-k,j,h,l>切换到上下左右的窗口中去 " let g:miniBufExplMapCTabSwitchBufs = 1 "功能增强(不过好像只有在Windows中才有用) " " <C-Tab> 向前循环切换到每个buffer上,并在但前窗口打开 " " <C-S-Tab> 向后循环切换到每个buffer上,并在当前窗口打开
" 在不使用 MiniBufExplorer 插件时也可用<C-k,j,h,l>切换到上下左右的窗口中去 noremap <c-k> <c-w>k noremap <c-j> <c-w>j noremap <c-h> <c-w>h noremap <c-l> <c-w>l
" ----------------------------------------------------------------------------- " < neocomplcache 插件配置 > " ----------------------------------------------------------------------------- " 关键字补全、文件路径补全、tag补全等等,各种,非常好用,速度超快。 let g:neocomplcache_enable_at_startup = 1 "vim 启动时启用插件 " let g:neocomplcache_disable_auto_complete = 1 "不自动弹出补全列表 " 在弹出补全列表后用 <c-p> 或 <c-n> 进行上下选择效果比较好
" ----------------------------------------------------------------------------- " < nerdcommenter 插件配置 > " ----------------------------------------------------------------------------- " 我主要用于C/C++代码注释(其它的也行) " 以下为插件默认快捷键,其中的说明是以C/C++为例的,其它语言类似 " <Leader>ci 以每行一个 /* */ 注释选中行(选中区域所在行),再输入则取消注释 " <Leader>cm 以一个 /* */ 注释选中行(选中区域所在行),再输入则称重复注释 " <Leader>cc 以每行一个 /* */ 注释选中行或区域,再输入则称重复注释 " <Leader>cu 取消选中区域(行)的注释,选中区域(行)内至少有一个 /* */ " <Leader>ca 在/*...*/与//这两种注释方式中切换(其它语言可能不一样了) " <Leader>cA 行尾注释 let NERDSpaceDelims = 1 "在左注释符之后,右注释符之前留有空格
" ----------------------------------------------------------------------------- " < nerdtree 插件配置 > " ----------------------------------------------------------------------------- " 有目录村结构的文件浏览插件
" 常规模式下输入 F2 调用插件 nmap <F2> :NERDTreeToggle<CR>
" ----------------------------------------------------------------------------- " < omnicppcomplete 插件配置 > " ----------------------------------------------------------------------------- " 用于C/C++代码补全,这种补全主要针对命名空间、类、结构、共同体等进行补全,详细 " 说明可以参考帮助或网络教程等 " 使用前先执行如下 ctags 命令(本配置中可以直接使用 ccvext 插件来执行以下命令) " ctags -R --c++-kinds=+p --fields=+iaS --extra=+q " 我使用上面的参数生成标签后,对函数使用跳转时会出现多个选择 " 所以我就将--c++-kinds=+p参数给去掉了,如果大侠有什么其它解决方法希望不要保留呀 set completeopt=menu "关闭预览窗口
" 函数名全局搜索 F3 nmap <F3> <ESC>:CtrlSF <c-r><c-w><CR> nmap <C-F3> <ESC>:CtrlSFOpen<CR>
" ----------------------------------------------------------------------------- " < SrcExpl 插件配置 > " ----------------------------------------------------------------------------- " 增强源代码浏览,其功能就像Windows中的"Source Insight" nmap <F4> :SrcExplToggle<CR> "打开/闭浏览窗口 " // Set the height of Source Explorer window let g:SrcExpl_winHeight = 8
" // Set 100 ms for refreshing the Source Explorer let g:SrcExpl_refreshTime = 100 " // In order to Avoid conflicts, the Source Explorer should know what plugins " // are using buffers. And you need add their bufname into the list below " // according to the command ":buffers!" let g:SrcExpl_pluginList = [ \ "__Tag_List__", \ "_NERD_tree_", \ "Source_Explorer" \ ] " // Do not let the Source Explorer update the tags file when opening " let g:SrcExpl_isUpdateTags = 0 " // Enable/Disable the local definition searching, and note that this is not " " // guaranteed to work, the Source Explorer doesn't check the syntax for now. " " // It only searches for a match with the keyword according to command 'gd' " let g:SrcExpl_searchLocalDef = 1
" 启用 // 注视风格 let c_cpp_comments = 0
" ----------------------------------------------------------------------------- " < Tagbar 插件配置 > " ----------------------------------------------------------------------------- " 相对 TagList 能更好的支持面向对象
" 常规模式下输入 tb 调用插件,如果有打开 TagList 窗口则先将其关闭 nmap tb :TlistClose<CR>:TagbarToggle<CR>
let g:tagbar_width=30 "设置窗口宽度 " let g:tagbar_left=1 "在左侧窗口中显示
" ----------------------------------------------------------------------------- " < TagList 插件配置 > " ----------------------------------------------------------------------------- " 高效地浏览源码, 其功能就像vc中的workpace " 那里面列出了当前文件中的所有宏,全局变量, 函数名等
" 常规模式下输入 tl 调用插件,如果有打开 Tagbar 窗口则先将其关闭 nmap tl :TagbarClose<CR>:Tlist<CR>
let Tlist_Show_One_File=1 "只显示当前文件的tags " let Tlist_Enable_Fold_Column=0 "使taglist插件不显示左边的折叠行 let Tlist_Exit_OnlyWindow=1 "如果Taglist窗口是最后一个窗口则退出Vim let Tlist_File_Fold_Auto_Close=1 "自动折叠 let Tlist_WinWidth=30 "设置窗口宽度 let Tlist_Use_Right_Window=1 "在右侧窗口中显示
" ----------------------------------------------------------------------------- " < txtbrowser 插件配置 > " ----------------------------------------------------------------------------- " 用于文本文件生成标签与与语法高亮(调用TagList插件生成标签,如果可以) au BufRead,BufNewFile *.txt setlocal ft=txt
" \ r 快速执行GO " au FileType go nmap <leader>r <Plug>(go-run) " ----------------------------------------------------------------------------- " <rjohnsondev/vim-compiler-go> " 语法检查 Go 路径 " ----------------------------------------------------------------------------- autocmd FileType go compiler golang let g:golang_goroot = "/usr/local/go"
" compile coffee on write let coffee_compile_vert = 1 au BufWritePost *.coffee silent execute 'CoffeeMake! -o'.expand('<afile>:p:h').'./' " auto compile on save
" ============================================================================= " << 以下为常用工具配置 >> " =============================================================================
" ----------------------------------------------------------------------------- " < cscope 工具配置 > " ----------------------------------------------------------------------------- " 用Cscope自己的话说 - "你可以把它当做是超过频的ctags" if has("cscope") "设定可以使用 quickfix 窗口来查看 cscope 结果 set cscopequickfix=s-,c-,d-,i-,t-,e- "使支持用 Ctrl+] 和 Ctrl+t 快捷键在代码间跳转 set cscopetag "如果你想反向搜索顺序设置为1 set csto=0 "在当前目录中添加任何数据库 if filereadable("cscope.out") cs add cscope.out "否则添加数据库环境中所指出的 elseif $CSCOPE_DB != "" cs add $CSCOPE_DB endif set cscopeverbose "快捷键设置 nmap <C-\>s :cs find s <C-R>=expand("<cword>")<CR><CR> nmap <C-\>g :cs find g <C-R>=expand("<cword>")<CR><CR> nmap <C-\>c :cs find c <C-R>=expand("<cword>")<CR><CR> nmap <C-\>t :cs find t <C-R>=expand("<cword>")<CR><CR> nmap <C-\>e :cs find e <C-R>=expand("<cword>")<CR><CR> nmap <C-\>f :cs find f <C-R>=expand("<cfile>")<CR><CR> nmap <C-\>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR> nmap <C-\>d :cs find d <C-R>=expand("<cword>")<CR><CR> endif
" ----------------------------------------------------------------------------- " < ctags 工具配置 > " ----------------------------------------------------------------------------- " 对浏览代码非常的方便,可以在函数,变量之间跳转等 set tags=./tags; "向上级目录递归查找tags文件(好像只有在Windows下才有用)
" ----------------------------------------------------------------------------- " < gvimfullscreen 工具配置 > 请确保已安装了工具 " ----------------------------------------------------------------------------- " 用于 Windows Gvim 全屏窗口,可用 F11 切换 " 全屏后再隐藏菜单栏、工具栏、滚动条效果更好 if (g:iswindows && g:isGUI) nmap <F11> <Esc>:call libcallnr("gvimfullscreen.dll", "ToggleFullScreen", 0)<CR> endif
" ----------------------------------------------------------------------------- " < vimtweak 工具配置 > 请确保以已装了工具 " ----------------------------------------------------------------------------- " 这里只用于窗口透明与置顶 " 常规模式下 Ctrl + Up(上方向键) 增加不透明度,Ctrl + Down(下方向键) 减少不透明度,<Leader>t 窗口置顶与否切换 if (g:iswindows && g:isGUI) let g:Current_Alpha = 255 let g:Top_Most = 0 func! Alpha_add() let g:Current_Alpha = g:Current_Alpha + 10 if g:Current_Alpha > 255 let g:Current_Alpha = 255 endif call libcallnr("vimtweak.dll","SetAlpha",g:Current_Alpha) endfunc func! Alpha_sub() let g:Current_Alpha = g:Current_Alpha - 10 if g:Current_Alpha < 155 let g:Current_Alpha = 155 endif call libcallnr("vimtweak.dll","SetAlpha",g:Current_Alpha) endfunc func! Top_window() if g:Top_Most == 0 call libcallnr("vimtweak.dll","EnableTopMost",1) let g:Top_Most = 1 else call libcallnr("vimtweak.dll","EnableTopMost",0) let g:Top_Most = 0 endif endfunc
"快捷键设置 nmap <c-up> :call Alpha_add()<CR> nmap <c-down> :call Alpha_sub()<CR> nmap <leader>t :call Top_window()<CR> endif
" ============================================================================= " << 以下为常用自动命令配置 >> " =============================================================================
" 自动切换目录为当前编辑文件所在目录 au BufRead,BufNewFile,BufEnter * cd %:p:h
" ============================================================================= " << windows 下解决 Quickfix 乱码问题 >> " ============================================================================= " windows 默认编码为 cp936,而 Gvim(Vim) 内部编码为 utf-8,所以常常输出为乱码 " 以下代码可以将编码为 cp936 的输出信息转换为 utf-8 编码,以解决输出乱码问题 " 但好像只对输出信息全部为中文才有满意的效果,如果输出信息是中英混合的,那可能 " 不成功,会造成其中一种语言乱码,输出信息全部为英文的好像不会乱码 " 如果输出信息为乱码的可以试一下下面的代码,如果不行就还是给它注释掉
" if g:iswindows " function QfMakeConv() " let qflist = getqflist() " for i in qflist " let i.text = iconv(i.text, "cp936", "utf-8") " endfor " call setqflist(qflist) " endfunction " au QuickfixCmdPost make call QfMakeConv() " endif
" ============================================================================= " << 其它 >> " ============================================================================= " 注:上面配置中的"<Leader>"在本软件中设置为"\"键(引号里的反斜杠),如<Leader>t " 指在常规模式下按"\"键加"t"键,这里不是同时按,而是先按"\"键后按"t"键,间隔在一 " 秒内,而<Leader>cs是先按"\"键再按"c"又再按"s"键;如要修改"<leader>"键,可以把 " 下面的设置取消注释,并修改双引号中的键为你想要的,如修改为逗号键。
" let mapleader = ","
" " ============================================================================= " " << 五笔拼音输入法 >> " " 调用 C + S + 空格 " " ============================================================================= let g:ywvim_ims=[ \['wb', '五笔', 'wubi.ywvim'], \['py', '拼音', 'pinyin.ywvim'], \]
let g:ywvim_py = { 'helpim':'py', 'gb':0 }
let g:ywvim_zhpunc = 1 let g:ywvim_listmax = 5 let g:ywvim_esc_autoff = 0 let g:ywvim_autoinput = 0 let g:ywvim_circlecandidates = 1 let g:ywvim_helpim_on = 0 let g:ywvim_matchexact = 0 let g:ywvim_chinesecode = 1 let g:ywvim_gb = 0 let g:ywvim_preconv = 'g2b' let g:ywvim_conv = '' let g:ywvim_lockb = 1
|