"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" User configuration
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" turn off nice effect on status bar title
let performance_mode=0
let use_plugins_i_donot_use=0

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => General
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"我们对Vim的描述都假设它是在增强模式下, 所以并不能完全与Vi兼容
"所以首先确保关闭了 "compatible" 选项
set nocompatible

"定义当前的操作系统, 使用不同的系统时, 需要手动修改返回值
"返回值可以为 "win32" / "unix"/ "mac"
function! MySys()
    return "win32"
endfunction

"在Vim中执行一些过滤操作需要知道一些shell的有关情况
"如果在使用过滤程序时遇到问题, 可以考虑检查下面一些选项的设置:
"   "shell"         指定Vim用于运行过滤程序的shell
"   "shellcmdflag"  该shell的参数
"   "shellquote"    用于分隔shell与过滤程序时成对包围起过滤程序
"                   的字符
"   "shellxquote"   用于分隔shell与过滤程序和重定向符号时成对包
"                   围起过滤程序和重定向符号的字符
"   "shelltype"     shell的类型(只对Amiga有用
"   "shellslash"    在命令中使用反斜杠(只对MS-Windows)这样的
"                   系统有用
"   "shellredir"    用于将命令输出重定向到文件的字符串
"
"在Unix上使用过滤程序很少会碰到问题, 因为有两种shell: 'sh'派和
"'csh'派. Vim会检查 "shell" 选项看是否包含了'csh'并自动设置相关的
"选项.
"但在windows上,有很多不同的shell,所以你要手工调整这些选项来让过滤
"功能正常动作.请查看上面这些相关选项的帮助以了解更多信息
if MySys() == "unix" || MySys() == "mac"
    "在Unix和类Unix操作系统中使用 "bash" 作为 "shell"
    set shell=bash
else
    "如果是在windows下使用cygwin, 则修改为cynwin的路径
    "set shell=E:cygwininsh
endif

"设置冒号命令和搜索命令的命令历史列表的长度
"历史记录的基本思想是可以用上下箭头键来找回用过的命令.
"
"实际上有四个历史记录, 这里将要提到的是冒号命令历史记录和 "/"
"及 "?" 的搜索命令历史记录, "/" 和 "?"都是搜索命令,所以它们共享
"同一个历史记录, 另外的两类历史记录分别是关于表达式和input()
"函数的输入内容的
"
"假设你用过一次 ":set" 命令, 接着用过10次其他的冒号命令之后又
"想要重复这个 ":set" 命令,你可以按下 ':' 然后按10次上箭头键<Up>,
"更快的办法是:
"   ":set<Up>"
"Vim会回到上一次你以'se'开头的命令去,这样你离':set'命令就更
"近了一些,至少一不用按10次上箭头<Up>了(除非这中间的10个冒号
"也都是':set'命令).
"
"上箭头键<Up>会根据目前的键入的命令部分去跟历史记录进行比较,
"只有符合的才会被列出来.如果没有找到,你还可以用下箭头<Down>
"回到刚才输入的部分命令进行修改,或者用Ctrl-U命令全部删除后
"重来.
"
"要查看所有的历史记录,用命令:
"   ":history"
"列出的是冒号的历史记录,要查看搜索命令的历史记录,用:
"   ":history /"
"
"Ctrl-P效果如同<Up>,唯一的不同是它不会根据你已经键入的部分区
"遍历历史,类似地,<Down>对应物事Ctrl-N"和下箭头键.Ctrl-P代表
"previous,Ctrl-N代表Next
set history=400

"这段命令开启了Vim的三种职能:
"
"1. 自动识别文件类型
"你开始编辑一个文件时,Vim就会自动识别它是何种类型的文件,比
"如说你打开了'main.c',Vim就会根据它的'.c'扩展名知道它是一个
"类型为 "c" 的C语言源程序文件,当你编辑一个文件其第一行是
"'#!bin/sh'时,Vim又可以据此判断它是一个类型为 "sh" 的shell脚
"本文件
"
"2. 用文件类型plugin脚本
"不同的文件类型需要搭配适合它的编辑选项.比如说你在编辑一个
" "c" 文件,那么打开 "cindent" 新非常有用,这些对某种文件类型来
"说最常用的选项可以放在一个Vim中交文件类型plugin的脚本里.
"你还可以加上你自己写的,请参考 "write-filetype-plain".
"
"3. 使用缩进定义文件
"编辑程序的时候,语句的缩进可以让它自动完成.Vim为众多不同的
"文件类型提供了相应的缩进方案.请参考 "filetype-indent-on" 和
" "indentexpr" 选项
filetype on
if has("eval") && v:version>=600
    filetype plugin on
    filetype indent on
endif

"设置当正在编辑的文件被外部的其它程序所修改后自动在Vim加载
if exists("&autoread")
    set autoread
endif

"可以为不同模式分别打开鼠标:
"   "n" 普通模式
"   "v" 可视模式
"   "i" 插入模式
"   "c" 命令行模式
"   "h" 编辑帮助文件时,所有前面的模式
"   "a" 所有前面的模式
"   "r" hit-enter 和 more-prompt 提示时
if exists("&mouse")
    set mouse=a
endif

"定义 "mapleader"变量
"要定义一个使用 "mapleader" 变量的映射,可以使用特殊字串
" "<Leader>".它会被 "mapleader" 的字符串所替代.如果
" "mapleader" 未设置或为空,则用反斜杠代替,例如:
"   ":map <Leader>A oanother line<Esc>"
"和下面一样:
"   :map \A oanother line<Esc>
"但是当:
"   :let mapleader = ","
"时,又相当于:
"   :map ,A oanother line<Esc>
"
"注意: "mapleader" 的值仅当定义映射时被使用.后来改变的
" "mapleader" 不会影响到已定义的映射
let mapleader = ","
let g:mapleader = ","

"设置快速保存
"
" "nmap"表示普通模式下的映射定义,
" ":map" 和 ":map!" 命令为多个模式定义和回显映射.在 Vim 中你可
"以使用 ":nmap", ":vmap", ":omap", ":cmap" 和 ":imap" 命令来对每
"个不同的模式分别定义映射.
"当列出映射时,前面两栏的字符表示 (可有多个):
"   字 符       模 式
"   "<Space>"   普通、可视、选择和操作符等待
"    "n"         普通
"    "v"         可视和选择
"    "s"         选择
"    "x"         可视
"    "o"         操作符等待
"    "!"         插入和命令行
"    "i"         插入
"   "l"         插入、命令行和 Lang-Arg 模式的 ":lmap" 映射
"    "c"         命令行
"
" ":xa!" 保存所有修改过的缓冲区,甚至包括只读的,但后退出Vim.不过,
"如果有无名或者其它元婴写入失败的缓冲区,Vim仍然不会退出.
"
" ":w!" 和 ":w" 类似,但即使 "readonly" 已置位或者有其他原因写入被拒
"绝,还是强制写入.
"注意:这可能会改变文件的权限和所有者,或者破坏(符号)连接.但在
" "cpoptions" 里加上 "W" 标志位可以避免这一点.
nmap <leader>x :xa!<cr>
nmap <leader>w :w!<cr>

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Colors and Font
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"打开语法高亮:
"   ":syntax enable"
"实际上,它只是执行如下命令:
"   ":source $VIMRUNTIME/syntax/syntax.vim"
"
" ":syntax enable" 命令会保持你当前的色彩设置.这样,不管在使用此
"命令的前后,你都可以用 ":highlight" 命令设置你喜欢的颜色.如果你
"希望Vim用缺省值覆盖你自己的,只要用:
"   ":syntax on"
if MySys()=="unix"
    if v:version<600
        if filereadable(expand("$VIM/syntax/syntax.vim"))
            syntax on
        endif
    else
        syntax on
    endif
else
    syntax on
endif

"国际化设置
" "multi_byte" 指韩国语和其他多字节语言支持
if has("multi_byte")
    " "fileencodings" 缺省为 "ucs-bom",这是一个字符编码的列表,开始
    "编辑已存在的文件时,参考此选项.如果文件被读入,Vim尝试使用本
    "列表第一个字符编码.如果检测到错误,使用列表的下一个.如果找
    "到一个能用的编码,设置 "fileencoding" 为该值.如果全部失败,
    " "fileencoding" 设为空字符串,这意味着使用 "encoding" 的值.
    "
    "警告:转换可能导致信息的丢失!如果 "encoding" 为 "utf-8" (或者某
    "个其它的Unicode变种),那么转换的结果通过逆转换很有可能产生
    "相同的文本.相反,如果 "encoding" 不是 "utf-8",一些非ASCII的字符
    "可能会丢失.
    set fileencodings=ucs-bom,utf-8,cp936,big5,euc-jp,euc-kr,latin1
   
    " "v:lang" 运行环境当前的消息locale设置.它使得Vim脚本能得到当
    "前使用的语言.技术细节:这就是LC_MESSAGES的值.该值和系统有关.
    "
    " "=~" 为匹配正则表达式,详细介绍如下表:
    "               使用 "ignorecase"    匹配大小写        忽略大小写 ~
    "等于                   "=="            "==#"            "==?"
    "不等于                 "!="            "!=#"           "!=?"
    "大于                   ">"             ">#"            ">?"
    "大于等于               ">="            ">=#"           ">=?"
    "小于                   "<"             "<#"            "<?"
    "小于等于               "<="            "<=#"           "<=?"
    "匹配正规表达式         "=~"            "=~#"           "=~?"
    "不匹配正规表达式       "!~"            "!~#"           "!~?"
    "相同实例               "is"
    "不同实例               "isnot"
    "
    "设置CJK环境的编码选择
    if v:lang =~ "^zh_CN"
        set encoding=cp936
        set termencoding=cp936
        set fileencoding=cp936
    elseif v:lang =~ "^zh_TW"
        set encoding=big5
        set termencoding=big5
        set fileencoding=big5
    elseif v:lang =~ "^ko"
        set encoding=euc-kr
        set termencoding=euc-kr
        set fileencoding=euc-kr
    elseif v:lang =~ "^ja_JP"
        set encoding=euc-jp
        set termencoding=euc-jp
        set fileencoding=euc-jp
    endif
   
    "在必要的时候,使用utf-8替代CJK的设置
    if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
        set encoding=utf-8
        set termencoding=utf-8
        set fileencoding=utf-8
    endif
endif

if has('gui_running')
    set guifont=InConsolata:h14
endif

" "ambiwidth" 缺省为 "single"
"只有在 "encoding" 和 "utf-8" 或别的Unicode编码时才有效.告诉Vim怎
"么处理东亚二义性宽度字符类(East Asian Width Class Ambiguous)(例
"如欧元符号,注册记号,版权记号,希腊字母,西里尔字母等等)
"
"目前有两个可能的选择:
" "single": 使用和US-ASCII字符相同的宽度.多数用户希望如此.
" "double": 使用US-ASCII字符两倍的宽度
"
"在一些 CJK 字体里,这些字符的字形宽度完全由它们在传统的CJK编码
"里占据字节的数目决定.那些编码中,欧元,注册记号,希腊/西里尔字母
"等占据两个字节,因而它们在这些字体里用'宽'字形显示.这也包括文本
"文件里制表用的一些画线字符.因此如果GUI Vim使用CJK字体,或者在使
"用CJK字体的终端(模拟器)(包括带有 "-cjkwidth" 选项的xterm)里运
"行Vim,应把该选项设为 "double",这样可以匹配这些字体里Vim实际看
"到相关字形的宽度.在Windows 9x/ME 或 Windows 2k/XP 上,如果系统
"locale 为 CJK locale,也应把本选项设为 "double"
if exists("&ambiwidth")
    set ambiwidth=double
endif

" "guioptions" 选项只有在 Vim 的 GUI 版本才有效.它是字母的序
" 列,分别描述 GUI 应该使用的部件和选项.
" 建议使用 ":set" 的 "+=" 和 "-=" 特性,这可以避免未来版本增加
" 新的标志位时出现的问题.

"下面是合法的标志位字母:
"   "a" 自动选择: 如果存在,无论什么时候启动可视模式或者扩展可
"       视区域,Vim 都试图成为窗口系统全局选择区的拥有者.这意
"       味着可以粘贴高亮的可视文本到其它应用程序甚至 Vim 自身.
"       如果因为在文本之上进行了操作,或者应用程序需要粘贴选择
"       区等原因使得可视区域被终止,高亮文本会被自动抽出到 "*"
"       选择寄存器里.这样,即使在可视模式结束以后,选择区仍然可
"       以被粘贴到别的应用程序.
"       如果不存在,Vim 不会成为窗口系统的全局选择区,除非使用
"       "*" 寄存器进行抽出和删除操作,这时该选择区被显式地占有.
"       同样适用无模式的选择.
"
"   "A" 自动选择无模式的选择.类似于 "a",但仅限于无模式的选择.
"       "guioptions"    自动选择可视    自动选择无模式
"           ""              --              --
"           "a"             是              是
"           "A"             --              是
"           "aA"            是              是
"
"   "c" 简单的选择使用控制台对话框而不是弹出式对话框.
"
"   "e" "showtabline" 要求时,加入标签页.
"       "guitablabel" 可用来改变标签文本.
"       如果没有 "e",可能使用非 GUI 标签页行.
"       只有一些系统支持 GUI 标签页,现在包括 GTK, Motif,
"       Mac OS/X 和 MS-Windows.
"
"   "f" 前台: 不用 fork() 从启动外壳分叉出本 GUI 进程.用于
"       需要等待编辑器完成的程序 (例如,e-mail 程序).你也可
"       以用 "gvim -f" 或 ":gui -f" 来在前台启动 GUI.
"       注意: 在 vimrc 文件里设置本选项.读入 gvimrc 文件时
"       分叉操作可能已经发生.
"
"   "i" 使用 Vim 图标.GTK 和 KDE 上它出现在窗口的左上角.在
"       非 GTK 的环境上,因为 X11 的限制,它是黑白的.要得到
"       彩色图标,见 "X11-icon"
"
"   "m" 使用菜单栏
"
"   "M" 不执行系统菜单脚本 "$VIMRUNTIME/menu.vim".
"       注意:本标志位必须在    ".vimrc" 文件里加入,在打开语法
"       或文件类型识别之前 (执行 "gvimrc" 文件时,系统菜单
"       已经载入;而 ":syntax on" 和 ":filetype on" 命令同
"       样会载入菜单).
"
"   "g" 灰色菜单项: 使得不活动的菜单项变灰.如果没有包含 "g",
"       不活动的菜单项完全不显示.
"       特例: Athena 总会使用灰色的菜单项.
"
"   "t" 包含可撕下的菜单项.目前只用于 Win32, GTK+ 和
"       Motif 1.2 GUI.
"
"   "T" 包含工具栏.目前只用于 Win32, GTK+, Motif, Photon
"       和 Athena GUI.
"
"   "r" 右边的滚动条总是存在.
"
"   "R" 如有垂直分割的窗口,右边的滚动条总是存在.
"
"   "l" 左边的滚动条总是存在.
"
"   "L" 如有垂直分割的窗口,左边的滚动条总是存在.
"
"   "b" 底部的 (水平) 滚动条总是存在.它的大小取决于最长的可
"       见行,或者如果包含 'h' 标志位的话,光标所在的行.详情
"       可见 "gui-horiz-scroll"
"
"   "h" 限制水平滚动条的大小为光标所在行的长度,以减少计算量.
"       是的,如果你真的想要,左右两边都可以有滚动条.详情可见
"       "gui-scrollbars"
"
"   "v" 对话框使用垂直的按钮布局.如果不包含,倾向使用水平布
"       局,但如果空间不够,还是用垂直的布局.
"
"   "p" 使用 X11 GUI 的指针回调.有些窗口管理器需要.如果光标
"       不闪烁或者在一定场合下变空,考虑增加此标志位.必须在
"       启动GUI 之前完成.在你的 "gvimrc" 里设置.在 GUI 启动
"       后增加或删除不会有任何效果.
"
"   "F" 增加信息页脚.只适用于 Motif.见 "gui-footer".
if has("gui_running")
    set guioptions-=m   " 关闭菜单栏
    set guioptions-=T   " 关闭工具栏
    set guioptions-=l   " 关闭左边滚动条
    set guioptions-=L   " 关闭垂直分隔窗口左边滚动条
    set guioptions-=r   " 关闭右边滚动条
    set guioptions-=R   " 关闭垂直分隔窗口右边滚动条

if MySys()=="win32"
        " "autocmd" / "au" 定义自动命令
        "注意: ":autocmd" 命令不能有其他命令紧跟其后,因为"|"
        "命令是该命令的一个组成部分.
        "
        " ":au[tocmd] [group] {event} {pat} [nested] {cmd}"
        "把 {cmd} 加到 Vim 在匹配 {pat} 模式的文件执行 {event}
        "事件时自动执行的命令列表.Vim 把 {cmd} 加到已有的自动
        "命令之后,从而使自动命令的执行顺序与其定义的顺序相同.
        "关于 [nested],参见 "autocmd-nested".

"注意 ":autocmd" 的参数里的特殊字符 (例如, "%", "<cword>")
        "在定义时不会被扩展,而是在事件发生并执行 {cmd} 的时候才
        "进行.唯一的例外是 "<sfile>" 在定义时扩展.
        "
        " "GUIEnter" 成功启动 GUI 并打开窗口后自动命令事件.用
        " gvim 的时候,它在 VimEnter 之前发生.在 .gvimrc 里可用
        " 它来定位窗口:
        "   ":autocmd GUIEnter * winpos 100 50"
        "
        " "si" / "simalt" 模拟 Alt-{key} 组合键.
        " ":si[malt] {key}"
        " {仅适用 Win32 版本}
        "
        "正常情况下,为了增加键映射 (map) 的数量,Vim 控制所有
        "Alt-{key} 组合键.但是这样做可能与用 Alt-{key} 访问菜单
        "的标准方法冲突.一个快速的解决办法是:设置 "winaltkeys"
        "选项的值为 "yes".但是这样阻止了所有与Alt 键有关的映射.
        "另一个办法是:设置 "winaltkeys" 选项为 "menu".这样与菜
        "单有关的快捷键有 Windows 管理,其余的与 Alt 相关的映射
        "仍然好用.但这样又产生了对当前状态的依赖性.
        "要解决这个问题,就要用 ":simalt" 命令告诉 Vim
        "( "winaltkeys" 不要设置为 "yes") 虚拟一个 Windows 风
        "格的 Alt 按键行为.你可以用它来映射 Alt 组合键 (或者任
        "何其它键) 来产生标准的 Windows 操作.下面是一些例子:
        "   ":map <M-f> :simalt f<CR>"
        "这个命令通过把 Alt-F 映射为模拟按键的 Alt 和 F,使你按
        "下 Alt-F 时弹出 "文件" 菜单 (对于缺省的 Menu.vim 而言)
        "   ":map <M-Space> :simalt ~<CR>"
        "这个命令通过映射 Alt-Space 弹出 Vim 窗口的系统菜单.
        "注意: ~ 在 simalt 命令里代表 <Space> (空格).
        "   ":map <C-n> :simalt ~n<CR>"
        "把 CTRL-N 映射成 Alt-Space + N.也就是打开窗口的系统菜
        "单,然后按 N,最小化 Vim窗口
        "
        "这个选项是模拟弹出菜单中使用最大化的快捷键 "x"
        if has("autocmd")
            au GUIEnter * simalt ~x
        endif
    endif

" "colorscheme" / "colo" 载入色彩方案
    " ":colo[rscheme] {name}"
    "载入色彩方案 {name}.
    "它会在 'runtimepath' 里搜索 "colors/{name}.vim",载入第一
    "个找到的文件.
    "要看到当前激活的色彩方案的名字 (如果有的话):
    "   ":echo g:colors_name"
    "它不能递归调用,所以你不能在色彩方案脚本里使用 ":colorscheme"
    "色彩方案载入后"激活 "ColorScheme" 自动命令事件.关于如何
    "编写色彩方案文件的信息:
    "   ":edit $VIMRUNTIME/colors/README.txt"
    if v:version > 601
        colorscheme torte
    endif
else
    if v:version > 601
        colorscheme torte
    endif
endif

"当打开的文档中含有多种语言的时候,单一使用某一种文件类型的高亮
"方式必然会非常难看,比如说一个介绍J2EE的文件,里面必然有Java的代
"码,也会存在很多XML的代码,这个时候需要随时切换不同的高亮方案
map <Leader>1 :set syntax=java<CR>
map <Leader>2 :set syntax=c<CR>
map <Leader>3 :set syntax=xhtml<CR>
map <Leader>4 :set syntax=python<CR>
map <Leader>5 :set ft=javascript<CR>
map <Leader>0 :syntax sync fromstart<CR>

"用 "cursorline" 高亮光标所在的屏幕行.用于方便定位光标.屏幕刷新
"会变慢.
"激活可视模式时,为了容易看到选择的文本,不使用此高亮.
if has("gui_running")
    if exists("&cursorline")
        set cursorline
    endif
endif

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Fileformat
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" "fileformats" / "ffs"
"给出换行符(<EOL>)的格式,开始编辑新缓冲区或者读入文件到已有的缓
"冲区时,尝试这些格式:
"   -   如果为空,总是使用 "fileformat"定义的格式.不自动设置该选项.
"   -   如果设为一个名字,总是为打开的新缓冲区使用该格式,也为该缓
"       冲区相应地设置 "fileformat".文件读入已有的缓冲区时,使用
"       "fileformats" 给出的名字,不管该缓冲区设定的 "fileformat"
"       是什么.
"   -   如果给出多于一个以逗号分隔的名字,读入文件时会进行自动
"       <EOL>检测.
"       开始编辑文件时,这样检查 <EOL>:
"       1.  如果所有行都以 <CR><NL> 结尾,而 "fileformats" 包含
"           "dos" 的话, "fileformat" 设为 "dos".
"       2.  如果找到一个<NL>而 "fileformats" 包含 "unix"的话,
"           "fileformat"设为 "unix".注意 如果找到的 <NL> 没有前
"           导 <CR>, "unix" 比 "dos" 优先.
"       3.  如果 "fileformats" 包含 "mac". "fileformat" 设为 "mac".
"           这意味着 "mac" 只有在没有给出 "unix" 或者在文件里没有
"           找到 <NL>,并且没有给出 "dos" 或者没有在文件里找到
"           <CR><NL> 时才会使用.如果先选择 "unix",但第一个 <CR> 出
"           现在第一个 <NL> 之前,而文件里的 <CR> 比 <NL> 多的话,
"           "fileformat" 也设为 "mac".
"       4.  如果还是不能设置 "fileformat",使用 "fileformats" 的第
"           一个名字.
"   读入文件到已有的缓冲区时,完成相同的步骤,但如同 "fileformat"
"   已经为该文件合适地设置过,不改变该选项.
"如果置位 "binary",不使用 "fileformats" 的值.
"
" 对于使用 DOS 类型的 <EOL> (<CR><NL>) 的系统来说,读入待执行的脚本
"( ":source" ) 或者 vimrc 文件时,可能进行自动 <EOL> 的检测:
"   -   如果 "fileformats" 为空,没有自动检测.使用 DOS 格式.
"   -   如果 "fileformats" 设为一到多个名字,进行自动检测.它基于文
"       件中的第一个 <NL>: 如果在它之前有一个 <CR>,使用 DOS 格式,
"       不然,使用 Unix格式.
"   另见 |file-formats|.
"为了后向兼容: 如果设置此选项为空字符串或者单一格式 (没有包含逗号),
"复位 "textauto",否则置位 "textauto".
"注意: 如果置位 "compatible",本选项被设为 Vi 的缺省值.相反,如果复位
" "compatible",本选项被设为 Vim 的缺省值.
set fileformats=unix,dos,mac

"给出当前缓冲区的 <EOL> 格式,用于从文件读入缓冲区和把缓冲区写回文件:
"   "dos"       <CR> <NL>
"   "unix"      <NL>
"   "mac"       <CR>
"
"MS-DOS,MS-Windows,OS/2 的缺省: "dos",
"Unix 缺省: "unix",
"Macintosh 缺省: "mac"
"
"如果使用 "dos",文件尾的 CTRL-Z 被忽略.
"见 "file-formats" 和 "file-read|"
"文件使用的字符编码见 "fileencoding".
"如果设置 "binary",忽略 "fileformat" 的值.文件输入/输出如同它被设为
" "unix" 那样.
"文件开始编辑时,如果 'fileformats' 非空而 'binary' 关闭,本选项被
"自动设置.
"开始编辑文件后,如果设置该选项, "modified" 选项被置位,因为文件被认为
"和当初写入时已经不同.
"本选项在 "modifiable" 关闭时不能改变.
"
"为了后向兼容: 如果本选项设为 "dos",置位 "textmode",否则,复位之.
"
"这里的意思是定义快速转换文件格式的快捷键映射
nmap <leader>fd :set ff=dos<cr>
nmap <leader>fu :set ff=unix<cr>
nmap <leader>fm :set fm=unix<cr>

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => VIM userinterface
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" "scrolloff" / "so"    (缺省为 0) 光标上下两侧最少保留的屏幕行数
"这使你工作时总有一些可见的上下文.我们这里设置的主要用处其实是
"可以用鼠标单击屏幕的前N行或者后N行来直接进行屏幕的上下滚动.对
"于习惯了鼠标操作的用户来说将会非常的方便.
"
"如果你设置此选项为很大的值 (比如 999),光标所在的行将总定位在
"窗口的中间位置 (除非你非常靠近文件开始或者结束的地方,或者有长
"行回绕).
"水平滚动见 'sidescrolloff'.
"注意: 如果置位 'compatible',该选项被设为 0.
set so=0

" "wildmenu" / "wmnu"   (缺省关闭) 命令行补全以增强模式运行
" {仅当编译时加入 "+wildmenu" 特性才有效}
" "wildmenu" 打开时,命令行补全以增强模式运行,按下 "wildchar"
" (通常是 <Tab>) 启动补全.这时,在命令行的上方显示可能的匹配,
" 然后高亮首个匹配 (如果有状态行,覆盖之).显示前项/后项匹配的
" 热键,如 <Tab> 或 CTRL-P/CTRL-N,移动高亮到合适的匹配上.
"
" 使用 "wildmode" 时,指定 "full" 会启用 "wildmenu" 模式.
" "longest" 和 "list" 则不会启动 "wildmenu" 模式.
"
" 如果多个匹配超过一行,在右侧显示 ">" 和/或在左侧显示 "<".需
" 要的话,滚动状态行.
"按下不用于选择补全项的键时,放弃 "wildmenu" 模式.
"
" "wildmenu" 激活时,下面的键有特殊含义:
"   "<Left>" / "<Right>"    选择前项/后项匹配 (类似于
"                           CTRL-P/CTRL-N)
"   "<Down>"                文件名/菜单名补全中: 移进子目录
"                           和子菜单.
"   "<CR>"                  菜单补全中,如果光标在句号之后:
"                           移进子菜单.
"   "<Up>"                  文件名/菜单名补全中: 上移到父目
"                           录或父菜单.
"
"这使得控制台上有菜单可用 "console-menus"
"如果你喜欢 <Left> 和 <Right> 键移动光标而不是选择不同的匹
"配,用:
"   ":cnoremap <Left> <Space><BS><Left>"
"   ":cnoremap <Right> <Space><BS><Right>"
"
" "WildMenu" 高亮用于显示当前匹配 "hl-WildMenu".
set wildmenu

" "ruler" / "ru" (缺省关闭) 标尺
" {仅当编译时加入 "+cmdline_info" 特性才有效}
"显示光标位置的行号和列号,逗号分隔.如果还有空间,在最右端显
"示文本在文件中的相对位置:
"   "Top"   首行可见
"   "Bot"   末行可见
"   "All"   首末两行都可见
"   "45%"   文件中的相对位置
"如果设置 "rulerformat",它决定标尺的内容.
"每个窗口都有自己的标尺.如果窗口有状态行,标尺在那里显示.否
"则,它显示在屏幕的最后一行上.如果通过 "statusline" 给出状
"态行 (亦即,非空),该选项优先于 "ruler" 和 "rulerformat".
"如果显示的字符数不同于文本的字节数 (比如,TAB 或者多字节字
"符),同时显示文本列号 (字节数) 和屏幕列号,以连字符分隔.
"空行显示 "0-1"
"空缓冲区的行号也为零: "0,0-1"
"如果置位 "paste" 选项,本选项被复位.
"如果你不想一直看到标尺但想知道现在在哪里,使用 "g CTRL-G"
"注意: 如果置位 "compatible",该选项被复位
set ruler

" "cmdheight" / "ch" (缺省为 1)    命令行使用的屏幕行数
"有助于避免 "hit-enter" 提示.
"此选项值保存在每个标签页里,从而每个标签页可有不同的值.
set cmdheight=2

" ":nu" / ":number" 显示行号
" ":[range]nu[mber] [count] [flags]"
"和 ":print" 相同,但每行之前显示行号 (也参见 "highlight"
"和 "numberwidth" 选项).
set nu

" "lazyredraw" / "lz"   (缺省关闭)
"如果置位本选项,执行宏,寄存器和其它不通过输入的命令时屏
"幕不会重画.另外,窗口标题的刷新也被推迟.要强迫刷新,使用
" ":redraw".
set lz

" "hidden" / "hid"  (缺省关闭)
"如果关闭, "abandon" 放弃时卸载缓冲区.如果打开, "abandon"
"放弃时隐藏缓冲区.当然,如果缓冲区仍然在别的窗口里显示,
"它不会被隐藏.
"在缓冲区列表里移动的命令有时会隐藏缓冲区,即使关闭 "hidden"
"选项也是如此,条件是: 缓冲区被修改过, "autowrite" 关闭
"或者不能写入,并且使用 "!" 标志位.另见 "windows.txt".
"
"如果只想隐藏一个缓冲区,使用 "bufhidden" 选项.
" ":hide {command}" 为单个命令关闭本选项 ":hide".
"警告: 对隐藏缓冲区的修改很容易忘记. ":q!" 或 ":qa!" 时
"三思而后行!
set hid

" "backspace" / "bs" (缺省为 "")
"影响 <BS>,<Del>,CTRL-W 和 CTRL-U 在插入模式下的工作方
"式.它是逗号分隔的项目列表.每个项目允许一种退格删除的内
"容:
"   值            效果
"   "indent"    允许在自动缩进上退格
"   "eol"       允许在换行符上退格 (连接行)
"   "start"     允许在插入开始的位置上退格;CTRL-W 和
"               CTRL-U 到达插入开始的位置时停留一次.
"
"如果该值为空,使用 Vi 兼容的退格方式.
"
"为了和 5.4 及更早的版本后向兼容:
"   值          效果
"   "0"         等同于 ":set backspace=" (Vi 兼容)
"   "1"         等同于 ":set backspace=indent,eol"
"   "2"         等同于 ":set backspace=indent,eol,start"
"
"如果你的 <BS> 或 <Del> 键不合你的期望,见 ":fixdel".
"注意: 如果置位 "compatible",该选项被设为 "".
set backspace=eol,start,indent

" "whichwrap" / "ww"    (Vim 缺省: "b,s",Vi 缺省: "")
"使指定的左右移动光标的键在行首或行尾可以移到前一行
"或者后一行.连接这些字符,可以让所有指定的键都有此功能:
"       字符    键          模式
"       "b"    <BS>         普通和可视
"       "s"    <Space>      普通和可视
"       "h"    "h"          普通和可视 (不建议)
"       "l"    "l"          普通和可视 (不建议)
"       "<"    <Left>       普通和可视
"       ">"    <Right>      普通和可视
"       "~"    "~"          普通
"       "["   <Left>        插入和替换
"       "]"    <Right>      插入和替换
"只允许光标键进行回绕.
"如果移动键和删除和改变操作符一起使用时,<EOL> 也被看作一个
"字符.这使得光标跨过行尾时, "3h" 和 "3dh" 效果不同."这也适
"用于 "x" 和 "X",因为它们分别和 "dl" 以及 "dh" 相同.如果这
"么用,你可能想用映射 ":map <BS> X"来使退格"键删除光标之前的
"字符.
"如果包含 'l',位于行尾时如果在操作符之后使用它,不会移动到下
"一行.这样 "dl", "cl", "yl" 等都能正常工作.
"注意: 如果置位 "compatible",本选项被设为 Vi 的缺省值.相反,
"如果复位 "compatible",本选项被设为 Vim 的缺省值.
set whichwrap+=<,>,h,l

" "incsearch" / "is"    (缺省关闭)
"{仅当编译时加入 "+extra_search" 特性才有效}
"输入搜索命令时,显示目前输入的模式的匹配位置.
"匹配的字符串被高亮.如果该模式不合法或者没有匹配,不显示任何
"东西.屏幕会经常刷新,所以只有对快速终端,这才有意义.
"注意:会显示匹配,但如果找不到匹配和按 <Esc> 的时候,光标会回
"到原来的位置.你仍然需要用 <Enter> 完成搜索命令才会移动光标
"到匹配位置.
"编译时加入 "+reltime" 特性时,Vim 只会搜索大概半秒钟.如果模
"式太过复杂和/或有很多文本存在,不一定能找到匹配.这是为了避免
"Vim 在输入模式的时候挂起.
"
"可以用 "highlight" 的 "i" 标志位设置高亮.另见: "hlsearch".
"   "CTRL-L" 可用来在命令行上给当前匹配之后增加一个字符.
"   "CTRL-R" / "CTRL-W" 可用来在当前匹配的尾部增加单词,排除
"                       已经输入的部分.
"注意: 如果置位 "compatible",该选项被复位.
set incsearch

"某些字符在模式中是按本义出现的.它们匹配自身.然而,当前面有一
"个反斜杠时,这些字符具有特殊的含义.
"
"另外一些字符即使没有反斜杠也代表特殊的意思,它们反而需要一个
"反斜杠来匹配按本义出现的自身.
"
"一个字符是否按本义出现取决于 "magic" 选项以及下面将解释的条
"目.
"使用 "\m" 会使得其后的模式的解释方式就如同设定了 "magic" 选
"项一样.而且将忽略 "magic" 选项的实际值.
"使用 "\M" 会使得其后的模式的解释方式就如同设定了 "nomagic"
"选项一样.
"
"使用 "\v" 会使得其后的模式中所有 '0'-'9','a'-'z','A'-'Z'
"和 '_' 之外的字符都当作特殊字符解释.
"使用 "\V" 会使得其后的模式中只有反斜杠有特殊的意义.
"
"示例:
"在这之后:  \v      \m      \M      \V      匹配
"                 'magic' 'nomagic'
"           $       $       $       \$      匹配行尾
"           .       .       \.      \.      匹配任何字符
"           *       *       \*      \*      前面匹配原的任意次重复
"           ()      \(\)    \(\)    \(\)    组成为单个匹配原
"           |       \|      \|      \|      分隔可选分支
"           \a      \a      \a      \a      字母字符
"           \\      \\      \\      \\      反斜杠 (按本义)
"           \.      \.      .       .       英文句号 (按本义)
"           \{      {       {       {       '{' (按本义)
"           a       a       a       a       'a' (按本义)
"
"{仅 Vim 支持 \m,\M,\v 和 \V}
"
"建议始终将 "magic"选项保持在缺省值 - "magic".这可以避免移
"植性的麻烦.要使模式不受该选项值的影响,在模式前面加上 "\m"
"或 "\M".
set magic

"设置Vim静音
" "errorbells" / "eb" (缺省关闭)
"错误信息响铃 (鸣叫或屏幕闪烁).只有对错误信息有意义.很多没有消息的错误
"也会使用该响铃 (比如,普通模式里按 <Esc>).
"
" "visualbell" / "vb" (缺省关闭)
"使用可视响铃代替鸣叫.显示可视响铃的终端代码由 "t_vb" 给出.如果既不想
"要响铃也不想要闪烁,使用 ":set vb t_vb=".
"注意: GUI 启动时,'t_vb' 复位为缺省值.你可能想在 |gvimrc| 里再次设置之.
"在 GUI 里, "t_vb" 缺省为 "<Esc>|f",反转显示 20 毫秒.如果你想使用别的
"时间,可设 "<Esc>|40f",其中 40 是毫秒计的时间.
"在 Amiga 上没有用,你总会得到屏幕闪烁.
set noerrorbells
set novisualbell
set t_vb=

" "showmatch" / "sm"    (缺省关闭)
"插入括号时,短暂地跳转到匹配的对应括号.只有在屏幕上能看到匹配时才会进
"行跳转.显示匹配的时间用 "matchtime" 设置.
"如果没有匹配会响铃 (和匹配能否看到无关).置位 "paste" 时,复位本选项.
"如果 "cpoptions" 里没有 "m" 标志位,接着输入字符会立即把光标移动到它应
"该在的位置.
" "guicursor" 的 "sm" 域说明显示匹配时,如何设置光标形状和闪烁.
" "matchpairs" 选项可指定显示匹配所用的字符.用 "rightleft" 和 "revins"
"查找反方向的匹配.
"移动时要高亮匹配,另见 matchparen 插件 "pi_paren.txt".
set showmatch

" "matchtime" / "mat"   (缺省为 5)
"如果置位 'showmatch',显示配对括号的十分之一秒数.
"注意 这不是毫秒数.
set mat=4

" "hlsearch" / "hls"    (缺省关闭)
"{仅当编译时加入 "+extra_search" 特性才有效}
"如果有上一个搜索模式,高亮它的所有匹配.使用高亮的类型可以用 "highlight"
"选项的 "l" 位设置.缺省,使用 "Search" 高亮组.
"注意: 只有匹配的文本被高亮,位移此处不予考虑.
"另见: "incsearch" 和 ":match".
"
"如果你厌倦总是看到高亮匹配,用 ":nohlsearch" 或者 ":noh" 可以暂时关闭.
"一旦使用搜索命令,高亮会重新出现.
"
" "redrawtime" 指定寻找匹配会花费的最大时间.
"如果搜索模式可以匹配换行符,Vim 会试图高亮所有的匹配文本.不过,这依赖
"于搜索从哪里开始.如果是窗口的第一行,或者关闭折叠之下的第一行,那么从
"它们不会显示的上一行开始的匹配不会在新显示的行上继续.
"注意: 如果置位 "compatible",该选项被复位.
set hlsearch

""""""""""""""""""""""""""""""
" => Statusline
""""""""""""""""""""""""""""""
"格式化状态栏
if performance_mode
else
    " "laststatus" / "ls" (缺省为 1)
    "本选项的值影响最后一个窗口何时有状态行:
    "   "0" 永不
    "   "1" 只有在有至少两个窗口时
    "   "2" 总是
    "如果你有多个窗口,有状态行会使屏幕看起来好一些,但它会占据一个屏幕行.
    set laststatus=2

" "statusline" / "stl"  (缺省为空)
    "{仅当编译时加入 "+statusline" 特性才有效}"
    "如果非空,本选项决定状态行的内容.另见 "status-line"
    "
    "此选项包含 printf 风格的 '%' 项目,中间可以间杂普通文本.每个状态行项
    "目有如下形式:
    "   "%-0{minwid}.{maxwid}{item}"
    "除了 {item} 以外,每个字段都是可选的.单个百分号可以用 "%%" 给出.最多
    "可给出 80 个项目.
    "
    "如果此选项以 "%!" 开始,它用作表达式.计算此表达式的结果用作选项值.例
    "如:
    "   ":set statusline=%!MyStatusLine()"
    "返回值可以包含 %{} 项目,它还会被继续计算下去.
    "
    "如果计算选项时有错误,会把它清空以防将来继续出错.否则屏幕更新会陷入循
    "环.
    "
    "注意 如果设置本选项 (并且 "laststatus" 为 2 的话), "ruler" 的唯一效
    "果是控制 "CTRL-G" 的输出.
    "
    "   域          含义
    "   "-"            左对齐项目.如果 minwid 大于项目的长度,缺省是右对齐.
    "   "0"         数值项目前面用零填补. '-' 更优先.
    "   "minwid"    项目的最小宽度,以 '-' 和 '0' 补空.该值不能超过 50.
    "   "maxwid"    项目的最大宽度.如果超过,在文本项目的左侧截短,以'<'代
    "               替.数值项目则往下移到 maxwid-2 个数位,然后跟 '>'number,
    "               其中的 number 是丢失的数位,这非常类似于指数记法.
    "   "item"      单个字符的代码,下面给出描述.
    "
    "下面是可能状态行项目的描述.其中,"项目" 的第二个字符代表类型:
    "   "N" 代表数值型
    "   "S" 代表字符串型
    "   "F" 代表下面描述的标志位
    "   "-" 不适用
    "
    "项目   含义
    "f S    缓冲区的文件路径,保持输入的形式或相对于当前目录.
    "F S    缓冲区的文件完整路径.
    "t S    缓冲区的文件的文件名 (尾部).
    "m F    修改标志位,文本是 "[+]";若 "modifiable" 关闭则是 "[-]".
    "M F    修改标志位,文本是 ",+" 或 ",-".
    "r F    只读标志位,文本是 "[RO]".
    "R F    只读标志位,文本是 ",RO".
    "h F    帮助缓冲区标志位,文本是 "[help]".
    "H F    帮助缓冲区标志位,文本是 ",HLP".
    "w F    预览窗口标志位,文本是 "[Preview]".
    "W F    预览窗口标志位,文本是 ",PRV".
    "y F    缓冲区的文件类型,如 "[vim]".见 "filetype".
    "Y F    缓冲区的文件类型,如 ",VIM".见 "filetype'".
    "       {仅当编译时加入 "+autocmd" 特性才有效}
    "k S    "b:keymap_name" 的值或使用 ":lmap" 映射时的 "keymap":
    "       "<keymap>".
    "n N    缓冲区号.
    "b N    光标所在字节的值.
    "B N    同上,以十六进制表示.
    "o N    光标所在字节在文件中的字节偏移,第一个字节为 1.
    "       助记: 从文件开始的偏移 (Offset) (加上 1)
    "       {仅当编译时加入 "+byte_offset" 特性才有效}
    "O N    同上,以十六进制表示.
    "N N    打印机页号.(只用于 'printheader" 选项.)
    "l N    行号.
    "L N    缓冲区里的行数.
    "c N    列号.
    "v N    虚拟列号.
    "V N    虚拟列号,表示为 -{num}.如果等于 "c" 的值,不显示.
    "p N    行数计算在文件位置的百分比,如同 "CTRL-G" 给出的那样.
    "P S    显示窗口在文件位置的百分比,类似于 "ruler" 描述的百分比.长度
    "       总是为 3.
    "a S    参数列表状态,就像缺省标题里的那样.({current} of {max})
    "       如果参数列表里的文件数为零或一,空字符串.
    "{ NF   计算 "%{" 和 "}" 之间的表达式,并返回其结果替代.注意 结束的
    "       "}" 之前没有 "%".
    "( -    项目组的开始.可以用来为某组项目设置宽度和对齐.后面某处必须有
    "       "%)".
    ") -    项目组的结束.不能指定宽度域.
    "T N    用于 'tabline': 标签页 N 标签的开始.最后一个标签之后用 "%T".
    "       鼠标点击时用此信息.
    "X N    用于 "tabline": 关闭标签页 N 标签的开始.最后一个标签之后用
    "       "%T".
    "       例如: "%3Xclose%X",用 "%999X" 来代表 "关闭当前标签页" 那个符
    "       号.鼠标点击时用此信息.
    "< -    如果行过长,在什么地方截短.缺省是在开头.不能指定宽度域.
    "= -    左对齐和右对齐项目之间的分割点.不能指定宽度域.
    "# -    设置高亮组.必须后面跟名字,然后又是 "#".这样, "%#HLname#" 代
    "       表高亮组 HLname.包括非当前窗口的状态行都使用相同的高亮组.
    "* -    设置高亮组为 User{N},其中的 {N} 取自 minwid 域,比如 %1*.用
    "       %* 或者 %*0 可以恢复 normal 高亮.User{N} 和 StatusLine 的区
    "       别也会应用到非当前窗口的状态行使用的 StatusLineNC 上.
    "       数字 N 必须从 1 到 9.见 "hl-User1..9"
    "
    "显示标志位时,如果它紧跟在普通文本之后,Vim 删除之前的前导逗号.这使得
    "下面例子里使用的标志位显示看起来很舒服.
    "
    "如果组内的所有项目都是空字符串 (比如,标志位没有设置) 而该组没有设置
    "minwid,整个组成为空字符串.这使得下面这样的组完全从状态行上消失,如果
    "没有标志位被置位的话.
    "   ":set statusline=...%(\ [%M%R%H]%)..."
    "要小心,每次显示状态行时都要计算此表达式.当前缓冲区和当前窗口会临时设
    "为目前要显示的状态行所属的窗口 (缓冲区),而表达式会使用此上下文计算.
    "变量 "actual_curbuf" 被设为实际的当前缓冲区的 "bufnr()" 号.
    "
    "可能在沙盘 "sandbox" 里计算 "statusline" 选项.见 "sandbox-option".
    "
    "计算 "statusline" 时不允许修改文本或者跳到其它窗口 "textlock".
    "
    "如果状态行在你希望时没有更新 (如在设置完表达式里使用的某变量之后),设
    "置选项可以强制进行更新而无须更改其值.例如:
    "   ":let &ro = &ro"
    "
    "如果结果全是数字,用作显示时把它作为数值处理.否则结果作为文本,并应用
    "上面描述的规则.
    "
    "小心表达式里的错误.它们可能使 Vim 不可用!
    "如果你被困住,按住 ':' 或 'Q' 来得到提示,然后退出并用 "vim -u NONE"
    "来编辑 .vimrc 或者别的什么地方,以修正问题.
    "
    "示例:
    "模拟 "ruler" 设置的标准状态行
    "   ":set statusline=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P"
    "类似,但加上光标所在字符的 ASCII 值 (类似于 "ga")
    "   ":set statusline=%<%f%h%m%r%=%b\ 0x%B\ \ %l,%c%V\ %P"
    "显示字节偏移和字节值,用红色标记已修改标志位.
    "   ":set statusline=%<%f%=\ [%1*%M%*%n%R%H]\ %-19(%3l,%02c%03V%)%O'%02b'"
    "   ":hi User1 term=inverse,bold cterm=inverse,bold ctermfg=red"
    "如果载入的是压缩文件,显示 ,GZ 标志
    "   ":set statusline=...%r%{VarExists('b:gzflag','\ [GZ]')}%h..."
    "并在 |:autocmd| 里:
    "   ":let b:gzflag = 1"
    "或:
    "   ":unlet b:gzflag"
    "还要定义此函数:
    "   ":function VarExists(var, val)"
    "   ":    if exists(a:var) | return a:val | else | return '' | endif"
    "   ":endfunction"
    set statusline=
    set statusline+=%2*%-3.3n%0*\   "缓冲器名
    set statusline+=%f\             "文件名
    set statusline+=%h%1*%m%r%w%0*  "标记符
    set statusline+=[
    if v:version >= 600
        set statusline+=%{strlen(&ft)?&ft:'none'},  "文件类型
        set statusline+=%{&encoding},               "编码类型
    endif
    set statusline+=%{&fileformat}]                 "文件格式
    if filereadable(expand("$VIM/vimfiles/plugin/vimbuddy.vim"))
        set statusline+=\ %{VimBuddy()}             "添加VimBuddy插件
        "这个插件会在状态栏上加一个笑脸,鼻子会随着光标移动而改变
    endif
    set statusline+=%=                              "左右对齐的分割点
    set statusline+=%F\                             "文件的完整路径
    set statusline+=%2*0x%-8B\                      "16进制表示当前字符
    set statusline+=%-14.(%l,%c%V%)\ %<%P           "偏移量

" special statusbar for special windows
    if has("autocmd")
        au FileType qf
                    \ if &buftype == "quickfix" |
                    \ setlocal statusline=%2*%-3.3n%0* |
                    \ setlocal statusline+=\ \[Compiler\ Messages\] |
                    \ setlocal statusline+=%=%2*\ %<%P |
                    \ endif

fun! FixMiniBufExplorerTitle()
            if "-MiniBufExplorer-" == bufname("%")
                setlocal statusline=%2*%-3.3n%0*
                setlocal statusline+=\[Buffers\]
                setlocal statusline+=%=%2*\ %<%P
            endif
        endfun

if v:version>=600
            au BufWinEnter *
                        \ let oldwinnr=winnr() |
                        \ windo call FixMiniBufExplorerTitle() |
                        \ exec oldwinnr . " wincmd w"
        endif
    endif

" "titlestring" (缺省为 "") 设置窗口标题栏
    "{仅当编译时加入 "+title" 特性才有效}
    "如果此选项不为空,用来设置窗口的标题.只有在 "title" 选项打开时才会发
    "生.
    "只有终端支持设置窗口标题时才可用 (目前有 Amiga 控制台,Win32 控制台,
    "所有的 GUI 版本和带有非空的 "t_ts" 选项的终端).
    "如果 Vim 编译时定义 HAVE_X11,在可能的情况下恢复原来的标题 "X11".
    "如果本选项包含 printf 风格的 "%" 项目,依照 "statusline" 使用的规则
    "进行扩展.
    "例如:
    "   ":auto BufEnter * let &titlestring = hostname() . "/" . expand("%:p")"
    "   ":set title titlestring=%<%F%=%l/%L-%P titlelen=70"
    " "titlelen" 的值用来在可用空间的中间或右侧对齐项目.
    "有的人喜欢文件名放在前面:
    " ":set titlestring=%t%(\ %M%)%(\ (%{expand(\"%:~:.:h\")})%)%(\ %a%)"
    "注意 "%{ }" 的使用,以及用于得到不含文件名的文件名路径的表达式.只有在
    "必要时, "%( %)" 构造才会加入分隔的空格.
    "注意: "titlestring" 使用特殊字符可能会使显示引起混乱 (比如,如果它包含
    "CR 或者 NL 字符的话).
    "{仅当编译时加入 "+statusline" 特性才有效}
    if has('title') && (has('gui_running') || &title)
        set titlestring=
        set titlestring+=%f\                "文件名
        set titlestring+=%h%m%r%w           "标记符
        set titlestring+=\ -\ %{v:progname} "程序名
    endif
endif

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Moving around and tab
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"Map space to /
map <space> /

"为窗口跳转重新定义键映射
map <C-j> <C-W>j
map <C-k> <C-W>k
map <C-h> <C-W>h
map <C-l> <C-W>l

"Tab configuration
map <leader>tn :tabnew %<cr>
map <leader>tc :tabclose<cr>
map <leader>tm :tabmove

if v:version>=700
    set switchbuf=usetab
endif

if exists("&showtabline")
    set stal=2
endif

"Moving fast to front, back and 2 sides ;)
imap <m-$> <esc>$a
imap <m-0> <esc>0i
imap <D-$> <esc>$a
imap <D-0> <esc>0i

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => General Autocommand
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"Switch to current dir
map <leader>cd :cd %:p:h<cr>

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Parenthesis/bracket expanding
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
vnoremap $1 <esc>`>a)<esc>`<i(<esc>
")
vnoremap $2 <esc>`>a]<esc>`<i[<esc>
vnoremap $3 <esc>`>a}<esc>`<i{<esc>
vnoremap $$ <esc>`>a"<esc>`<i"<esc>
vnoremap $q <esc>`>a'<esc>`<i'<esc>
vnoremap $w <esc>`>a"<esc>`<i"<esc>

"Map auto complete of (, ", ', [
"http://www.vim.org/tips/tip.php?tip_id=153
"

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => General Abbrev
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"Comment for C like language
if has("autocmd")
    au BufNewFile,BufRead *.js,*.htc,*.c,*.tmpl,*.css ino $c /**<cr> **/<esc>O
endif

"My information
ia xdate <c-r>=strftime("%d/%m/%y %H:%M:%S")<cr>
"iab xname Amir Salihefendic

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Editing mappings etc.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"Remap VIM 0
map 0 ^

"Move a line of text using control
nmap <M-j> mz:m+<cr>`z
nmap <M-k> mz:m-2<cr>`z
vmap <M-j> :m'>+<cr>`<my`>mzgv`yo`z
vmap <M-k> :m'<-2<cr>`>my`<mzgv`yo`z

if MySys() == "mac"
    nmap <D-j> <M-j>
    nmap <D-k> <M-k>
    vmap <D-j> <M-j>
    vmap <D-k> <M-k>
endif

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Buffer realted
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"Fast open a buffer by search for a name
"map <c-q> :sb

"Open a dummy buffer for paste
map <leader>q :e ~/buffer<cr>

"Restore cursor to file position in previous editing session
set viminfo='10,"100,:20,%,n~/.viminfo

"用 "rot13" 编码整个文件
" "gg" 到文件首行首字符, "V" 进入Visual-Line模式, "G"到文件末行首字符,
"这样就选中了整篇文章,然后 "g?" 就是用 "rot13" 编码整个文件
"
"关于 "rot13":
" "ROT13" 是一种简单的编码,它把字母分成前后两组,每组13个,编码和译码的
" 算法相同,仅仅交换字母的这两个部分,即:
"   [a..m] --> [n..z] 和 [n..z] --> [a..m]
" "ROT13" 用简易的手段使得信件不能直接被识别和阅读,也不会被搜索匹配程
" 序用通常的方法直接找到.经常用于 USENET 中发表一些攻击性或令人不快的
" 言论或有简单保密需要的文章.
" 由于 "ROT13" 是自逆算法,所以,译码和编码是同一个过程.
map <F9> ggVGg?

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Files and backup
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" "backup" / "bk"   (缺省关闭)  覆盖文件前创建一个备份.
"文件成功写入后保留该备份.如果你不想保留备份文件,但希望写入期间能有备
"份,复位该选项并置位 "writebackup" 选项(这是缺省行为).如果你完全不想
"要备份文件,同时复位两个选项 (如果你的文件系统差不多满了,这会有用).更
"多的解释可见 "backup-table".
"如果匹配 "backupskip" 模式,无论如何都不会建立备份.
"如果设置 "patchmode",备份文件会换名成为文件的旧版本.
"注意: 如果置位 "compatible",该选项被复位.
"
" "writebackup" / "wb" (有 "+writebackup" 特性时缺省打开,否则缺省关闭)
"覆盖文件前建立备份.文件成功写入后,除非 "backup" 选项也被打开,删除该备
"份.如果你的文件系统几乎已满,复位此选项. "backup-table" 还有相关的解释.
"如果 "backupskip" 模式匹配,无论如何都不会建立备份.
"注意: 如果置位 "compatible", 该选项被设为缺省值.
set nobackup
set nowritebackup

" "swapfile" / "swf"    (缺省打开)
"缓冲区使用交换文件.如果不想为特定缓冲区使用交换文件,可以复位本选项.
"例如,包含即使 root 也不应得到的机密信息.要小心: 所有的文本都在内存:
"   - 不要在大文件里使用.
"   - 无法恢复!
"交换文件只有在 "updatecount" 不为零并且置位 "swapfile" 时才会存在.
"复位 "swapfile" 时,立即删除当前缓冲区的交换文件.如果置位 "swapfile"
"并且 "updatecount" 非零,立即建立交换文件.
"另见 "swap-file"和 "swapsync".
"
"此选项可以和 "bufhidden" 和 "buftype" 一起使用,指定特殊类型的缓冲区.
"见 "special-buffers"
set noswapfile

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Folding
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" "foldenable" / "fen"  (缺省打开)
"{仅当编译时加入 "+folding" 特性才有效}
"如果关闭,所有的折叠都被打开.本选项用于在文本显示的完全打开折叠和保留
"折叠之间 (包括手动打开或关闭的折叠) 快速切换."zi" 命令切换本选项.
"如果 "foldenable" 关闭, "foldcolumn" 会保持空白.
"建立新折叠或者关闭折叠的命令置位本选项.见 "folding".
"
"折叠方法
"可用选项 "foldmethod" 来设定折叠方法.
"设置选项 "foldmethod" 为非 "manual" 的其它值时,所有的折叠都会被删除并
"且创建新的.如果设置成 "manual",将不去除已有的折叠.可以利用这一点来先
"自动定义折叠,然后手工调整.
"
"有 6 种方法来选定折叠:
"   "manual"    手工定义折叠
"   "indent"    更多的缩进表示更高级别的折叠
"   "expr"      用表达式来定义折叠
"   "syntax"    用语法高亮来定义折叠
"   "diff"      对没有更改的文本进行折叠
"   "marker"    对文中的标志折叠
"
"选取了折叠方式后,我们就可以对某些代码实施我们需要的折叠了,由于我使用
" "indent" 稍微多一些,故以它的使用为例:
"如果使用了 "indent"方式,vim会自动的对大括号的中间部分进行折叠,我们可
"以直接使用这些现成的折叠成果.
"在可折叠处(大括号中间):
"   "zc"    折叠
"   "zC"    对所在范围内所有嵌套的折叠点进行折叠
"   "zo"    展开折叠
"   "zO"    对所在范围内所有嵌套的折叠点展开
"   "[z"    到当前打开的折叠的开始处
"   "]z"    到当前打开的折叠的末尾处
"   "zj"    向下移动.到达下一个折叠的开始处.关闭的折叠也被计入.
"   "zk"    向上移动到前一折叠的结束处.关闭的折叠也被计入."
if exists("&foldenable")
    set fen
    set foldmethod=indent
endif

" "foldlevel" / "fdl"   (缺省: 0)   设置代码折叠级别
"{仅当编译时加入 "+folding" 特性才有效}
"设置折叠级别: 高于此级别的折叠会被关闭.
"设置此选项为零关闭所有的折叠.更高的数字关闭更少的折叠.
" "zm", "zM" 和 "zR" 等命令设置此选项.
"见 "fold-foldlevel".
if exists("&foldlevel")
    set fdl=0
endif

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Text option
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" "expandtab" / "et"    (缺省关闭)
"插入模式里: 插入 <Tab> 时使用合适数量的空格.如果 "autoindent" 打开,
" ">" 和 "<" 命令使用空格进行缩进. "expandtab" 打开时,要插入实际的制
"表,可用 CTRL-V<Tab>.另见 ":retab" 和 "ins-expandtab".
"注意: 如果置位 "compatible",该选项被复位.
set expandtab

" "shiftwidth" / "sw"   (缺省为 8)
"(自动) 缩进每一步使用的空白数目.用于 "cindent", ">>", "<<" 等.
set shiftwidth=4

" "softtabstop" / "sts" (缺省为 0)
"执行编辑操作,如插入 <Tab> 或者使用 <BS> 时,把 <Tab> 算作空格的数目.
"感觉上,你就像使用单个 <Tab> 一样,而实际上使用的是空格和 <Tab> 的混
"合.这可以用来维持 "ts" 的设置为标准值 8 不变,但编辑时感觉就像它被设
"为 "sts" 那样.不过, "x" 这样的命令仍然会在实际的字符上操作.
"如果 "sts" 为零,关闭此特性.
"
"如果置位 "paste" 选项, "softtabstop" 被设为 0.
"另见 "ins-expandtab". 如果没有置位 "expandtab",通过使用 <Tab>,使空
"格数目减到最小.
" "cpoptions" 里的 "L" 标志位改变制表在 "list" 置位时的使用方式.
"注意: 如果置位 "compatible",该选项被设为 0.
set softtabstop=4

" "tabstop" / "ts"  (缺省为 8)
"文件里的 <Tab> 代表的空格数.另见 ":retab" 命令和 "softtabstop" 选项.
"
"注意: 设置 "tabstop" 为不同于 8 的值可能使你的文件在很多地方看起来不
"正确 (比如,打印时).
"
"Vim 里有四个主要的使用制表的方法:
"1. 总是保持 "tabstop" 为 8,设置 "softtabstop" 和 "shiftwidth" 为 4
"   (或 3 或任何你想要的) 然后用 "noexpandtab".这时,Vim 使用制表和空
"   格的混合,但输入 <Tab> 或 <BS> 键就像每个制表占用 4 (或 3) 个字符
"   一样.
"2. 设置 "tabstop" 和 "shiftwidth" 为想要的任何值,然后用 "expandtab".
"   这样,你总是插入空格.改变 "tabstop" 时绝不会影响排版.
"3. 设置 "tabstop" 和 "shiftwidth" 为想要的任何值,然后用 "modeline",
"   再次编辑时就会重新设置这些值.这只适用于总是使用 Vim 进行文件编辑
"   的情况.
"4. 永远把 "tabstop" 和 "shiftwidth" 设为相同的值,并用 "noexpandtab".
"   这样,就可以 (只适用于行首的缩进) 使用任何别人的制表位设置.不过,
"   如果你这么做,最好在第一个非空白字符之后想插入制表时以空格代替.否
"   则,改变 "tabstop" 时,注释等的对齐会不正确.
set tabstop=4

" "smarttab" / "sta"    (缺省关闭)
"如果打开,行首的 <Tab> 根据 "shiftwidth" 插入空白. "tabstop" 或
" "softtabstop" 用在别的地方.<BS> 删除行首 "shiftwidth" 那么多的空白.
" 如果关闭,<Tab> 总是根据 "tabstop" 或 "softtabstop" 决定插入空白的数\
" 目. "shiftwidth" 只用于文本左移或右移 "shift-left-right".
" 插入空白的具体方式 (制表还是空格) 取决于 "expandtab" 选项.另见
" "ins-expandtab".如果没有置位 "expandtab",通过使用 <Tab>,使空格数目
" 减到最小.
" 注意: 如果置位 "compatible",该选项被复位.
set smarttab

" "linebreak" / "lbr"   (缺省关闭)
"{仅当编译时加入 "+linebreak" 特性才有效}
"如果打开,Vim 会在 "breakat" 里的字符上,而不是在屏幕上可以显示的最后
"一个字符上回绕长行.和 "wrapmargin" 和 "textwidth" 不同,此处不会插入
"<EOL>,它只影响文件的显示方式,而不是其内容. "showbreak" 的值会出现在
"回绕行的前面.
"
"如果 "wrap" 选项关闭或 "list" 打开,不使用本选项.
"注意 <EOL> (屏幕上的) 之后的 <Tab> 字符在多数情况下.不会显示正确数量
"的空格.
set lbr

""""""""""""""""""""""""""""""
" => Indent
""""""""""""""""""""""""""""""
" "autoindent" / "ai" (缺省关闭) 启用自动缩进
"开启新行时 (插入模式下输入 <CR>,或者使用 "o" 或 "O" 命令),从当前行复
"制缩进距离.如果你在新行除了 <BS> 或 CTRL-D 以外不输入任何东西,然后输
"入 <Esc>,CTRL-O 或 <CR>,缩进又被删除.移动光标到其它行也有同样的效果,
"除非 "cpoptions" 里包含 'I' 标志位.
"如果打开自动缩进,排版 (用 "gq" 命令或者插入模式下到达了 "textwidth")
"使用第一行的缩进距离.
"打开 "smartindent" 或 "cindent" 时,缩进的修改方式有所不同.
"置位 "paste" 选项时, "autoindent" 选项被复位.
"{Vi 稍有不同: Vim 里输入 <Esc> 或 <CR> 删除缩进后,上下移动把光标放在
"删除的缩进之后;Vi 则把光标放在已删除的缩进的某处}.
set autoindent

" "smartindent" / "si"  (缺省关闭)  开启新行的自动缩进
"{仅当编译时加入 "+smartindent" 特性才有效}
"开启新行时使用智能自动缩进.适用于 C 这样的程序,但或许也能用于其它语
"言. "cindent" 类似,它多数情况下更好,但更严格,见 "C-indenting".如果
"打开 "cindent", 置位 "si" 没有效果.
" "indentexpr" 是更高级的替代方案.
"通常,使用 "smartindent" 时也应该打开 "autoindent".
"
"在这些情况下自动插入缩进:
"   - "{"           结束的行后.
"   - "cinwords"    中的某个关键字开始的行后.
"   - "}"           开始的行前 (只有使用 "O" 命令才会).
"在新行第一个输入的字符如果是 "}",该行使用匹配的 "{" 相同的缩进.
"在新行第一个输入的字符如果是 "#",该行的缩进被删除, "#" 被放到第一列.
"下一行上,恢复原来缩进.如果你不想这么做,使用下面的映射:
"   ":inoremap # X^H#"
"其中的 ^H 用 CTRL-V CTRL-H 输入.
"使用 ">>" 命令时,'#' 开始的行不右移.
"注意: 如果置位 "compatible",复位 "smartindent".如果置位 "paste",关
"闭这里的智能缩进功能.
set si

" "cindent" / "cin" (缺省关闭) 打开自动 C 程序的缩进
"{仅当编译时加入 "+cindent" 特性才有效}
" "cinkeys" 说明如何设置插入模式下启动重新缩进的热键, "cinoptions"
"说明如何设置你喜欢的缩进风格.
"如果 "indentexpr" 非空,它否决 "cindent" 的设置.
"如果没有打开 "lisp",而 "indentexpr" 和 "equalprg" 都为空, "=" 操作
"符使用本算法缩进,而不调用外部程序.
"见 "C-indenting".
"
"如果你不喜欢 'cindent' 的工作方式,可以试试 "smartindent" 选项或者
" "indentexpr".
" 如果置位 "paste",不使用本选项.
" 注意: 如果置位 "compatible",本选项被复位.
if has("cindent")
    set cindent
endif

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Spell checking
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
map <leader>sn ]
map <leader>sp [
map <leader>sa zg
map <leader>s? z=

""""""""""""""""""""""""""""""
" => VIM
""""""""""""""""""""""""""""""
if has("autocmd") && v:version>600
    au BufRead,BufNew *.vim map <buffer> <leader><space> :w!<cr>:source %<cr>
endif

""""""""""""""""""""""""""""""
" => HTML related
""""""""""""""""""""""""""""""
" HTML entities - used by xml edit plugin
let xml_use_xhtml = 1
"let xml_no_auto_nesting = 1

"To HTML
let html_use_css = 0
let html_number_lines = 0
let use_xhtml = 1

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => MISC
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"Windows系统的换行符为\r\n,而Linux/Unix系统则为\n.因此,在Windows里编辑
"过的文本文件到了Linux/Unix里,每一行都会多出一个^M.
"命令中的 "^M" 是通过键入 <ctrl-v><enter> 或 <ctrl-v><ctrl-m> 生成的.
"可以在用以下命令清除该字符:
"noremap <leader>m :%s/\r//g<CR>

"设置 'omnifunc' 选项。如:
if has("autocmd")
    au Filetype java setlocal omnifunc=javacomplete#Complete
    au Filetype html setlocal omnifunc=htmlcomplete#CompleteTags
    au FileType css setlocal omnifunc=csscomplete#CompleteCSS
    au FileType c setlocal omnifunc=ccomplete#Complete
    au FileType php setlocal omnifunc=phpcomplete#CompletePHP
    au FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS
endif

"进行Tlist的设置
"TlistUpdate可以更新tags
map <F3> :silent! Tlist<CR>
let Tlist_Ctags_Cmd="\"C:\\Program Files (x86)\\Vim\\vim74\\ctags.exe\""
let Tlist_Use_Right_Window=1
let Tlist_Show_One_File=0
let Tlist_File_Fold_Auto_Close=1
let Tlist_Exit_OnlyWindow=1
let Tlist_Process_File_Always=1
let Tlist_Inc_Winwidth=0
let g:showfuncctagsbin = "\"C:\\Program Files (x86)\\Vim\\vim74\\ctags.exe\""

"进行NerdTree的设置
map <F4> :silent! NERDTree<CR>

" 按F8按钮,在窗口的左侧出现taglist的窗口,像vc的左侧的workpace
"nnoremap <silent> <F8> :TlistToggle<CR><CR>
nnoremap <F10> :silent! TlistToggle<CR>
" :Tlist              调用TagList
let Tlist_Show_One_File=0                    " 只显示当前文件的tags
let Tlist_Exit_OnlyWindow=1                  " 如果Taglist窗口是最后一个窗口则退出Vim
let Tlist_Use_Right_Window=1                 " 在右侧窗口中显示
let Tlist_File_Fold_Auto_Close=1             " 自动折叠

"Paste toggle - when pasting something in, don't indent.
"set pastetoggle=<F3>

"移除空行的缩进
map <F2> :%s/s*$//g<cr>:noh<cr>''

"Super paste
ino <C-v> <esc>:set paste<cr>mui<C-R>+<esc>mv'uV'v=:set nopaste<cr>

"To hex modle 转化为16进制方式显示
let s:hexModle = "N"
function! ToHexModle()
if s:hexModle == "Y"
    %!xxd -r
    let s:hexModle = "N"
else
    %!xxd
    let s:hexModle = "Y"
endif
endfunction

map <leader>h :call ToHexModle()<CR>

"Fast reloading of the _vimrc 快速重load配置文件
map <silent> <leader>ss :source c:\Program Files (x86)\Vim\_vimrc<CR>
"Fast editing of the _vimrc 快速打开编译配置文件
map <silent> <leader>ee :e c:\Program Files (x86)\Vim\_vimrc<CR>
"When _vimrc is edited, reload it
autocmd! bufwritepost _vimrc source c:\Program Files (x86)\Vim\_vimrc

"matchit 匹配%操作
:source C:\Program Files (x86)\Vim\vim74\macros\matchit.vim
"可视化的buffer操作
let g:bufExplorerDefaultHelp=1
let g:bufExplorerDetailedHelp=1
map <leader>be :BufExplorer <CR>
map <leader>bs :BufExplorerHorizontalSplit <CR>
map <leader>bv :BufExplorerVerticalSplit <CR>

"html.vim设置
:let g:html_indent_script1 = "inc"
:let g:html_indent_style1 = "inc"
:let g:html_indent_inctags="html,body,head,tbody,p"

"mapping 全能补全
"如果下拉菜单弹出,回车映射为接受当前所选项目,否则,仍映射为回车
"inoremap <expr> <CR>    pumvisible()? "<C-Y>":"<CR>"
"如果下拉菜单弹出,CTRL-J映射为在下拉菜单中向下翻页,否则映射为CTRL-X CTRL-O
"inoremap <expr> <C-J>   pumvisible()? "<PageDown><C-N><C-P>":"<C-X><C-O>"
"如果下拉菜单弹出,CTRL-K映射为在下拉菜单中向上翻页,否则不变
"inoremap <expr> <C-K>   pumvisible()? "<PageUp><C-P><C-N>":"<C-K>"
set completeopt=longest,menu,preview

"SuperTab插件设置
let g:SuperTabDefaultCompletionType="<C-X><C-O>"

"vundle设置 这是一个用于自动下载、安装、管理、清除vim插件的工具
set nocompatible                " be iMproved
filetype off                    " required!

set rtp+=~/vimfiles/bundle/vundle
let path='~/vimfiles/bundle'
call vundle#rc(path)

"let Vundle manage Vundle
"required! <br>
Bundle 'gmarik/vundle'

"original repos on github<br>Bundle 'mattn/zencoding-vim'

"vim-scritps repos
Bundle 'L9'
Bundle 'FuzzyFinder'
Bundle 'Mark'
Bundle 'bufexplorer.zip'
Bundle 'The-NERD-tree'
Bundle 'taglist.vim'
Bundle 'matrix.vim'
Bundle 'The-NERD-Commenter'
Bundle 'matchit.zip'
"Bundle 'AutoComplPop'
Bundle 'jsbeautify'
Bundle 'YankRing.vim'
Bundle 'autoclose'
"Bundle 'supertab'
Bundle 'csharp.vim'
Bundle 'sharp-Plugin-Added'
Bundle 'sharp-Indent'
Bundle 'python.vim'
Bundle 'Pydiction'

filetype plugin indent on       "required!

"save session file
set sessionoptions-=curdir
set sessionoptions+=sesdir
noremap <F7> :mks! WorkingSession.vim<CR>:wviminfo Working.viminfo<CR>
noremap <F6> :source WorkingSession.vim<CR>:rviminfo Working.viminfo<CR>

"对搜索的设置
"map ft :call Search_Word()<CR>:cw<CR>
"function Search_Word()
    "let w = expand("<cword>") " 在当前光标位置抓词
    "execute "vimgrep " w " **"
"endfunction
"

"for Pydiction
let g:pydiction_location = '~/vimfiles/bundle/Pydiction/complete-dict'

最新文章

  1. Ryu
  2. Object-C 基础笔记1--杂识
  3. JSAPI微信支付返回错误:fail_no permission to execute
  4. React Native学习-measure测量view的宽高值
  5. 【POJ】【2975】Nim
  6. 解决第三方DLL没有强签名
  7. SimpleDateFormat的使用
  8. 推荐两个针对github的chrome插件
  9. Golang Multipart File Upload Example
  10. cf C题
  11. 剑指offer——包含min函数的栈
  12. 通过msyql proxy链接mysql中文乱码及session问题
  13. Java 工程名上有个红色叹号
  14. python基础之os.system函数
  15. js 正则之 检测素数
  16. React从0到1
  17. Java Spring-Bean中属性注入
  18. (转载)Nginx/LVS/HAProxy三种主流负载均衡软件的对比
  19. Windows之权限讲解
  20. SQL_MODE设置讲解

热门文章

  1. springmvc适配器的应用
  2. hdu6035(树形DP)
  3. Group Shifted Strings -- LeetCode
  4. 10.getter &amp; setter
  5. MySQL判断中文字符的方法(转)
  6. Word中如何让两个图片垂直居中对齐
  7. OpenGL.Vertex Array Object (VAO) 【转】
  8. WEB服务器、应用程序服务器、HTTP服务器区别 【转】
  9. 使用echarts简单制作中国地图,echarts中国地图
  10. Java高级特性—反射和动态代理