">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
" 设置编码
"Vim的工作原理
"1、 Vim启动,根据encoding的值来设置buffer、菜单文本、消息文的字符编码方式(强烈建议将encoding设置为utf-8)
"2、 读取需要编辑的文件,根据fileencodings中列出的字符编码方式逐一探测该文件编码方式,并设置fileencoding为探测到的,看起来是正确的字符编码方式
"3、 对比fileencoding和encoding的值,若不同则调用iconv将文件内容转换为encoding所描述的字符编码方式,并且把转换后的内容放到为此文件开辟的buffer里,此时我们就可以开始编辑这个文件了
"4、 编辑完成后保存文件时,再次对比fileencoding和encoding的值.若不同,再次调用iconv将即将保存的buffer中的文本转换为fileencoding所描述的字符编码方式,并保存到指定的文件中
"
"fileencodings 编码的自动识别,是一个用逗号分隔的复数形式列表,列表中的每一项是一种编码的名称
"当我们打开文件的时候,VIM按顺序使用fileencodings中的编码进行尝试解码,如果成功的话,就使用该编码方式进行解码,并将fileencoding设置为这个值,如果失败的话,就继续试验下一个编码
"因此,我们在设置fileencodings的时候,一定要把要求严格的,当文件不是这个编码的时候更容易出现解码失败的编码方式放在前面,把宽松的编码方式放在后面
"
"fileencoding 当前编辑的文件的字符编码方式,Vim保存文件时也会将文件保存为这种字符编码方式
"当Vim从磁盘上读取文件的时候,会对文件的编码进行探测.如果文件的编码方式和Vim的内部编码方式不同,Vim就会对编码进行转换
"转换完毕后,Vim会将fileencoding选项设置为文件的编码.当Vim存盘的时候,如果encoding和fileencoding不一样,Vim就会进行编码转换
"
"encoding 是Vim内部使用的字符编码方式,当我们设置了encoding之后,Vim内部所有的buffer、寄存器、脚本中的字符串等,全都使用这个编码
"Vim 在工作的时候,如果编码方式与它的内部编码不一致,它会先把编码转换成内部编码.如果工作用的编码中含有无法转换为内部编码的字符,在这些字符就会丢失
"
"termencoding 用于屏幕显示的编码
"在显示的时候,Vim会把内部编码转换为屏幕编码,再用于输出.内部编码中含有无法转换为屏幕编码的字符时,该字符会变成问号,但不会影响对它的编辑操作
"如果termencoding没有设置,则直接使用encoding不进行转换
" vim 内部 字符编码
set encoding=utf-8
" 当前 编辑文件 编码
set fileencoding=utf-8
" 自动 识别 编码
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
" 屏幕 显示 编码
set termencoding=utf-8
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
" 解决乱码
if has("win16") || has("win32") || has("win64") || has("win95")
"解决菜单乱码
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
"解决consle输出乱码
language messages zh_CN.utf-8
endif
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
" 窗口
" 隐藏 启动时 援助索马里儿童提示
set shortmess=atI
" 窗口大小 行=lines 列=columns
"set lines=60 columns=200
" 隐藏 窗口上侧 工具栏
set guioptions-=T
" 隐藏 窗口上侧 菜单栏
set guioptions-=m
" 隐藏 窗口右侧 滚动条
set guioptions-=r
" 隐藏 窗口左侧 滚动条
set guioptions-=L
" 隐藏 窗口底部 滚动条
set guioptions-=b
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
" 行、列
" 显示 行号
set number
" 不换行
set nowrap
" 高亮显示 当前行
set cursorline
" 高亮显示 当前列
set cursorcolumn
" 显示相对的行号 show relative line number
"set relativenumber
" 光标 上下边界值 N 行时窗口自动滚动
set scrolloff=6
" 在插入模式中没有相对数字
"autocmd InsertEnter * :set norelativenumber
" 在保持插入模式时显示相对数字
"autocmd InsertLeave * :set relativenumber
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
" 命令行、状态栏
" 命令行 高度
set cmdheight=2
" 命令行 显示 输入命令
set showcmd
" 命令行 显示 当前模式
set showmode
" 标尺(命令行 显示 光标位置 行号,列号)
set ruler
" 冒号命令 历史行数
set history=50
" 显示 当前模式
set noshowmode
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
" 鼠标
" 鼠标 禁用
"set mouse-=a
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
" 字体
" 设置 字体
set guifont=Consolas:h14
"set guifont=Courier_New:h14
" 防止特殊符号无法正常显示
set ambiwidth=double
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
" 文本
" 退出vim后,内容显示在终端屏幕
set t_ti= t_te=
" 选择文本时,光标所在位置也属于被选中的范围
set selection=inclusive
set selectmode=mouse,key
" 改变终端的标题
set title
" 不要闪烁 " don't beep
set novisualbell
" 不让vim发出讨厌的滴滴声
set noerrorbells
" 去除编辑时, 命令错误发出的警告响声
set t_vb=
set tm=500
" 在缓冲区之间切换时保持光标位置
set nostartofline
" 设置匹配模式,显示匹配的括号
set showmatch
" 当匹配括号的时候,眨眼的时间是多少
set mat=2
" 允许在有未保存的修改时切换缓冲区,此时的修改由 vim 负责保存(没有保存的缓冲区可以自动隐藏)
set hidden
set wildmode=longest:full,full
set ttyfast
" Use Unix as the standard file type
set ffs=unix,dos,mac
" 如遇Unicode值大于255的文本,不必等到空格再折行。
set formatoptions+=m
" 合并两行中文时,不在中间加空格(当连接行时,不要在两个多字节字符之间插入空格)
set formatoptions+=B
"自动补全配置,让Vim的补全菜单行为与一般IDE一致
set completeopt=longest,menu
" 增强模式中的命令行自动完成操作(自动完成命令)(自身命令行模式智能补全)
set wildmenu
" Ignore compiled files (tab键的自动完成现在会忽略这些 )
set wildignore=**.o,*~,.swp,*.bak,*.pyc,*.class
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
" 文件
" 从不备份(文件保存时,不产生~备份文件)
set nobackup
" 不产生交换文件(文件编辑时,不产生.swp交换文件)
set noswapfile
" 自动重新读入(当打开文件在外部被修改,自动更新该文件)
set autoread
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
" tab键
" tab键 转为 空格
set expandtab
" 一个 tab键 4个空格
set tabstop=4
" 编辑模式 退格键 的 一个退回 4个空格
set softtabstop=4
" tab键 自动缩进 宽度为 4个空格
set shiftwidth=4
" 在这种缩进模式中,每一行都和前一行有相同的缩进量,同时能正确的识别出花括号,当遇到右花括号(}),则取消缩进形式
set smartindent
" 自动缩进(对齐),每行的缩进值与上一行相等
set autoindent
" 在行和段开始处使用制表符
set smarttab
" 使用 < 和 > 进行缩进时 依shiftwidth 调整宽度
set shiftround
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
" backspace键
" 配置backspace 使退格键(backspace)使用此顺序; 正常处理indent, eol, start等
set backspace=eol,start,indent
" 允许backspace和光标键跨越行边界(不建议)
"set whichwrap+=<,>,h,l
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
" 搜索
" 搜索 忽略 大小写
set ignorecase
" 高亮显示 搜索结果
set hlsearch
" 搜索时 直接高亮
set incsearch
" 全是小写, 则忽略大小写, 否则不区分大小写
set smartcase
" 文件两端时 不重新搜索
set nowrapscan
" Remember info about open buffers on close
set viminfo^=%
" 设置魔术(对于正则表达式,可以打开魔法)
set magic
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
" 代码折叠
" 代码折叠
set foldenable
" 代码折叠方式: manual(手工定义折叠) indent(用缩进表示折叠) expr(用表达式来定义折叠) syntax(用语法高亮来定义折叠) diff(对没有更改的文本进行折叠) marker(用标志折叠)
set foldmethod=indent
" 显示折叠的级别
set foldlevel=99
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
" 注释
" 文件注释
func SetFileAnnotation()
if getline(1) != ' :call SetFileAnnotation():12
" 类注释
func SetClassesAnnotation()
call append(line("."), "/**")
call append(line(".")+1, " * 功能简述区(短描述)")
call append(line(".")+2, " *")
call append(line(".")+3, " * 详细说明区(长描述)")
call append(line(".")+4, " * @author Alex Xun [email protected]>")
call append(line(".")+5, " * @package ")
call append(line(".")+6, " */")
endfunc
"映射F3快捷键
map :call SetClassesAnnotation()
" 方法注释
func SetFuntionAnnotation()
let s:indent = ""
let s:num = indent(".")
while s:num>0
let s:indent .= ' '
let s:num -= 1
endwhile
call append(line("."), s:indent)
call append(line("."), s:indent . "/**")
call append(line(".")+1, s:indent . " * 功能简述区(短描述)")
call append(line(".")+2, s:indent . " *")
call append(line(".")+3, s:indent . " * 详细说明区(长描述)")
call append(line(".")+4, s:indent . " *")
call append(line(".")+5, s:indent . " * @param ")
call append(line(".")+6, s:indent . " *")
call append(line(".")+7, s:indent . " * @throws ")
call append(line(".")+8, s:indent . " *")
call append(line(".")+9, s:indent . " * @return ")
call append(line(".")+10, s:indent . " */")
endfunc
"映射F4快捷键
map :call SetFuntionAnnotation()
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
" 主题
" git clone git://github.com/altercation/vim-colors-solarized.git
" mv vim-color-solarized vimfiles
syntax on
syntax enable
"set background=dark
set background=light
set t_Co=256
colorscheme solarized
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
" 插件
" 关闭 兼容模式
set nocompatible
" 关闭 文件 类型的 自动 检测 功能, 必须
filetype off
" 定义 映射 变量
let mapleader = ','
let g:mapleader = ','