├── .gitignore ├── .gitmodules ├── .vimrc ├── README.md ├── _vimrc ├── ctags.exe ├── fonts ├── LiHeiPro.ttf ├── YaHei Mono.ttf └── YaHei.Consolas.1.12.ttf ├── vim74 ├── gvim.exe ├── gvimext.dll ├── gvimfullscreen.dll └── lua52.dll └── x32 ├── ctags.exe ├── gvimext.dll ├── gvimfullscreen.dll └── iconv.dll /.gitignore: -------------------------------------------------------------------------------- 1 | *.swp 2 | _vim_mru_files 3 | vim74/* 4 | vimfiles/* 5 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "vimfiles/bundle/vundle"] 2 | path = vimfiles/bundle/vundle 3 | url = https://github.com/gmarik/vundle.git 4 | -------------------------------------------------------------------------------- /.vimrc: -------------------------------------------------------------------------------- 1 | " Author: Asins - asinsimple AT gmail DOT com 2 | " Get latest vimrc from http://nootn.com/ 3 | " Last Modified: 2016-03-09 14:06 (+0800) 4 | 5 | " 准备工作 {{{1 6 | " 判定语句及定义变量 7 | " 判定当前操作系统类型 {{{2 8 | if has("win32") || has("win95") || has("win64") || has("win16") 9 | let s:isWindows=1 10 | let $VIMFILES = $VIM."/vimfiles" 11 | else 12 | let s:isWindows=0 13 | let $VIMFILES = $HOME."/.vim" 14 | endif 15 | if (!s:isWindows 16 | \ && (has('mac') || has('macunix') || has('gui_macvim') || 17 | \ (!executable('xdg-open') && system('uname') =~? '^darwin'))) 18 | let s:isMac=1 19 | else 20 | let s:isMac=0 21 | endif 22 | " }}} 23 | " 判定当前是否图形界面 {{{2 24 | if has("gui_running") 25 | let s:isGUI=1 26 | else 27 | let s:isGUI=0 28 | endif 29 | " }}} 30 | " 判定当前终端是否256色 {{{2 31 | if (s:isWindows==0 && s:isGUI==0 && 32 | \ (&term =~ "256color" || &term =~ "xterm" || &term =~ "fbterm")) 33 | let s:isColor=1 34 | else 35 | let s:isColor=0 36 | endif 37 | " }}} 38 | " 判定当前是否有 CTags {{{2 39 | if executable('ctags') 40 | let s:hasCTags=1 41 | else 42 | let s:hasCTags=0 43 | endif 44 | " }}} 45 | " 判定当前是否有 Ag {{{2 46 | if executable('ag') 47 | let s:hasAg=1 48 | else 49 | let s:hasAg=0 50 | endif 51 | " }}} 52 | " 设置自动命令组 53 | " 特定文件类型自动命令组 {{{2 54 | augroup Filetype_Specific 55 | autocmd! 56 | augroup END 57 | " }}} 58 | " 默认自动命令组 {{{2 59 | augroup MyAutoCmd 60 | autocmd! 61 | augroup END 62 | " }}} 63 | " 设置 字符 {{{2 64 | let mapleader="," 65 | let maplocalleader="," 66 | " }}} 67 | " 设置缓存目录 {{{2 68 | " (以下取自 https://github.com/bling/dotvim ) 69 | let s:cache_dir = $VIMFILES."/.cache" 70 | " }}} 71 | " }}} 72 | 73 | " 定义函数 {{{1 74 | " (以下取自 https://github.com/bling/dotvim ) 75 | " 获取缓存目录 {{{2 76 | function! s:get_cache_dir(suffix) 77 | return resolve(expand(s:cache_dir . "/" . a:suffix)) 78 | endfunction 79 | " }}} 80 | " 保证该目录存在,若不存在则新建目录 {{{2 81 | function! EnsureExists(path) 82 | if !isdirectory(expand(a:path)) 83 | call mkdir(expand(a:path)) 84 | endif 85 | endfunction 86 | " }}} 87 | " (以下取自 https://github.com/lilydjwg/dotvim ) 88 | " 取得光标处的匹配 {{{2 89 | function! GetPatternAtCursor(pat) 90 | let col = col('.') - 1 91 | let line = getline('.') 92 | let ebeg = -1 93 | let cont = match(line, a:pat, 0) 94 | while (ebeg >= 0 || (0 <= cont) && (cont <= col)) 95 | let contn = matchend(line, a:pat, cont) 96 | if (cont <= col) && (col < contn) 97 | let ebeg = match(line, a:pat, cont) 98 | let elen = contn - ebeg 99 | break 100 | else 101 | let cont = match(line, a:pat, contn) 102 | endif 103 | endwhile 104 | if ebeg >= 0 105 | return strpart(line, ebeg, elen) 106 | else 107 | return "" 108 | endif 109 | endfunction 110 | " }}} 111 | " 用浏览器打开链接 {{{2 112 | function! OpenURL() 113 | let s:url = GetPatternAtCursor('\v%(https?|ftp)://[^]''" \t\r\n>*。,\`)]*') 114 | if s:url == "" 115 | echohl WarningMsg 116 | echomsg '在光标处未发现URL!' 117 | echohl None 118 | else 119 | echo '打开URL:' . s:url 120 | if s:isWindows 121 | " start 不是程序,所以无效。并且,cmd 只能使用双引号 122 | " call system("cmd /q /c start \"" . s:url . "\"") 123 | " call system("D:\\Programs\\Google Chrome\\bin\\chrome.exe \"" . s:url . "\"") 124 | elseif s:isMac 125 | call system("open -a \"/Applications/Google Chrome.app\" '" . s:url . "'") 126 | else 127 | call system("setsid firefox '" . s:url . "' &") 128 | endif 129 | endif 130 | unlet s:url 131 | endfunction 132 | " }}} 133 | " (以下取自 https://github.com/Shougo/shougo-s-github ) 134 | " 切换选项开关 {{{2 135 | function! ToggleOption(option_name) 136 | execute 'setlocal' a:option_name.'!' 137 | execute 'setlocal' a:option_name.'?' 138 | endfunction 139 | " }}} 140 | " (以下取自 https://github.com/terryma/dotfiles ) 141 | " 调整 Quickfix 窗口高度 {{{2 142 | function! AdjustWindowHeight(minheight, maxheight) 143 | execute max([min([line("$"), a:maxheight]), a:minheight]) . "wincmd _" 144 | endfunction 145 | " }}} 146 | " (以下为自己原创修改或不记得出处的 ) 147 | " 删除文件末尾空格 {{{2 148 | function! StripTrailingWhitespace() 149 | " Preparation: save last search, and cursor position. 150 | let _s=@/ 151 | let l = line(".") 152 | let c = col(".") 153 | " do the business: 154 | %s/ 155 | $\|\s\+$//e 156 | " clean up: restore previous search history, and cursor position 157 | let @/=_s 158 | call cursor(l, c) 159 | endfunction 160 | " }}} 161 | " 回车时前字符为{时自动换行补全 {{{2 162 | function! OpenSpecial(ochar, cchar) 163 | let line = getline('.') 164 | let col = col('.') - 2 165 | if(line[col] != a:ochar) 166 | if(col > 0) 167 | return "\a\" 168 | else 169 | return "\" 170 | endif 171 | endif 172 | if(line[col+1] != a:cchar) 173 | call setline('.',line[:(col)].a:cchar.line[(col+1):]) 174 | else 175 | call setline('.',line[:(col)].line[(col+1):]) 176 | endif 177 | return "\a\;\".a:cchar."\\"_xk$\"_xa" 178 | endfunction 179 | " }}} 180 | " 更新最后修改时间 {{{2 181 | function! UpdateLastMod() 182 | " preparation: save last search, and cursor position. 183 | let _s=@/ 184 | let l = line(".") 185 | let c = col(".") 186 | 187 | let n = min([10, line('$')]) " 检查头部多少行 188 | let timestamp = strftime('%Y-%m-%d %H:%M (%z)') " 时间格式 189 | let timestamp = substitute(timestamp, '%', '\%', 'g') 190 | let pat = substitute('Last Modified:\s*\zs.*\ze', '%', '\%', 'g') 191 | keepjumps silent execute '1,'.n.'s%^.*'.pat.'.*$%'.timestamp.'%e' 192 | 193 | " clean up: restore previous search history, and cursor position 194 | let @/=_s 195 | call cursor(l, c) 196 | endfunction 197 | " }}} 198 | " }}} 199 | 200 | " Plug.vim 插件管理器 {{{1 201 | " 加载Plug及插件 开始 未则自行下载 {{{2 202 | " Plug参数说明 {{{3 203 | " | Option | Description | 204 | " | ----------------------- | ------------------------------------ | 205 | " | `branch`/`tag`/`commit` | 存储库使用的 branch/tag/commit | 206 | " | `rtp` | 子目录包含的Vim插件 | 207 | " | `dir` | 自定义该插件目录 | 208 | " | `as` | 插件重命令 | 209 | " | `do` | 更新后的挂钩(字符串或函数引用) | 210 | " | `on` | 按需加载:命令或 ``-mappings | 211 | " | `for` | 按需加载:文件类型 | 212 | " | `frozen` | 除非显式指定,否则不更新 | 213 | " }}} 214 | if empty(glob("~/.vim/autoload/plug.vim")) 215 | " Ensure all needed directories exist (Thanks @kapadiamush) 216 | execute 'mkdir -p ~/.vim/plugged' 217 | execute 'mkdir -p ~/.vim/autoload' 218 | " Download the actual plugin manager 219 | execute '!curl -fLo ~/.vim/autoload/plug.vim https://raw.github.com/junegunn/vim-plug/master/plug.vim' 220 | endif 221 | call plug#begin('~/.vim/plugged') 222 | " }}} 223 | " 核心插件 {{{2 224 | " 全局文内搜索 225 | if s:hasAg 226 | Plug 'rking/ag.vim' 227 | " :Ag [options] pattern [directory] 228 | " :Ag FooBar foo/**/*.py 等同于 :Ag -G foo/.*/[^/]*\.py$ FooBar 229 | endif 230 | " vim-airline 是更轻巧的 vim-powerline 代替品 231 | Plug 'bling/vim-airline' 232 | " MatchIt 对%命令进行扩展使得能在嵌套标签和语句之间跳转 % g% [% ]% 使用说明 {{{3 233 | " 映射 描述 234 | " % 正向匹配 235 | " g% 反向匹配 236 | " [% 定位块首 237 | " ]% 定位块尾 238 | " }}} 239 | Plug 'matchit.zip', { 'for': ['html', 'xml'] } 240 | " Repeat -- 支持普通模式使用"."来重复执行一些插件的命令 241 | Plug 'tpope/vim-repeat' 242 | if s:hasCTags 243 | " 提供单个源代码文件的函数列表之类的功能,强于 Taglist 244 | Plug 'majutsushi/tagbar' 245 | endif 246 | " 树形的文件系统浏览器(替代 Netrw),功能比 Vim 自带的 Netrw 强大 247 | Plug 'scrooloose/nerdtree' 248 | " NERDTree的Git显示支持 249 | Plug 'Xuyuanp/nerdtree-git-plugin' 250 | " 模糊文件查找 251 | Plug 'ctrlpvim/ctrlp.vim' 252 | " ctrlp的文件内函数查找 253 | Plug 'tacahiroy/ctrlp-funky' 254 | " 在 Visual 模式下使用 */# 跳转 255 | Plug 'thinca/vim-visualstar' 256 | " }}} 257 | " 系统支持 {{{2 258 | " 文件重命令 使用说明 {{{3 259 | " :Renamer 将当前文件所在文件夹下的内容显示在一个新窗口 260 | " :Ren 开始重命名 261 | " }}} 262 | Plug 'asins/renamer.vim' 263 | " 自动创建目录 264 | Plug 'auto_mkdir' 265 | " 以root权限打开文件 使用说明 {{{3 266 | " :SudoRead[!] [file] 267 | " :[range]SudoWrite[!] [file] 268 | " }}} 269 | if !s:isWindows 270 | Plug 'chrisbra/SudoEdit.vim' 271 | endif 272 | " 在终端下自动开启关闭 paste 选项 273 | Plug 'ConradIrwin/vim-bracketed-paste' 274 | " }}} 275 | " 文本编辑 {{{2 276 | " 快速打开子文件 277 | Plug 'asins/OpenRequireFile.vim' 278 | " HTML代码快速生成 使用说明 {{{3 279 | " 常用命令可看:http://nootn.com/blog/Tool/23/ 280 | " m 合并多行 281 | " }}} 282 | Plug 'mattn/emmet-vim', { 'for': [ 'css', 'html', 'less', 'sass', 'scss', 'xml', 'xsd', 'xsl', 'xslt', 'mustache' ] } 283 | " 高亮显示光标处配对的HTML标签 284 | Plug 'MatchTag', { 'for': [ 'html', 'xml' ] } 285 | " 比较指定文本块 使用说明 {{{3 286 | " :Linediff 设置对比块,两次后会开启vimDiff模式 287 | " :LinediffReset 清除Diff标记 288 | " }}} 289 | Plug 'AndrewRadev/linediff.vim' , { 'on': [ 'Linediff', 'LinediffReset' ] } 290 | " 专注编辑选定区域 使用说明 {{{3 291 | " nr - 将当前选中内容在一个缩小的窗口中打开 292 | " }}} 293 | Plug 'chrisbra/NrrwRgn' 294 | " 给各种 tags 标记不同的颜色,便于观看调试的插件 使用说明 {{{3 test 295 | " (以下取自 http://easwy.com/blog/archives/advanced-vim-skills-syntax-on-colorscheme/ ) 296 | " 当我输入“,hl”时,就会把光标下的单词高亮,在此单词上按“,hh”会清除该单词的高亮。 297 | " 如果在高亮单词外输入“,hh”,会清除所有的高亮。 298 | " 你也可以使用virsual模式选中一段文本,然后按“,hl”,会高亮你所选中的文本;或者 299 | " 你可以用“,hr”来输入一个正则表达式,这会高亮所有符合这个正则表达式的文本。 300 | " 301 | " 你可以在高亮文本上使用“,#”或“,*”来上下搜索高亮文本。在使用了“,#”或“,*”后,就 302 | " 可以直接输入“#”或“*”来继续查找该高亮文本,直到你又用“#”或“*”查找了其它文本。 303 | " * 当前MarkWord的下一个 # 当前MarkWord的上一个 304 | " / 所有MarkWords的下一个 ? 所有MarkWords的上一个 305 | " 306 | " 如果你在启动vim后重新执行了colorscheme命令,或者载入了会话文件,那么mark插件 307 | " 的颜色就会被清掉,解决的办法是重新source一下mark插件。或者像我一样,把mark插 308 | " 件定义的highlight组加入到你自己的colorscheme文件中。 309 | " }}} 310 | Plug 'dimasg/vim-mark' 311 | " 文本对齐 tabular 比 Align 更简单 312 | Plug 'godlygeek/tabular' , { 'on': [ 'Tabularize', 'AddTabularPipeline' ] } 313 | " 中文排版自动规范化 314 | Plug 'hotoo/pangu.vim', { 'on': [ 'Pangu', 'PanguEnable', 'PanguDisable' ], 'for': [ 'markdown', 'text' ] } 315 | " Node功能 316 | Plug 'moll/vim-node', { 'for': [ 'javascript' ] } 317 | 318 | " 移动命令增强 使用说明 {{{3 319 | " s 进入搜索状态(最多输入2个字符) 搜索ea 320 | " ; 向下搜索 , 向上搜索 321 | " 跳到搜索起始位置 322 | " }}} 323 | Plug 'justinmk/vim-sneak' 324 | " 连续按 j/k 时加速移动光标 325 | Plug 'rhysd/accelerated-jk' 326 | " 光标选择功能 327 | Plug 'terryma/vim-multiple-cursors' 328 | " 代码注释 使用说明 {{{3 329 | " ca 在可选的注释方式之间切换,比如C/C++ 的块注释/* */和行注释// 330 | " cc 注释当前行 331 | " cs 以”性感”的方式注释 332 | " cA 在当前行尾添加注释符,并进入Insert模式 333 | " cu 取消注释 334 | " cm 添加块注释 335 | " }}} 336 | Plug 'scrooloose/nerdcommenter' 337 | " 据说tcomment_vim 比 nerdcommenter 更智能 338 | " Surround -- 快速添加、替换、清除包围符号、标签 339 | " Plug 'tpope/vim-surround' 340 | " Plug 'tomtom/tcomment_vim' 341 | " 显示尾部多余空格 342 | " Plug 'ShowTrailingWhitespace' 343 | " VisIncr -- 给vim增加生成递增或者递减数列的功能,支持十进制 十六进制 日期 星期等功能强大灵活 344 | " Plug 'VisIncr' 345 | " }}} 346 | " 格式化 & 美化 {{{2 347 | " 打散合并单行语句 使用说明 {{{3 348 | " gS 分隔一个单行代码为多行 349 | " gJ (光标在区块的第一行) 将区块合并为单行 350 | " }}} 351 | Plug 'AndrewRadev/splitjoin.vim' , { 'on': [ 'SplitjoinJoin', 'SplitjoinSplit' ] } 352 | " html/css/js 代码格式化 需要NodeJs的支持 353 | if executable('node') || executable('nodejs') 354 | Plug 'maksimr/vim-jsbeautify', { 'for': [ 'css', 'html', 'javascript', 'json', 'less', 'mustache' ] } 355 | endif 356 | " }}} 357 | " 缩进 & 着色 {{{2 358 | " 通用的缩进优化 359 | Plug 'IndentAnything' 360 | " vim-indent-guides -- 显示缩进线 361 | Plug 'nathanaelkane/vim-indent-guides' 362 | " 大大加强JS的语法及缩进支持 363 | Plug 'pangloss/vim-javascript', { 'for': [ 'javascript' ] } 364 | " Plug 'jiangmiao/simple-javascript-indenter', { 'for': [ 'javascript' ] } 365 | " CSS类语法 366 | Plug 'ap/vim-css-color', { 'for': [ 'css', 'scss', 'sass', 'less' ] } 367 | Plug 'othree/html5.vim', { 'for': ['html'] } 368 | Plug 'othree/html5-syntax.vim', { 'for': ['html'] } 369 | Plug 'othree/xml.vim', { 'for': ['html', 'xml'] } 370 | " HTML/XML闭合标签间通过 # % 跳转 371 | Plug 'tpope/vim-ragtag', { 'for': ['html', 'xml'] } 372 | " Nginx语法 373 | Plug 'evanmiller/nginx-vim-syntax', { 'for': [ 'nginx' ] } 374 | " Markdown 语法 375 | Plug 'tpope/vim-markdown', { 'for': [ 'markdown' ] } 376 | " }}} 377 | " 代码检查 & 代码提示 & 文档查询 {{{2 378 | " 自动完成 需要lua支持 379 | Plug 'Shougo/neocomplete.vim' 380 | " JavaScript的语义分析提示 需到目录中执行npm install 使用阿里中国仓库加快安装速度 381 | Plug 'marijnh/tern_for_vim', { 'for': 'javascript', 'do': 'npm install --registry=https://registry.npm.taobao.org'} 382 | " 包含很多语言的语法与编码风格检查插件 383 | Plug 'scrooloose/syntastic', { 'for': ['php', 'javascript', 'css', 'less', 'scss'] } 384 | " Vim 中文文档计划 385 | Plug 'asins/vimcdoc' 386 | " Vim的关键词字典 387 | Plug 'asins/vim-dict' 388 | " 直接启用Dash查询相关手册 Mac独有软件 使用说明 {{{3 389 | " :Dash printf 在所有手册中查找printf 390 | " :Dash! [word] 在所有手册中查找光标所在或指定的 391 | " :Dash setTimeout javascript 在JavaScript手册中查找setTimeout 392 | " }}} 393 | if s:isMac 394 | Plug 'rizzatti/dash.vim' 395 | endif 396 | " }}} 397 | " 主题及配色 {{{2 398 | Plug 'crusoexia/vim-monokai' 399 | " }}} 400 | " 加载Plug及插件 结束{{{2 401 | call plug#end() 402 | filetype plugin indent on 403 | " }}} 404 | " }}} 405 | 406 | " 自定义设置 {{{1 407 | set nocompatible " be iMproved 408 | " 以下设置在 Vim 全屏运行时 source vimrc 的时候不能再执行否则会退出全屏 409 | if !exists('g:VimrcIsLoad') 410 | " 设置语言编码 {{{2 411 | " 解决console输出乱码 412 | language messages zh_CN.UTF-8 413 | " set langmenu=zh_CN.UTF-8 414 | " 显示中文帮助 415 | set helplang=cn 416 | if s:isWindows && has("multi_byte") 417 | set termencoding=cp850 418 | else 419 | set termencoding=utf-8 420 | endif 421 | set fileencodings=utf-8,chinese,taiwan,ucs-2,ucs-2le,ucs-bom,latin1,gbk,gb18030,big5,utf-16le,cp1252,iso-8859-15 422 | set encoding=utf-8 423 | set fileencoding=utf-8 424 | " }}} 425 | " 设置图形界面选项 {{{2 426 | if s:isGUI 427 | set shortmess=atI " 启动的时候不显示那个援助乌干达儿童的提示 428 | " 禁止显示滚动条 429 | set guioptions-=r 430 | set guioptions-=R 431 | set guioptions-=L 432 | set guioptions-=L 433 | " 禁止显示菜单和工具条 434 | set guioptions-=T "工具栏 435 | set guioptions-=m "菜单 436 | if s:isWindows 437 | autocmd MyAutoCmd GUIEnter * simalt ~x " 在Windows下启动时最大化窗口 438 | if has('directx') 439 | set renderoptions=type:directx 440 | endif 441 | endif 442 | set guitablabel=%N\ \ %t\ %M "标签页上显示序号 443 | endif 444 | " }}} 445 | " 图形与终端 {{{2 446 | " 以下设置在 Vim 全屏运行时 source vimrc 的时候不能再执行否则会退出全屏 447 | " 字符之间插入的像素行数 448 | set linespace=0 449 | " 设置显示字体和大小 450 | set guifont=Monaco:h14 451 | " 设置配色方案 {{{3 452 | let colorscheme = 'monokai' 453 | " (以下取自 https://github.com/lilydjwg/dotvim ) 454 | if s:isGUI 455 | " 有些终端不能改变大小 456 | set columns=88 457 | set lines=32 458 | set cursorline 459 | " 原为double,为了更好地显示airline,改为single 460 | set ambiwidth=single 461 | exe 'colorscheme' colorscheme 462 | elseif has("unix") 463 | " 原为double,为了更好地显示airline,改为single 464 | set ambiwidth=single 465 | " 防止退出时终端乱码 466 | " 这里两者都需要。只前者标题会重复,只后者会乱码 467 | set t_fs=(B 468 | set t_IE=(B 469 | if s:isColor 470 | set cursorline "Current Line Adornment 471 | exe 'colorscheme' colorscheme 472 | set t_Co=256 473 | else 474 | " 在Linux文本终端下非插入模式显示块状光标 475 | if &term == "linux" || &term == "fbterm" 476 | set t_ve+=[?6c 477 | augroup MyAutoCmd 478 | autocmd InsertEnter * set t_ve-=[?6c 479 | autocmd InsertLeave * set t_ve+=[?6c 480 | " autocmd VimLeave * set t_ve-=[?6c 481 | augroup END 482 | endif 483 | if &term == "fbterm" 484 | set cursorline 485 | exe 'colorscheme' colorscheme 486 | elseif $TERMCAP =~ 'Co#256' 487 | set t_Co=256 488 | set cursorline 489 | exe 'colorscheme' colorscheme 490 | else 491 | " 暂时只有这个配色比较适合了 492 | colorscheme default 493 | endif 494 | endif 495 | " 在不同模式下使用不同颜色的光标 496 | " 不要在 ssh 下使用 497 | if s:isColor && !exists('$SSH_TTY') 498 | let color_normal = 'HotPink' 499 | let color_insert = 'RoyalBlue1' 500 | let color_exit = 'green' 501 | if &term =~ 'xterm\|rxvt' 502 | exe 'silent !echo -ne "\e]12;"' . shellescape(color_normal, 1) . '"\007"' 503 | let &t_SI="\e]12;" . color_insert . "\007" 504 | let &t_EI="\e]12;" . color_normal . "\007" 505 | exe 'autocmd VimLeave * :silent !echo -ne "\e]12;"' . shellescape(color_exit, 1) . '"\007"' 506 | elseif &term =~ "screen" 507 | if s:isTmux 508 | if &ttymouse == 'xterm' 509 | set ttymouse=xterm2 510 | endif 511 | exe 'silent !echo -ne "\033Ptmux;\033\e]12;"' . shellescape(color_normal, 1) . '"\007\033\\"' 512 | let &t_SI="\033Ptmux;\033\e]12;" . color_insert . "\007\033\\" 513 | let &t_EI="\033Ptmux;\033\e]12;" . color_normal . "\007\033\\" 514 | exe 'autocmd VimLeave * :silent !echo -ne "\033Ptmux;\033\e]12;"' . shellescape(color_exit, 1) . '"\007\033\\"' 515 | elseif !exists('$SUDO_UID') " or it may still be in tmux 516 | exe 'silent !echo -ne "\033P\e]12;"' . shellescape(color_normal, 1) . '"\007\033\\"' 517 | let &t_SI="\033P\e]12;" . color_insert . "\007\033\\" 518 | let &t_EI="\033P\e]12;" . color_normal . "\007\033\\" 519 | exe 'autocmd VimLeave * :silent !echo -ne "\033P\e]12;"' . shellescape(color_exit, 1) . '"\007\033\\"' 520 | endif 521 | endif 522 | unlet color_normal 523 | unlet color_insert 524 | unlet color_exit 525 | endif 526 | elseif has('win32') && exists('$CONEMUBUILD') 527 | " 在 Windows 的 ConEmu 终端下开启256色 528 | set term=xterm 529 | set t_Co=256 530 | let &t_AB="\e[48;5;%dm" 531 | let &t_AF="\e[38;5;%dm" 532 | set cursorline 533 | exe 'colorscheme' colorscheme 534 | endif 535 | unlet colorscheme 536 | " }}} 537 | " }}} 538 | endif 539 | " 设置更多图形界面选项 {{{2 540 | " 执行宏、寄存器和其它不通过输入的命令时屏幕不会重画(提高性能) 541 | set lazyredraw 542 | " Change the terminal's title 543 | set title 544 | " Avoid command-line redraw on every entered character by turning off Arabic 545 | " shaping (which is implemented poorly). 546 | if has('arabic') 547 | set noarabicshape 548 | endif 549 | " }}} 550 | " Ag 程序参数及输出格式选项 {{{2 551 | if s:hasAg 552 | set grepprg=ag\ --nogroup\ --column\ --smart-case\ --nocolor\ --follow\ --ignore\ '.hg'\ --ignore\ '.svn'\ --ignore\ '.git'\ --ignore\ '.bzr' 553 | set grepformat=%f:%l:%c:%m 554 | endif 555 | " }}} 556 | " 关闭错误声音 {{{2 557 | " 去掉输入错误的提示声音 558 | set noerrorbells 559 | " 不要闪烁 560 | set visualbell t_vb= 561 | " }}} 562 | " 设置文字编辑选项 {{{2 563 | set number " 显示行号 564 | set smartindent " 智能自动缩进 565 | set cmdheight=1 " 设定命令行的行数为 1 566 | set showmatch " 显示括号配对情况 567 | " set nowrap "不自动换行 568 | syntax on " 自动语法高亮 569 | set wildmenu " Vim自身命令行模式智能补全 570 | set wildmode=full 571 | set background=dark "背景使用黑色,开启molokai终端配色必须指令 572 | set confirm " 在处理未保存或只读文件的时候,弹出确认 573 | set noexpandtab "键入Tab时不转换成空格 574 | set shiftwidth=4 " 设定 << 和 >> 命令移动时的宽度为 4 575 | set softtabstop=4 " 设置按BackSpace的时候可以一次删除掉4个空格 576 | set tabstop=4 "tab = 4 spaces 577 | " 自动切换当前目录为当前文件所在的目录 578 | set autochdir 579 | set mouse=a " 允许在所有模式下使用鼠标 580 | set nocursorline " 不突出显示当前行 581 | set nowrapscan " 搜索到文件两端时不重新搜索 582 | set incsearch " 实时搜索 583 | set hlsearch " 搜索时高亮显示被找到的文本 584 | " 搜索时忽略大小写,但在有一个或以上大写字母时仍大小写敏感 585 | set ignorecase 586 | set smartcase 587 | set nobackup " 覆盖文件时不备份 588 | set nowritebackup "文件保存后取消备份 589 | set noswapfile "取消交换区 590 | set mousehide " 键入时隐藏鼠标 591 | set magic " 设置模式的魔术 592 | set sessionoptions=blank,buffers,curdir,folds,slash,tabpages,unix,winsize 593 | set viminfo=%,'1000,<50,s20,h,n$VIMFILES/viminfo 594 | " 允许在有未保存的修改时切换缓冲区,此时的修改由 vim 负责保存 595 | set hidden 596 | set nocursorline " 不突出显示当前行 597 | " Tab 598 | set smarttab 599 | set backspace=indent,eol,start " 让退格键和 Delete 键支持删除回车符 600 | " 保证缓存目录存在 601 | call EnsureExists(s:cache_dir) 602 | " 将撤销树保存到文件 603 | if has('persistent_undo') 604 | set undofile 605 | let &undodir = s:get_cache_dir("undo") 606 | " 保证撤销缓存目录存在 607 | call EnsureExists(&undodir) 608 | endif 609 | " 设置光标之下的最少行数 610 | set scrolloff=3 611 | " 将命令输出重定向到文件的字符串不要包含标准错误 612 | set shellredir=> 613 | " 使用管道 614 | set noshelltemp 615 | set showtabline=0 " Tab栏 616 | set laststatus=2 " 显示状态栏 (默认值为 1, 无法显示状态栏) 617 | " Display extra whitespace 618 | " set list listchars=tab:\|\ ,trail:.,extends:>,precedes:< 619 | " 设置在状态行显示的信息 620 | "set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ [%{(&fenc==\"\"?&enc:&fenc).(&bomb?\",BOM\":\"\")}]\ %c:%l/%L%) 621 | " }}} 622 | " 设置加密选项 {{{2 623 | " (以下取自 https://github.com/lilydjwg/dotvim ) 624 | try 625 | " Vim 7.4.399+ 626 | set cryptmethod=blowfish2 627 | catch /.*/ 628 | " Vim 7.3+ 629 | try 630 | set cryptmethod=blowfish 631 | catch /.*/ 632 | " Vim 7.2-, neovim 633 | endtry 634 | endtry 635 | " }}} 636 | " 设置自动排版选项 {{{2 637 | " 'formatoptions' 控制 Vim 如何对文本进行排版 638 | " r 在插入模式按回车时,自动插入当前注释前导符。 639 | " o 在普通模式按 'o' 或者 'O' 时,自动插入当前注释前导符。 640 | " 2 在对文本排版时,将段落第二行而非第一行的缩进距离应用到其后的行上。 641 | " m 可以在任何值高于 255 的多字节字符上分行。这对亚洲文本尤其有用,因为每 642 | " 个字符都是单独的单位。 643 | " B 在连接行时,不要在两个多字节字符之间插入空格。 644 | " 1 不要在单字母单词后分行。如有可能,在它之前分行。 645 | " j 在合适的场合,连接行时删除注释前导符。 646 | " (使用 vim-sensible 中的设置,不在此处设置) 647 | set formatoptions+=ro2mB1 648 | " t 使用 'textwidth' 自动回绕文本 649 | set formatoptions-=t 650 | " }}} 651 | " 设置语法折叠 {{{2 652 | " 使用说明 {{{3 653 | " 可组合 {} () <> []使用 654 | " zc 关闭当前打开的折叠 655 | " zo 打开当前的折叠 656 | " zm 关闭所有折叠 657 | " zM 关闭所有折叠及其嵌套的折叠 658 | " zr 打开所有折叠 659 | " zR 打开所有折叠及其嵌套的折叠 660 | " zd 删除当前折叠 661 | " zE 删除所有折叠 662 | " zj 移动至下一个折叠 663 | " zk 移动至上一个折叠 664 | " zn 禁用折叠 665 | " zN 启用折叠 666 | " 设置折叠层数为 667 | 668 | " manual 手工定义折叠 669 | " indent 更多的缩进表示更高级别的折叠 670 | " expr 用表达式来定义折叠 671 | " syntax 用语法高亮来定义折叠 672 | " diff 对没有更改的文本进行折叠 673 | " marker 对文中的标志折叠 674 | " }}} 675 | " 允许折叠 676 | set foldenable 677 | set foldmethod=manual 678 | " 设置折叠层数为 679 | set foldlevel=0 680 | " 设置折叠区域的宽度 681 | set foldcolumn=0 682 | " }}} 683 | " }}} 684 | 685 | " 插件设置及其映射 {{{1 686 | " OpenRequireFile.vim {{{2 687 | let g:OpenRequireFile_By_Map = [ 688 | \ $HOME.'/Git/static_v3/src/js', 689 | \ $HOME.'/Git/static_v3/src/css' 690 | \ ] 691 | " nmap gf :call OpenRequireFile() 692 | " }}} 693 | " ag.vim {{{2 694 | if s:hasAg 695 | let g:ag_prg="ag --vimgrep" 696 | let g:ag_working_path_mode="r" 697 | " :Ag [options] pattern [directory] 698 | " :Ag FooBar foo/**/*.py 等同于 :Ag -G foo/.*/[^/]*\.py$ FooBar 699 | endif 700 | " }}} 701 | " vim-surround {{{2 702 | " let g:surround_no_mappings = 1 703 | " " original 704 | " nmap ds Dsurround 705 | " nmap ys Ysurround 706 | " nmap yS YSurround 707 | " nmap yss Yssurround 708 | " nmap ySs YSsurround 709 | " nmap ySS YSsurround 710 | " xmap S VSurround 711 | " xmap gS VgSurround 712 | " imap s Isurround 713 | " imap S ISurround 714 | " " cs is for cscope 715 | " nmap cs Csurround 716 | " }}} 717 | " vim-ragtag {{{2 718 | let g:html_indent_script1 = "zero" 719 | let g:html_indent_style1 = "zero" 720 | " }}} 721 | " vim-indent-guides 以灰色显示缩进块 {{{2 722 | let g:indent_guides_start_level = 1 723 | let g:indent_guides_guide_size = 1 724 | let g:indent_guides_enable_on_vim_startup = 1 725 | " let g:indent_guides_color_change_percent = 3 726 | if s:isGUI==0 727 | let g:indent_guides_auto_colors = 0 728 | function! s:indent_set_console_colors() 729 | highlight IndentGuidesOdd ctermbg = 235 730 | highlight IndentGuidesEven ctermbg = 236 731 | endfunction 732 | autocmd MyAutoCmd VimEnter,Colorscheme * call s:indent_set_console_colors() 733 | endif 734 | " }}} 735 | " NERDCommenter {{{2 736 | let NERDMenuMode = 0 737 | let NERD_c_alt_style = 1 738 | let NERDSpaceDelims = 1 739 | " }}} 740 | " NERDtree tt {{{2 741 | " 指定书签文件 742 | let NERDTreeBookmarksFile = s:get_cache_dir("NERDTreeBookmarks") 743 | " 同时改变当前工作目录 744 | let NERDTreeChDirMode = 2 745 | " NERDTree 替代 Netrw 插件来浏览本地目录 746 | let NERDTreeHijackNetrw = 0 747 | " 排除 . .. 文件 748 | let NERDTreeIgnore = [ '__pycache__', '\.DS_Store', '\.bzr', '\.class', '\.git', '\.hg', '\.idea', '\.pyc', '\.pyo', '\.rvm', '\.sass-cache', '\.svn', '\.swo$', '\.swp$', '^\.$', '^\.\.$' ] 749 | " 指定鼠标模式(1.双击打开 2.单目录双文件 3.单击打开) 750 | let NERDTreeMouseMode = 2 751 | " 打开文件后关闭树窗口 752 | let NERDTreeQuitOnOpen = 1 753 | " 是否默认显示书签列表 754 | let NERDTreeShowBookmarks = 1 755 | " 是否默认显示隐藏文件 756 | let NERDTreeShowHidden = 1 757 | " 窗口在加载时的宽度 758 | let NERDTreeWinSize = 31 759 | 760 | " 开关 NERDTree 761 | nnoremap tt :NERDTree 762 | " }}} 763 | " Tagbar (需安装ctags) {{{2 764 | if s:hasCTags 765 | " 使 Tagbar 在左边窗口打开 (与 NERDTree 的位置冲突) 766 | " let tagbar_left = 1 767 | let tagbar_width = 30 768 | let tagbar_singleclick = 1 769 | augroup Filetype_Specific 770 | " autocmd BufReadPost *.cpp,*.c,*.h,*.hpp,*.cc,*.cxx,*.ini call tagbar#autoopen() 771 | autocmd BufReadPost *.cpp,*.c,*.h,*.hpp,*.cc,*.cxx call tagbar#autoopen() 772 | " 忽略 .user.js 和 JSON 格式文件 773 | autocmd BufReadPost *.user.js,*.json,*.jsonp let b:tagbar_ignore = 1 774 | augroup END 775 | 776 | nnoremap tl :TagbarToggle 777 | endif 778 | " }}} 779 | " NeoComplete {{{2 780 | " Disable AutoComplPop. 781 | let g:acp_enableAtStartup = 0 782 | " Use neocomplete. 783 | let g:neocomplete#enable_at_startup = 1 784 | " Use smartcase. 785 | let g:neocomplete#enable_smart_case = 1 786 | " Use camel case completion. 787 | let g:neocomplete#enable_camel_case = 1 788 | " Use fuzzy completion. 789 | let g:neocomplete#enable_fuzzy_completion = 1 790 | " 设置缓存目录 791 | let g:neocomplete#data_directory = s:get_cache_dir("neocomplete") 792 | let g:neocomplete#enable_auto_delimiter = 1 793 | " Set minimum syntax keyword length. 794 | let g:neocomplete#sources#syntax#min_keyword_length = 3 795 | " Set auto completion length. 796 | let g:neocomplete#auto_completion_start_length = 2 797 | " Set manual completion length. 798 | let g:neocomplete#manual_completion_start_length = 0 799 | " Set minimum keyword length. 800 | let g:neocomplete#min_keyword_length = 3 801 | " buffer file name pattern that disables neocomplete. 802 | let g:neocomplete#sources#buffer#disabled_pattern = '\.log\|\.log\.\|.*quickrun.*\|\.cnx\|Log.txt\|\.user.js' 803 | " buffer file name pattern that locks neocomplete. e.g. ku.vim or fuzzyfinder 804 | let g:neocomplete#lock_buffer_name_pattern = '\*ku\*\|\*unite\*\|Command Line' 805 | let g:neocomplete#sources#buffer#cache_limit_size = 300000 806 | let g:neocomplete#fallback_mappings = ["\\", "\\"] 807 | 808 | 809 | " : completion. 810 | " inoremap pumvisible() ? '' : '' 811 | " }}} 812 | " Vim-AirLine {{{2 813 | let g:airline_powerline_fonts = 0 814 | let g:airline_left_sep='' 815 | let g:airline_right_sep='' 816 | " 修改排版方式 817 | let g:airline#extensions#default#layout = [ 818 | \ [ 'a', 'b', 'c' ], 819 | \ [ 'x', 'y', 'z'] 820 | \ ] 821 | let g:airline_section_c = '%<%n %F' 822 | let g:airline_section_x = '%{strlen(&ft) ? &ft : "Noft"}%{&bomb ? " BOM" : ""}' 823 | let g:airline_section_y = '%{&fileformat} %{(&fenc == "" ? &enc : &fenc)}' 824 | let g:airline_section_z = '%2l:%-1v/%L' 825 | " if !exists('g:airline_symbols') 826 | " let g:airline_symbols = {} 827 | " endif 828 | " 显示 Mode 的简称 829 | let g:airline_mode_map = { 830 | \ '__' : '-', 831 | \ 'n' : 'N', 832 | \ 'i' : 'I', 833 | \ 'R' : 'R', 834 | \ 'c' : 'C', 835 | \ 'v' : 'V', 836 | \ 'V' : 'VL', 837 | \ '' : 'VB', 838 | \ 's' : 'S', 839 | \ 'S' : 'SL', 840 | \ '' : 'SB', 841 | \ } 842 | " 定义符号 843 | if s:isWindows 844 | let g:airline_symbols.whitespace = "" 845 | endif 846 | " }}} 847 | " Emmet-Vim {{{2 848 | let g:user_emmet_settings = { 'lang': "zh-cn" } 849 | " }}} 850 | " Ctrlp.vim {f,l,b} {{{2 851 | let g:ctrlp_working_path_mode = 'ra' 852 | " 设置缓存目录 853 | let g:ctrlp_cache_dir = s:get_cache_dir("ctrlp") 854 | let g:ctrlp_custom_ignore = { 855 | \ 'dir': '\v[\/]\.(git|hg|svn|cache|Trash)', 856 | \ 'file': '\v\.(log|jpg|png|jpeg|exe|so|dll|pyc|pyo|swf|swp|psd|db|DS_Store)$' 857 | \ } 858 | if s:hasAg 859 | let g:ctrlp_user_command = 'ag %s -l --nogroup --column --smart-case --nocolor --follow --ignore "\.(git|hg|svn|bzr)$"' 860 | 861 | " ag is fast enough that CtrlP doesn't need to cache 862 | let g:ctrlp_use_caching = 0 863 | else 864 | let g:ctrlp_custom_ignore = '\.(git|hg|svn|bzr)$' 865 | let g:ctrlp_user_command = { 866 | \ 'types': { 867 | \ 1: ['.git', 'cd %s && git ls-files . --cached --exclude-standard --others'], 868 | \ 2: ['.hg', 'hg --cwd %s locate -I .'], 869 | \ }, 870 | \ 'fallback': 'find %s -type f' 871 | \ } 872 | endif 873 | let g:ctrlp_extensions = ['funky', 'tag', 'buffertag', 'quickfix', 'dir', 'rtscript', 'mixed'] 874 | 875 | let g:ctrlp_funky_syntax_highlight = 1 876 | nnoremap g :CtrlPFunky 877 | nnoremap G :execute 'CtrlPFunky ' . expand('') 878 | 879 | " CtrlPBuffer中支持c-@关闭buffer {{{3 880 | " (取自 https://github.com/kien/ctrlp.vim/issues/280 ) 881 | let g:ctrlp_buffer_func = { 'enter': 'CtrlPBDelete' } 882 | function! CtrlPBDelete() 883 | nnoremap :call DeleteMarkedBuffers() 884 | endfunction 885 | function! s:DeleteMarkedBuffers() 886 | " list all marked buffers 887 | let marked = ctrlp#getmarkedlist() 888 | " the file under the cursor is implicitly marked 889 | if empty(marked) 890 | call add(marked, fnamemodify(ctrlp#getcline(), ':p')) 891 | endif 892 | " call bdelete on all marked buffers 893 | for fname in marked 894 | let bufid = fname =~ '\[\d\+\*No Name\]$' ? str2nr(matchstr(fname, '\d\+')) 895 | \ : fnamemodify(fname[2:], ':p') 896 | exec "silent! bdelete" bufid 897 | endfor 898 | " refresh ctrlp 899 | exec "normal \" 900 | endfunction 901 | " }}} 902 | 903 | nnoremap m :CtrlPMRU 904 | nnoremap l :CtrlPLastMode 905 | nnoremap b :CtrlPBuffer 906 | nnoremap :CtrlP 907 | 908 | " Enable omni completion. 909 | augroup MyAutoCmd 910 | autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS 911 | autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags 912 | autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS 913 | autocmd FileType python setlocal omnifunc=pythoncomplete#Complete 914 | autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags 915 | augroup END 916 | " }}} 917 | " vim-dict {{{2 918 | " _ 打开提示 919 | " }}} 920 | " SudoEdit.vim {{{2 921 | " :SudoRead[!] [file] 922 | " :[range]SudoWrite[!] [file] 923 | " :SudoUpDate [file] 以 root 权限保存文件 924 | " }}} 925 | " Windows 平台下窗口全屏组件 gvimfullscreen.dll {{{2 926 | " 用于 Windows gVim 全屏窗口,可用 F11 切换 927 | " 全屏后再隐藏菜单栏、工具栏、滚动条效果更好 928 | " 929 | " 映射 描述 930 | " 切换全屏 931 | " ta 增加窗口透明度([T]ransparency [A]dd) 932 | " tx 降低窗口透明度(与 Ctrl-A 及 Ctrl-X 相呼应) 933 | " Alt-R 切换Vim是否总在最前面显示 934 | " Vim 启动的时候自动使用当前颜色的背景色以去除 Vim 的白色边框 935 | if s:isGUI && has('gui_win32') && has('libcall') 936 | let g:MyVimLib = 'gvimfullscreen.dll' 937 | " 切换全屏函数 {{{3 938 | function! ToggleFullScreen() 939 | call libcall(g:MyVimLib, 'ToggleFullScreen', 1) 940 | endfunction 941 | " }}} 942 | " 设置透明度函数 (Alpha值 默认:245 范围:180~255) {{{3 943 | let g:VimAlpha = 245 944 | function! SetAlpha(alpha) 945 | let g:VimAlpha = g:VimAlpha + a:alpha 946 | if g:VimAlpha < 180 947 | let g:VimAlpha = 180 948 | endif 949 | if g:VimAlpha > 255 950 | let g:VimAlpha = 255 951 | endif 952 | call libcall(g:MyVimLib, 'SetAlpha', g:VimAlpha) 953 | endfunction 954 | " }}} 955 | " 切换总在最前面显示函数 (默认禁用) {{{3 956 | let g:VimTopMost = 0 957 | function! SwitchVimTopMostMode() 958 | if g:VimTopMost == 0 959 | let g:VimTopMost = 1 960 | else 961 | let g:VimTopMost = 0 962 | endif 963 | call libcall(g:MyVimLib, 'EnableTopMost', g:VimTopMost) 964 | endfunction 965 | " }}} 966 | " 映射 {{{3 967 | 968 | " 默认设置透明 969 | autocmd GUIEnter * call libcallnr(g:MyVimLib, 'SetAlpha', g:VimAlpha) 970 | " 增加 gVim 窗体的透明度 ta 971 | nmap ta :call SetAlpha(-10) 972 | " 降低 gVim 窗体的透明度 tx 973 | nmap tx :call SetAlpha(10) 974 | " 切换 gVim 是否在最前面显示 975 | nmap :call SwitchVimTopMostMode() 976 | " 切换全屏vim 977 | noremap :call ToggleFullScreen() 978 | " }}} 979 | endif 980 | " }}} 981 | " Vim-JsBeautify ff {{{2 982 | let g:config_Beautifier = { 983 | \ "js" : { "indent_size" : 4, "indent_style" : "tab" }, 984 | \ "css" : { "indent_size" : 4, "indent_style" : "tab" }, 985 | \ "html" : { "indent_size" : 4, "indent_style" : "tab" } 986 | \ } 987 | augroup Filetype_Specific 988 | " for css or scss 989 | autocmd FileType css,less,scss nnoremap ff :call CSSBeautify() 990 | autocmd FileType css,less,scss vnoremap ff :call RangeCSSBeautify() 991 | autocmd FileType html nnoremap ff :call HtmlBeautify() 992 | autocmd FileType html vnoremap ff :call RangeHtmlBeautify() 993 | autocmd FileType javascript,json nnoremap ff :call JsBeautify() 994 | autocmd FileType javascript,json vnoremap ff :call RangeJsBeautify() 995 | augroup END 996 | " }}} 997 | " vim-multiple-cursors {{{2 998 | " 选中下一个 999 | " 回退 1000 | " 跳过 1001 | " 退出 1002 | " }}} 1003 | " dash.vim d {{{2 1004 | nmap d DashSearch 1005 | " }}} 1006 | " syntastic {{{2 1007 | " 光标跳转到第一个错误处 1008 | let g:syntastic_auto_jump = 2 1009 | if !s:isWindows && !s:isMac 1010 | " let g:syntastic_error_symbol = '✗' 1011 | " let g:syntastic_style_error_symbol = '✠' 1012 | " let g:syntastic_warning_symbol = '⚠' 1013 | " let g:syntastic_style_warning_symbol = '≈' 1014 | let g:syntastic_error_symbol = "\u2717" 1015 | let g:syntastic_style_error_symbol = "\u2720" 1016 | let g:syntastic_warning_symbol = "\u26a0" 1017 | let g:syntastic_style_warning_symbol = "\u2248" 1018 | endif 1019 | let g:syntastic_stl_format = '[%E{Err: %fe #%e}%B{, }%W{Warn: %fw #%w}]' 1020 | let g:syntastic_mode_map = { 'mode': 'passive', 1021 | \ 'active_filetypes': ['lua', 'php', 'sh'], 1022 | \ 'passive_filetypes': ['puppet'] } 1023 | " }}} 1024 | " tern_for_vim.vim {{{ 1025 | " 鼠标停留在方法内时显示参数提示 1026 | let g:tern_show_argument_hints = 'on_hold' 1027 | " 补全时显示函数类型定义 1028 | let g:tern_show_signature_in_pum = 1 1029 | " 跳转到浏览器 1030 | nnoremap tb :TernDocBrowse 1031 | " 显示变量定义 1032 | nnoremap tn :TernType 1033 | " 跳转到定义处 1034 | nnoremap tf :TernDef 1035 | " 显示文档 1036 | nnoremap td :TernDoc 1037 | " 预览窗口显示定义处代码 1038 | nnoremap tp :TernDefPreview 1039 | " 变量重命名 1040 | nnoremap tr :TernRename 1041 | " location 列表显示全部引用行 1042 | nnoremap ts :TernRefs 1043 | " }}} 1044 | " mark.vim {{{2 1045 | " 高亮光标下的单词 1046 | nmap hl MarkSet 1047 | " 高亮选中的文本 1048 | vmap hl MarkSet 1049 | " 高亮单词内:清除该单词的高亮 高亮单词外:清除所有的高亮 1050 | nmap hh MarkAllClear 1051 | nmap hr MarkRegex 1052 | vmap hr MarkRegex 1053 | " 默认高亮配色 注意:urce后Mark会被覆盖 1054 | highlight MarkWord1 ctermbg=Cyan ctermfg=Black guibg=#8CCBEA guifg=Black 1055 | highlight MarkWord2 ctermbg=Green ctermfg=Black guibg=#A4E57E guifg=Black 1056 | highlight MarkWord3 ctermbg=Yellow ctermfg=Black guibg=#FFDB72 guifg=Black 1057 | highlight MarkWord4 ctermbg=Red ctermfg=Black guibg=#FF7272 guifg=Black 1058 | highlight MarkWord5 ctermbg=Magenta ctermfg=Black guibg=#FFB3FF guifg=Black 1059 | highlight MarkWord6 ctermbg=Blue ctermfg=Black guibg=#9999FF guifg=Black 1060 | " }}} 1061 | " }}} 1062 | " 自动命令 {{{1 1063 | " 特殊文件类型自动命令组 {{{2 1064 | augroup Filetype_Specific 1065 | " CSS {{{3 1066 | autocmd FileType css setlocal smartindent noexpandtab foldmethod=indent 1067 | autocmd BufNewFile,BufRead *.scss setlocal ft=scss 1068 | " 删除一条CSS中无用空格 co 1069 | autocmd FileType css vnoremap co J:s/\s*\([{:;,]\)\s*/\1/g:let @/='' 1070 | autocmd FileType css nnoremap co :s/\s*\([{:;,]\)\s*/\1/g:let @/='' 1071 | " }}} 1072 | " Java {{{3 1073 | " Java Velocity 模板使用html高亮 1074 | autocmd BufNewFile,BufRead *.vm setlocal ft=vm syntax=html 1075 | " }}} 1076 | " JavaScript {{{3 1077 | " }}} 1078 | " PHP {{{3 1079 | " PHP Twig 模板引擎语法 1080 | autocmd BufNewFile,BufRead *.twig set syntax=twig 1081 | " }}} 1082 | " Python {{{3 1083 | " Python 文件的一般设置,比如不要 tab 等 1084 | autocmd FileType python setlocal tabstop=4 shiftwidth=4 expandtab foldmethod=indent 1085 | " }}} 1086 | " VimFiles {{{3 1087 | " 在VimScript中快速查找帮助文档 1088 | autocmd Filetype vim noremap :help 1089 | autocmd FileType vim setlocal foldmethod=indent keywordprg=:help 1090 | " }}} 1091 | " 文本文件{{{3 1092 | " pangu.vim 1093 | autocmd BufWritePre *.markdown,*.md,*.text,*.txt call PanGuSpacing() 1094 | " }}} 1095 | " Quickfix {{{3 1096 | autocmd FileType qf call AdjustWindowHeight(3, 50) 1097 | " }}} 1098 | " JavaScript {{{3 1099 | " }}} 1100 | augroup END 1101 | " }}} 1102 | " 默认自动命令组 {{{2 1103 | augroup MyAutoCmd 1104 | " [Disable] 新建的文件,刚打开的文件不折叠 {{{3 1105 | autocmd BufNewFile,BufRead * setlocal nofoldenable 1106 | " }}} 1107 | " 当打开一个新缓冲区时,自动切换目录为当前编辑文件所在目录 {{{3 1108 | autocmd BufEnter,BufNewFile,BufRead * 1109 | \ if bufname("") !~ "^\[A-Za-z0-9\]*://" && expand("%:p") !~ "^sudo:" 1110 | \| silent! lcd %:p:h 1111 | \|endif 1112 | " }}} 1113 | " 所有文件保存时自动删除多余空格 {{{3 1114 | autocmd BufWritePre * call StripTrailingWhitespace() 1115 | " }}} 1116 | " 自动更新Last Modified {{{3 1117 | autocmd BufWritePre * call UpdateLastMod() 1118 | " }}} 1119 | " 保存 Vim 配置文件后自动加载 {{{3 1120 | " 加载完之后需要执行 AirlineRefresh 来刷新,否则 tabline 排版会乱 1121 | " FIXME 似乎要 AirlineRefresh 两次才能完全刷新 1122 | autocmd BufWritePost $MYVIMRC silent source $MYVIMRC | AirlineRefresh 1123 | " }}} 1124 | " 禁止 NERDTree 在 Startify 页面打开一个分割窗口 {{{3 1125 | autocmd User Startified setlocal buftype= 1126 | " }}} 1127 | augroup END 1128 | " }}} 1129 | " }}} 1130 | " 自定义令 {{{1 1131 | if has('user_commands') 1132 | " :Delete 删除当前文件 {{{2 1133 | command! -nargs=0 Delete 1134 | \ if delete(expand('%')) 1135 | \| echohl WarningMsg 1136 | \| echo "删除当前文件失败!" 1137 | \| echohl None 1138 | \|endif 1139 | " }}} 1140 | " :SQuote 将中文引号替换为英文引号 {{{2 1141 | command! -range=% -bar SQuote ,s/“\|”\|″/"/ge|,s/‘\|’\|′/'/ge 1142 | " }}} 1143 | " :SudoUpDate [file] 以 root 权限保存文件 {{{2 1144 | " If the current buffer has never been saved, it will have no name, 1145 | " call the file browser to save it, otherwise just save it. 1146 | command! -nargs=0 -bar SudoUpDate 1147 | \ if &modified 1148 | \| if !empty(bufname('%')) 1149 | \| exe 'SudoWrite' 1150 | \| endif 1151 | \|endif 1152 | " }}} 1153 | endif 1154 | " }}} 1155 | " 快捷键映射 {{{1 1156 | " Alt 组合键不映射到菜单上 {{{2 1157 | set winaltkeys=no 1158 | " }}} 1159 | " 回车时前字符为{时自动换行补全 {{{2 1160 | inoremap =OpenSpecial('{','}') 1161 | " }}} 1162 | " N: 切换自动换行 {{{2 1163 | nnoremap :call ToggleOption('wrap') 1164 | " }}} 1165 | " N: 复制文件路径 {{{2 1166 | nnoremap :let @* = expand('%:p') 1167 | " }}} 1168 | " N: Buffer切换 {{{2 1169 | nnoremap h 1170 | nnoremap l 1171 | nnoremap j 1172 | nnoremap k 1173 | " }}} 1174 | " I: 移动光标 {{{2 1175 | inoremap 1176 | inoremap 1177 | inoremap gj 1178 | inoremap gk 1179 | " }}} 1180 | " N: Buffers/Tab操作 {{{2 1181 | nnoremap :bprevious 1182 | nnoremap :bnext 1183 | nnoremap :tabnext 1184 | nnoremap :tabprev 1185 | " nnoremap F :tabe % 1186 | " }}} 1187 | " N: 上下移动光标所在行 {{{2 1188 | nmap mz:m+`z 1189 | nmap mz:m-2`z 1190 | " }}} 1191 | " V: 上下移动选中的行 {{{2 1192 | vmap :m'>+`mzgv`yo`z 1193 | vmap :m'<-2`>my`{f,F} {{{2 1196 | " 向上查找 1197 | vnoremap f y/=escape(@", "\\/.*$^~[]") 1198 | " 向下查找 1199 | vnoremap F y?=escape(@", "\\/.*$^~[]") 1200 | " }}} 1201 | " N: 快速编辑 vimrc 文件 e {{{2 1202 | nmap e :tabedit $MYVIMRC 1203 | " }}} 1204 | " N: 混合语言文件快速切换类型 {1,2,3,4} {{{2 1205 | nnoremap 1 :set filetype=xhtml 1206 | nnoremap 2 :set filetype=css 1207 | nnoremap 3 :set filetype=javascript 1208 | nnoremap 4 :set filetype=php 1209 | " }}} 1210 | " 用空格键来开关折叠 {{{2 1211 | nnoremap @=((foldclosed(line('.')) < 0) ? 'zc':'zo') 1212 | " }}} 1213 | " 打开光标下的链接 ur {{{2 1214 | " (以下取自 https://github.com/lilydjwg/dotvim ) 1215 | nmap ur :call OpenURL() 1216 | " }}} 1217 | " 切换绝对/相对行号 nu {{{2 1218 | nnoremap nu :call ToggleOption('rnu') 1219 | " }}} 1220 | " 使用Perl风格正则 {{{2 1221 | nnoremap / /\v 1222 | " }}} 1223 | " }}} 1224 | 1225 | 1226 | 1227 | 1228 | 1229 | 1230 | 1231 | 1232 | " ===== 工作环境配制 ===== 1233 | " Less to css need npm install less -g {{{ 1234 | function! LessToCss() 1235 | let current_file = expand('%:p') 1236 | let filename = fnamemodify(current_file, ':r') . ".css" 1237 | let command = "!lessc '" . current_file . "' '" . filename ."'" 1238 | "let command = "silent !lessc '" . current_file . "' '" . filename ."'" 1239 | execute command 1240 | endfunction 1241 | "autocmd BufWritePost,FileWritePost *.less call LessToCss() 1242 | " }}} 1243 | 1244 | " 加载 Vim 配置文件时让一些设置不再执行 {{{2 1245 | " 并记录加载 Vim 配置文件的次数 1246 | if !exists("g:VimrcIsLoad") 1247 | let g:VimrcIsLoad = 1 1248 | else 1249 | let g:VimrcIsLoad = g:VimrcIsLoad + 1 1250 | endif 1251 | " }}} 1252 | " Vim Modeline: {{{2 1253 | " vim: fdm=marker fmr={{{,}}} foldcolumn=1 1254 | " }}} 1255 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## 自行编译方法 2 | 3 | 我编译使用的是VC2010的环境,可自行查找可用的绿色编译包。bigvim.bat中的内容 4 | 5 | ```text 6 | nmake -f Make_mvc.mak GUI=yes FEATURES=HUGE MBYTE=yes IME=yes GIME=yes DYNAMIC_IME=yes OLE=yes PYTHON=c:\python27 DYNAMIC_PYTHON=yes PYTHON_VER=27 PYTHON3=c:\python33 DYNAMIC_PYTHON3=yes PYTHON3_VER=33 %1 CSCOPE=yes DEBUG=no 7 | ``` 8 | 9 | ## 插件列表 10 | 11 | VIM插件使用~~Vundle~~ `Plug`(运行并行更新)进行管理,具体使用的插件列表请看[.vimrc](.vimrc)。 12 | 13 | ## 特殊的dll文件 14 | 15 | - ~~gvimext.dll是修改过后的,功能简化了,当选择单个文件时右键菜单只会出现一个 "Edit with VIM",当选择多个文件同时会多出个"Diff with VIM",同时加入了图标。~~,已习惯去除VIM菜单方式,当然`gvimext.dll`文件还是保存但不再更新。 16 | - gvimfullscreen.dll是个相当全的东西,能让VIM全屏、透明、总在最前功能,在vimrc中设置如下则可使用,重的修改是去除Gvim的白边![源代码](http://github.com/asins/gvimfullscreen_win32)可到这里找到。 17 | 18 | ``` vim 19 | " {{{ Win平台下窗口全屏组件 gvimfullscreen.dll 20 | " Alt + Enter 全屏切换 21 | " Shift + t 降低窗口透明度 22 | " Shift + y 加大窗口透明度 23 | " Shift + r 切换Vim是否总在最前面显示 24 | " Vim启动的时候自动使用当前颜色的背景色以去除Vim的白色边框 25 | if has('gui_running') && has('gui_win32') && has('libcall') 26 | let g:MyVimLib = 'gvimfullscreen.dll' 27 | function! ToggleFullScreen() 28 | call libcall(g:MyVimLib, 'ToggleFullScreen', 1) 29 | endfunction 30 | 31 | let g:VimAlpha = 245 32 | function! SetAlpha(alpha) 33 | let g:VimAlpha = g:VimAlpha + a:alpha 34 | if g:VimAlpha < 180 35 | let g:VimAlpha = 180 36 | endif 37 | if g:VimAlpha > 255 38 | let g:VimAlpha = 255 39 | endif 40 | call libcall(g:MyVimLib, 'SetAlpha', g:VimAlpha) 41 | endfunction 42 | 43 | let g:VimTopMost = 0 44 | function! SwitchVimTopMostMode() 45 | if g:VimTopMost == 0 46 | let g:VimTopMost = 1 47 | else 48 | let g:VimTopMost = 0 49 | endif 50 | call libcall(g:MyVimLib, 'EnableTopMost', g:VimTopMost) 51 | endfunction 52 | "映射 Alt+Enter 切换全屏vim 53 | map :call ToggleFullScreen() 54 | "切换Vim是否在最前面显示 55 | nmap :call SwitchVimTopMostMode() 56 | "增加Vim窗体的不透明度 57 | nmap :call SetAlpha(10) 58 | "增加Vim窗体的透明度 59 | nmap :call SetAlpha(-10) 60 | " 默认设置透明 61 | autocmd GUIEnter * call libcallnr(g:MyVimLib, 'SetAlpha', g:VimAlpha) 62 | endif 63 | " }}} 64 | ``` 65 | 66 | 67 | ## 更新记录 68 | 69 | ### Update 2016-02-23 70 | 71 | 重新编写,改善了编辑`.vimrc`时多次渲染闪烁以及颜色丢失问题 72 | 73 | 大量参照[https://github.com/Firef0x/vimfiles.git]()的编写风格以及配置,感谢 74 | 75 | 76 | ### Update 2014-07-04 77 | 78 | - 加入CtrlP插件用于在项目中查找文件等功能 79 | - 删除 bufexplorer.vim 使用CtrlP的:CtrlPBuffer 80 | - 删除 mra.vim 使用CtrlP的:CtrlPMRU 81 | - 替换原有Mark插件 解决source _vimrc标记颜色丢失问题,相应快捷键也更新了 82 | - 用airline替换powerline,运行速度更快 83 | - 删除neocomplete中对默认字典的定义解决无法提示字典词的问题 84 | 85 | 现在开始使用OS X系统,所以有些设置做了微调以解决与系统默认设置冲突的问题。 86 | 87 | #### Update 2013-03-26 88 | 89 | 修改vim编译文件(src\feature.h),去除toolbar/menu包。注释掉了所有包括以下字符的行 90 | 91 | ``` vim 92 | # define FEAT_MENU 93 | # define FEAT_TOOLBAR 94 | ``` 95 | 96 | 编译完后使用时出现些问题 97 | 98 | * 在_vimrc中去掉了`"source $VIMRUNTIME/delmenu.vim`这行。 99 | * NERD-Commenter插件没有对是否加载了menu包做判断!在vimrc中加入一行`let NERDMenuMode = 0`。 100 | 101 | 修改vim源码,修复Win下右下角白边bug 102 | 103 | * 在`src/gui_w32.c` 文件中第 1516行 `CreateWindowEx` 这个API中的第一个参数 `WS_EX_CLIENTEDGE` 把它改为0。 104 | * 在`src/gui_w32.c` 文件中第1567行 `gui.border_offset = gui.border_width + 2;` 这个把 +2 去掉。 105 | * `gvimfullscreen.c`文件中第112行 `SetWindowLong(hTextArea, GWL_EXSTYLE, GetWindowLong(hTextArea, GWL_EXSTYLE) | WS_EX_CLIENTEDGE);` 这行注释掉。 106 | 107 | #### Update 2013-03-22 108 | 109 | 这次编译只支持Python3.3、Python2.7,其它的都去除了,用不上,最后补丁为875 110 | 111 | #### Update 2012-10-24 112 | 113 | 插件管理交给`Vundle`管理了,其中我也改动了几个插件也放在Git中。更新插件时直接`:BundleInstall`就可以了(但修改完后得重启GVIM再执行命令),不用的插件在`_vimrc`中删除后执行`:BundleClean`就可以了。 114 | 115 | #### Update 2011-11-09 116 | 117 | 从git中更新后编译的64位GVIM,支持Python3.2、Python2.7、Perl、TCL/TC应该算是挺全的了,补丁的到353。 118 | 119 | 修改了一行源码,用于解决GVIM白边的问题,因为我使用的配色为`molokai`,所以给的颜色是黑色的。 120 | 121 | ~~修改 gui_w32.c 第 1471 行.~~ 122 | 123 | wndclassw.hbrBackground = CreateSolidBrush(RGB(27, 29, 30)); 124 | -------------------------------------------------------------------------------- /_vimrc: -------------------------------------------------------------------------------- 1 | " Author: Asins - asinsimple AT gmail DOT com 2 | " Get latest vimrc from http://nootn.com/ 3 | 4 | set nocompatible " be iMproved 5 | filetype off " required! 6 | " 设置leader为, 7 | let mapleader="," 8 | let maplocalleader="," 9 | 10 | " 删除原有自动命令,防止.vimrc执行多次时自动命令出现多次 11 | autocmd! 12 | 13 | "编辑vim配置文件 14 | if has("unix") 15 | set fileformats=unix,mac,dos 16 | let $VIMFILES = $HOME."/.vim" 17 | else 18 | set fileformats=dos,unix,mac 19 | let $VIMFILES = $VIM."/vimfiles" 20 | endif 21 | 22 | set rtp+=$VIMFILES/bundle/Vundle.vim 23 | call vundle#begin($VIMFILES.'/bundle') 24 | 25 | " let Vundle manage Vundle 26 | " required! 27 | Plugin 'gmarik/Vundle.vim' 28 | 29 | " My Bundles here: 30 | "Color 31 | Plugin 'asins/vim-colors' 32 | 33 | Plugin 'scrooloose/nerdtree' 34 | Plugin 'tpope/vim-fugitive' 35 | Plugin 'bling/vim-airline' 36 | Plugin 'kien/ctrlp.vim' 37 | Plugin 'tacahiroy/ctrlp-funky' 38 | Plugin 'jrhorn424/vim-multiple-cursors' 39 | 40 | Plugin 'asins/vimcdoc' 41 | Plugin 'asins/vim-dict' 42 | 43 | Plugin 'Shougo/vimshell.vim' 44 | Plugin 'scrooloose/nerdcommenter' 45 | Plugin 'asins/renamer.vim' 46 | Plugin 'auto_mkdir' 47 | 48 | " Syntax 49 | Plugin 'othree/html5.vim' 50 | Plugin 'othree/html5-syntax.vim' 51 | Plugin 'hallison/vim-markdown' 52 | Plugin 'pangloss/vim-javascript' 53 | Plugin 'nono/jquery.vim' 54 | Plugin 'groenewege/vim-less' 55 | 56 | " Indent 57 | Plugin 'IndentAnything' 58 | Plugin 'jiangmiao/simple-javascript-indenter' 59 | 60 | 61 | Plugin 'Shougo/neocomplete.vim' 62 | Plugin 'asins/mark' 63 | 64 | " HTML tools 65 | Plugin 'mattn/emmet-vim' 66 | Plugin 'tpope/vim-ragtag' 67 | Plugin 'matchit.zip' " 通过%跳转配对代码 68 | Plugin 'MatchTag' " HTML标签高亮配对 69 | Plugin 'maksimr/vim-jsbeautify' "HTML/CSS/JS代码格式化 70 | 71 | call vundle#end() 72 | filetype plugin indent on 73 | 74 | " {{{ Win平台下窗口全屏组件 gvimfullscreen.dll 75 | " Alt + Enter 全屏切换 76 | " Shift + t 降低窗口透明度 77 | " Shift + y 加大窗口透明度 78 | " Shift + r 切换Vim是否总在最前面显示 79 | " Vim启动的时候自动使用当前颜色的背景色以去除Vim的白色边框 80 | if has('gui_running') && has('gui_win32') && has('libcall') 81 | let g:MyVimLib = 'gvimfullscreen.dll' 82 | function! ToggleFullScreen() 83 | call libcall(g:MyVimLib, 'ToggleFullScreen', 1) 84 | endfunction 85 | 86 | let g:VimAlpha = 245 87 | function! SetAlpha(alpha) 88 | let g:VimAlpha = g:VimAlpha + a:alpha 89 | if g:VimAlpha < 180 90 | let g:VimAlpha = 180 91 | endif 92 | if g:VimAlpha > 255 93 | let g:VimAlpha = 255 94 | endif 95 | call libcall(g:MyVimLib, 'SetAlpha', g:VimAlpha) 96 | endfunction 97 | 98 | let g:VimTopMost = 0 99 | function! SwitchVimTopMostMode() 100 | if g:VimTopMost == 0 101 | let g:VimTopMost = 1 102 | else 103 | let g:VimTopMost = 0 104 | endif 105 | call libcall(g:MyVimLib, 'EnableTopMost', g:VimTopMost) 106 | endfunction 107 | "映射 Alt+Enter 切换全屏vim 108 | noremap :call ToggleFullScreen() 109 | "切换Vim是否在最前面显示 110 | nmap :call SwitchVimTopMostMode() 111 | "增加Vim窗体的不透明度 112 | nmap :call SetAlpha(10) 113 | "增加Vim窗体的透明度 114 | nmap :call SetAlpha(-10) 115 | " 默认设置透明 116 | autocmd GUIEnter * call libcallnr(g:MyVimLib, 'SetAlpha', g:VimAlpha) 117 | endif 118 | " }}} 119 | 120 | " encode 121 | set encoding=utf-8 122 | set fileencodings=ucs-bom,utf-8,cp936,cp950,latin1 123 | 124 | " font 125 | set linespace=0 126 | language messages zh_CN.UTF-8 127 | 128 | set vb t_vb= "关闭响铃和闪屏 129 | set guioptions-=T "gui的工具栏 130 | set guioptions-=r "gui的右边的滑动条 131 | set guioptions-=L "gui的左边的滑动条 132 | set guioptions-=m "gui的菜单 133 | set showtabline=0 "Tab栏 134 | set laststatus=2 " 默认显示状态栏 135 | 136 | "set nocursorline 137 | "set guifont=Monaco:h13 138 | set guifont=YaHei\ Mono:h12 139 | "set guifont=Consolas:h14 140 | 141 | 142 | " 显示状态栏 (默认值为 1, 无法显示状态栏) 143 | "set laststatus=2 144 | " 设置在状态行显示的信息 145 | "set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ [%{(&fenc==\"\"?&enc:&fenc).(&bomb?\",BOM\":\"\")}]\ %c:%l/%L%) 146 | 147 | syntax on " 自动语法高亮 148 | set nobackup " Close backup 149 | set nowritebackup 150 | set autochdir " 自动切换当前目录为当前文件所在的目录 151 | set ignorecase " 搜索时忽略大小写,但在有一个或以上大写字母时仍大小写敏感 152 | set nowrapscan " 搜索到文件两端时不重新搜索 153 | set incsearch " 实时搜索 154 | set hlsearch " 搜索时高亮显示被找到的文本 155 | set mouse=a " 允许在所有模式下使用鼠标 156 | 157 | " Style 158 | colorscheme molokai 159 | set number " 显示行号 160 | set hidden " 允许在有未保存的修改时切换缓冲区 161 | set wildmenu " 开启命令行补全 162 | set smartindent " 智能自动缩进 163 | set scrolloff=3 " 上下可视行数 164 | set nocursorline " 不突出显示当前行 165 | set showmatch "显示括号配对情况 166 | set shortmess=atl "启动时不显示 捐赠提示 167 | set helplang=cn 168 | 169 | " Display extra whitespace 170 | set list listchars=tab:\|\ ,trail:.,extends:>,precedes:< 171 | 172 | " Tab 173 | set tabstop=4 " 设定 tab 长度为 4 174 | set softtabstop=4 " 设置按BackSpace的时候可以一次删除掉4个空格 175 | set shiftwidth=4 " 设定 << 和 >> 命令移动时的宽度为 4 176 | set smarttab 177 | set noexpandtab " 使用Tab而非空格 178 | set backspace=indent,eol,start " 让退格键和 Delete 键支持删除回车符 179 | 180 | if has("unix") 181 | set transparency=4 " 设置透明度 182 | endif 183 | 184 | "set foldenable 开启代码折叠功能 185 | " 可组合 {} () <> []使用 186 | " zc 关闭当前打开的折叠 187 | " zo 打开当前的折叠 188 | " zm 关闭所有折叠 189 | " zM 关闭所有折叠及其嵌套的折叠 190 | " zr 打开所有折叠 191 | " zR 打开所有折叠及其嵌套的折叠 192 | " zd 删除当前折叠 193 | " zE 删除所有折叠 194 | " zj 移动至下一个折叠 195 | " zk 移动至上一个折叠 196 | " zn 禁用折叠 197 | " zN 启用折叠 198 | 199 | " 新建的文件,刚打开的文件不折叠 200 | autocmd BufNewFile,BufRead * setlocal nofoldenable list 201 | 202 | " Filetype 203 | autocmd BufRead,BufNewFile *.json set filetype=json 204 | 205 | " 保存时自动删除多余空格 206 | fun! StripTrailingWhitespace() 207 | " Preparation: save last search, and cursor position. 208 | let _s=@/ 209 | let l = line(".") 210 | let c = col(".") 211 | " do the business: 212 | %s/ 213 | $\|\s\+$//e 214 | " clean up: restore previous search history, and cursor position 215 | let @/=_s 216 | call cursor(l, c) 217 | endfun 218 | autocmd BufWritePre * call StripTrailingWhitespace() 219 | 220 | 221 | " ===== 插件配置 ===== 222 | 223 | " dict {{{ 224 | "_ 打开提示 225 | autocmd filetype javascript setlocal dictionary+=$VIMFILES/bundle/vim-dict/dict/javascript.dic 226 | autocmd filetype javascript setlocal dictionary+=$VIMFILES/bundle/vim-dict/dict/node.dic 227 | autocmd filetype css setlocal dictionary+=$VIMFILES/bundle/vim-dict/dict/css.dic 228 | autocmd filetype php setlocal dictionary+=$VIMFILES/bundle/vim-dict/dict/php.dic 229 | " }}} 230 | 231 | " {{{ ragtag HTML/XML缩进 232 | let g:html_indent_script1 = "zero" 233 | let g:html_indent_style1 = "zero" 234 | " }}} 235 | 236 | " {{{ emmet HTML代码生成 237 | " 常用命令可看:http://nootn.com/blog/Tool/23/ 238 | let g:user_emmet_settings = { 239 | \ 'lang': "zh-cn" 240 | \ } 241 | " m 合并多行 242 | " }}} 243 | 244 | " {{{ NERDtree 文件管理器 245 | " 让Tree把自己给装饰得多姿多彩漂亮点 246 | let NERDChristmasTree=1 247 | " 控制当光标移动超过一定距离时,是否自动将焦点调整到屏中心 248 | let NERDTreeAutoCenter=1 249 | " 指定书签文件 250 | let NERDTreeBookmarksFile=$VIMFILES.'\NERDTree_bookmarks' 251 | " 指定鼠标模式(1.双击打开 2.单目录双文件 3.单击打开) 252 | let NERDTreeMouseMode=2 253 | " 是否默认显示书签列表 254 | let NERDTreeShowBookmarks=1 255 | " 是否默认显示文件 256 | let NERDTreeShowFiles=1 257 | " 是否默认显示行号 258 | let NERDTreeShowLineNumbers=0 259 | " 窗口位置('left' or 'right') 260 | let NERDTreeWinPos='left' 261 | " 窗口宽度 262 | let NERDTreeWinSize=31 263 | nnoremap tt :NERDTree 264 | "}}} 265 | 266 | " {{{ The-NERD-Commenter 注释代码用的,以下映射已写在插件中 267 | let NERDMenuMode = 0 268 | " ca 在可选的注释方式之间切换,比如C/C++ 的块注释/* */和行注释// 269 | " cc 注释当前行 270 | " cs 以”性感”的方式注释 271 | " cA 在当前行尾添加注释符,并进入Insert模式 272 | " cu 取消注释 273 | " cm 添加块注释 274 | " }}} 275 | 276 | " {{{ vim-jsbeautify need nodejs 优化html/js/js代码,并不是简单的缩进噢 277 | let g:config_Beautifier = { 278 | \ 'js' : { 279 | \ 'indent_size' : 4, 280 | \ 'indent_style' : 'tab', 281 | \ }, 282 | \ 'css' : { 283 | \ 'indent_size' : 4, 284 | \ 'indent_style' : 'tab', 285 | \ }, 286 | \ 'html' : { 287 | \ 'indent_size' : 4, 288 | \ 'indent_style' : 'tab', 289 | \ } 290 | \ } 291 | autocmd FileType javascript noremap js :call JsBeautify() 292 | autocmd FileType html noremap js :call HtmlBeautify() 293 | autocmd FileType css,less noremap js :call CSSBeautify() 294 | " }}} 295 | 296 | 297 | " {{{ matchit.zip 对%命令进行扩展使得能在嵌套标签和语句之间跳转 298 | " % 正向匹配 g% 反向匹配 299 | " [% 定位块首 ]% 定位块尾 300 | "}}} 301 | 302 | " {{{ MatchTag HTML标签高亮配对 303 | " }}} 304 | 305 | " {{{ asins/renamer.vim 文件重命名 306 | " :Renamer 将当前文件所在文件夹下的内容显示在一个新窗口 307 | " :Ren 开始重命名 308 | "}}} 309 | 310 | " {{{ Mark 给各种tags标记不同的颜色,便于观看调式的插件。 311 | " 在运行source后Mark会被覆盖 312 | hi MarkWord1 ctermbg=Cyan ctermfg=Black guibg=#8CCBEA guifg=Black 313 | hi MarkWord2 ctermbg=Green ctermfg=Black guibg=#A4E57E guifg=Black 314 | hi MarkWord3 ctermbg=Yellow ctermfg=Black guibg=#FFDB72 guifg=Black 315 | hi MarkWord4 ctermbg=Red ctermfg=Black guibg=#FF7272 guifg=Black 316 | hi MarkWord5 ctermbg=Magenta ctermfg=Black guibg=#FFB3FF guifg=Black 317 | hi MarkWord6 ctermbg=Blue ctermfg=Black guibg=#9999FF guifg=Black 318 | 319 | nmap hl MarkSet 320 | vmap hl MarkSet 321 | nmap hh MarkClear 322 | nmap hr MarkRegex 323 | vmap hr MarkRegex 324 | " }}} 325 | 326 | " vim-airline {{{ 327 | nmap r :AirlineRefresh 328 | let g:airline_theme='badwolf' 329 | let g:airline_powerline_fonts=0 330 | let g:airline_left_sep='' 331 | let g:airline_right_sep='' 332 | let g:airline_mode_map = { 333 | \ '__' : '-', 334 | \ 'n' : 'N', 335 | \ 'i' : 'I', 336 | \ 'R' : 'R', 337 | \ 'c' : 'C', 338 | \ 'v' : 'V', 339 | \ 'V' : 'V', 340 | \ '' : 'V', 341 | \ 's' : 'S', 342 | \ 'S' : 'S', 343 | \ '' : 'S', 344 | \ } 345 | let g:airline#extensions#default#layout = [ 346 | \ [ 'a', 'b', 'c' ], 347 | \ [ 'x', 'y', 'z'] 348 | \ ] 349 | let g:airline_section_c = '%<%n %F' 350 | let g:airline_section_x = '%{strlen(&ft) ? &ft : "Noft"}%{&bomb ? " BOM" : ""}' 351 | let g:airline_section_y = '%{&fileformat} %{(&fenc == "" ? &enc : &fenc)}' 352 | let g:airline_section_z = '%2l:%-1v/%L' 353 | " }}} 354 | 355 | " {{{ Code Completins 356 | let g:acp_enableAtStartup = 0 357 | let g:neocomplete#enable_at_startup = 1 358 | " Use smartcase. 359 | let g:neocomplete#enable_smart_case = 1 360 | " : completion. 361 | inoremap pumvisible() ? '' : '' 362 | " }}} 363 | 364 | " ctrlp.vim {{{ 365 | let g:ctrlp_working_path_mode = 'ra' 366 | let g:ctrlp_custom_ignore = { 367 | \ 'dir': '\v[\/]\.(git|hg|svn|cache|Trash)', 368 | \ 'file': '\v\.(log|jpg|png|jpeg|exe|so|dll|pyc|pyo|swf|swp|psd|db)$' 369 | \ } 370 | 371 | " funky extension - jump to funciton defs 372 | let g:ctrlp_extensions = ['funky'] 373 | let g:ctrlp_funky_syntax_highlight = 1 374 | nnoremap g :CtrlPFunky 375 | " narrow the list down with a word under cursor 376 | nnoremap G :execute 'CtrlPFunky ' . expand('') 377 | 378 | " Enable omni completion. 379 | autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS 380 | autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags 381 | autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS 382 | autocmd FileType python setlocal omnifunc=pythoncomplete#Complete 383 | autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags 384 | 385 | nnoremap f :CtrlPMRU 386 | nnoremap b :CtrlPBuffer 387 | nnoremap :CtrlP 388 | " }}} 389 | 390 | " {{{ vim-multiple-cursors 光标选择功能 391 | "let g:multi_cursor_next_key='' 392 | "let g:multi_cursor_prev_key='' 393 | "let g:multi_cursor_skip_key='' 394 | "let g:multi_cursor_quit_key='' 395 | " }}} 396 | 397 | 398 | " ===== 键盘映射 ===== 399 | 400 | " 快速编辑.vimrc文件 401 | nmap e :tabedit $MYVIMRC 402 | 403 | " 自动运用设置 404 | autocmd BufWritePost .vimrc,.gvimrc,_vimrc silent source % 405 | 406 | " 窗口切换 407 | nnoremap h 408 | nnoremap l 409 | nnoremap j 410 | nnoremap k 411 | 412 | " Buffers/Tab操作快捷方式! 413 | nnoremap :bprevious 414 | nnoremap :bnext 415 | nnoremap :tabnext 416 | nnoremap :tabprev 417 | "nnoremap F :tabe % 418 | 419 | " 插入模式下上下左右移动光标 420 | inoremap 421 | inoremap 422 | inoremap gj 423 | inoremap gk 424 | 425 | "一些不错的映射转换语法(如果在一个文件中混合了不同语言时有用) 426 | nnoremap 1 :set filetype=xhtml 427 | nnoremap 2 :set filetype=css 428 | nnoremap 3 :set filetype=javascript 429 | nnoremap 4 :set filetype=php 430 | 431 | " 代码垂直移动 432 | nmap mz:m+`z 433 | nmap mz:m-2`z 434 | vmap :m'>+`mzgv`yo`z 435 | vmap :m'<-2`>my` f y/=escape(@", "\\/.*$^~[]") 440 | vnoremap F y?=escape(@", "\\/.*$^~[]") 441 | 442 | " 普通模式下 Shift+W 切换自动换行 443 | nnoremap :exe &wrap==1 ? 'set nowrap' : 'set wrap' 444 | " 普通模式下 Ctrl+c 复制文件路径 445 | nnoremap :let @* = expand('%:p') 446 | 447 | " 在VimScript中快速查找帮助文档 448 | autocmd Filetype vim noremap :help 449 | 450 | 451 | " ===== 工作环境配制 ===== 452 | " {{{ TUDOU 打开项目中的文件 453 | function! GetOsPortUrl(url) " 格式化地址分隔线 454 | if has("unix") || has('mac') 455 | let extra = ':p:gs?\\?/?' 456 | else 457 | let extra = ':p:gs?/?\\?' 458 | end 459 | return fnamemodify(a:url, extra) 460 | endfunction 461 | " 获取项目目录 462 | function! GetProjectPath(path, filename) 463 | let path = fnamemodify(a:path, ':p:h') 464 | let path = findfile(a:filename, '.;') 465 | if(path == '') 466 | echo 'Not find project directory.' 467 | endif 468 | return fnamemodify(path, ':h') 469 | endfunction 470 | " 打开@import 'xx/oo.less' 'xxx/oo'(less形式) 'xx/oo.css' 471 | function! GetLessImportFile() 472 | let prefpath = GetProjectPath('%', 'tpm-config.js').'\src\css\' 473 | let filePath = substitute(getline('.'), '@import\s\+"\([^"]\+\)";\?', '\1', '') 474 | if strridx(filePath, './') == 0 " 相对引入 475 | let fullPath = expand('%:p:h') . substitute(filePath, '^\.', '', '') 476 | else " 绝对引入 477 | let fullPath = prefpath . filePath 478 | endif 479 | let fullPath = GetOsPortUrl(fullPath) 480 | let fullPath = substitute(fullPath, '\/$', '', '') 481 | if fnamemodify(fullPath, ':e') == '' 482 | let fullPath = fullPath . '.less' 483 | endif 484 | execute ":e " fullPath 485 | if findfile(fullPath) == "" 486 | echo 'File not exist, Create now: '. fullPath 487 | endif 488 | endfunction 489 | " 打开Require 引入的JS文件 './xxx' 'model/xxx' 'ooo/xxx.js' '../model/xxx' 490 | function! GetRequireFile() 491 | let prefpath = GetProjectPath('%', 'tpm-config.js').'\src\js\' 492 | let filePath = GetFilePath() 493 | if strridx(filePath, './') != -1 " 相对引入 494 | let fullPath = expand('%:p:h') . '/' . filePath 495 | else " 绝对引入 496 | let fullPath = prefpath . filePath 497 | endif 498 | let fullPath = GetOsPortUrl(fullPath) 499 | let fullPath = substitute(fullPath, '\/$', '', '') 500 | if fnamemodify(fullPath, ':e') == '' 501 | let fullPath = fullPath . '.js' 502 | endif 503 | 504 | execute ":e " fullPath 505 | if findfile(fullPath) == "" 506 | echo 'File not exist, Create now: '. fullPath 507 | endif 508 | endfunction 509 | function! GetFilePath() 510 | let line = substitute(expand(''), "'", '"', "g") 511 | let mlist = matchlist(line, '.*\"\(.\+\)\".*') 512 | if len(mlist) > 0 513 | return mlist[1] 514 | else 515 | let line = substitute(getline('.'), "'", '"', "g") 516 | let mlist = matchlist(line, '.*\"\(.\+\)\".*') 517 | if len(mlist) > 0 518 | return mlist[1] 519 | endif 520 | endif 521 | return '' 522 | endfunction 523 | function! OpenRequireFile() 524 | if strridx(getline('.'), '@import') >= 0 525 | call GetLessImportFile() 526 | else 527 | call GetRequireFile() 528 | endif 529 | endfunction 530 | nmap gf :call OpenRequireFile() 531 | 532 | function! YtpmVM(filePath, env) 533 | let s:cmt = '!ytpm vm "'.a:filePath.'" '.a:env.' --config="'.$HOME.'/tudou/Static/v3/tpm-config.js"' 534 | "echo s:cmt 535 | exe s:cmt 536 | endfunction 537 | autocmd BufRead,BufNewFile *.vm setlocal ft=vm syntax=html 538 | autocmd filetype vm noremap ywt :call YtpmVM('%', 'wwwtest') 539 | autocmd filetype vm noremap ywt1 :call YtpmVM('%', 'wwwtest1') 540 | autocmd filetype vm noremap ywt2 :call YtpmVM('%', 'wwwtest2') 541 | autocmd filetype vm noremap ybt :call YtpmVM('%', 'beta') 542 | autocmd filetype vm noremap ybt1 :call YtpmVM('%', 'beta1') 543 | autocmd filetype vm noremap ybt2 :call YtpmVM('%', 'beta2') 544 | " }}} 545 | 546 | " need npm install less -g 547 | function! LessToCss() 548 | let current_file = shellescape(expand('%:p')) 549 | let filename = shellescape(expand('%:r')) 550 | let command = "silent !lessc " . current_file . " " . filename . ".css" 551 | execute command 552 | endfunction 553 | autocmd BufWritePost,FileWritePost *.less call LessToCss() 554 | -------------------------------------------------------------------------------- /ctags.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asins/vim/5f6dd265ba5716b56b2a643047956c0c6e089911/ctags.exe -------------------------------------------------------------------------------- /fonts/LiHeiPro.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asins/vim/5f6dd265ba5716b56b2a643047956c0c6e089911/fonts/LiHeiPro.ttf -------------------------------------------------------------------------------- /fonts/YaHei Mono.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asins/vim/5f6dd265ba5716b56b2a643047956c0c6e089911/fonts/YaHei Mono.ttf -------------------------------------------------------------------------------- /fonts/YaHei.Consolas.1.12.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asins/vim/5f6dd265ba5716b56b2a643047956c0c6e089911/fonts/YaHei.Consolas.1.12.ttf -------------------------------------------------------------------------------- /vim74/gvim.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asins/vim/5f6dd265ba5716b56b2a643047956c0c6e089911/vim74/gvim.exe -------------------------------------------------------------------------------- /vim74/gvimext.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asins/vim/5f6dd265ba5716b56b2a643047956c0c6e089911/vim74/gvimext.dll -------------------------------------------------------------------------------- /vim74/gvimfullscreen.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asins/vim/5f6dd265ba5716b56b2a643047956c0c6e089911/vim74/gvimfullscreen.dll -------------------------------------------------------------------------------- /vim74/lua52.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asins/vim/5f6dd265ba5716b56b2a643047956c0c6e089911/vim74/lua52.dll -------------------------------------------------------------------------------- /x32/ctags.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asins/vim/5f6dd265ba5716b56b2a643047956c0c6e089911/x32/ctags.exe -------------------------------------------------------------------------------- /x32/gvimext.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asins/vim/5f6dd265ba5716b56b2a643047956c0c6e089911/x32/gvimext.dll -------------------------------------------------------------------------------- /x32/gvimfullscreen.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asins/vim/5f6dd265ba5716b56b2a643047956c0c6e089911/x32/gvimfullscreen.dll -------------------------------------------------------------------------------- /x32/iconv.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asins/vim/5f6dd265ba5716b56b2a643047956c0c6e089911/x32/iconv.dll --------------------------------------------------------------------------------