我的 vimrc(Windows、UNIX 通用版)
这份 vimrc 是修改 Windows 版 gVim 默认创建的 vimrc 而来,未做高级定制,修改/添加的代码主要做以下几件事:
- 兼容 Windows、Unix,GUI 版一致采用 Windows 操作习惯。
- 设置内码为 UTF-8,但设置默认文件编码为 GBK,并协调 GUI、终端等各处编码设置。
- 配置编码识别规则,除了简繁体、Unicode 识别外,还增加了对于 7bit ASCII 升级为 GBK 而不是 UTF-8 的处理。
- 编码相关的字体及字符宽度设置。
这套配置支持 Windows vim7.3/UNIX vim7.0 及以上版本的 vim。建议编译最新版,相比旧版更加完善和稳定。
Windows 版需要 iconv 支持,要在 Vim 目录或系统搜索路径中有 iconv.dll。
UNIX 上编译一定要记得开启 multibyte 支持,推荐 ./configure --with-features=huge
或者 ./configure --with-features=big
并确认 configure 输出中没有 iconv 异常。
还可参考本文按照自己需求定制:
- 如果想默认创建 UTF-8 文件而不是 GBK 编码的,只需去掉 set fenc=gbk 即可。
- 如果对于 7bit ASCII 想提升为 UTF-8 而不是 GBK,那么去掉 g:usasc 相关处理即可。
- 对于 fencs 最末的 8bit 编码,一般人可能更倾向于用 latin1 或 windows-1252 而不是 cp437,可替换之。
" 前几十行主要来自 gVim Windows 版默认 vimrc,有改动
set nocompatible
source $VIMRUNTIME/vimrc_example.vim
if has('gui_running') || has ('win32')
source $VIMRUNTIME/mswin.vim
behave mswin
endif
set diffexpr=MyDiff()
function MyDiff()
let opt = '-a --binary '
if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
let arg1 = v:fname_in
if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
let arg2 = v:fname_new
if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
let arg3 = v:fname_out
if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
let eq = ''
if has('win32')
if $VIMRUNTIME =~ ' '
if &sh =~ '\<cmd'
let cmd = '""' . $VIMRUNTIME . '\diff"'
let eq = '"'
else
let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
endif
else
let cmd = $VIMRUNTIME . '\diff'
endif
else
let cmd = 'diff'
endif
silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq
endfunction
" 以下为灰蓝天际添加
let g:usasc = 'us-ascii'
" 编码识别列表,主要是用来自动识别不同中文编码的文本
let &fencs= g:usasc . ',ucs-bom,utf-8,gbk,gb18030,utf-16le,utf-16,big5,cp437'
" 当前语言环境
if $LC_ALL != ''
let $lc_msgs_ = $LC_ALL
elseif $LC_MESSAGES != ''
let $lc_msgs_ = $LC_MESSAGES
elseif $LANG != ''
let $lc_msgs_ = $LANG
endif
" 设定界面语言
if has('win32') || has('gui_running')
let $LANGUAGE = 'zh_CN.UTF-8'
elseif $LANGUAGE == ''
let $LANGUAGE = $lc_msgs_
endif
" 使用 UTF-8 中文编码
let $LANG = 'zh_CN.UTF-8'
if has('win32')
language chs
else
language zh_CN.UTF-8
endif
set enc=utf8
if has('win32') || $lc_msgs_ == 'zh_CN.GBK'
set tenc=gbk
endif
set ambiwidth=double
if has('gui')
set langmenu=zh_CN.UTF-8
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
endif
set fenc=gbk
" 字体设置,OEM 编码用特殊字体
if has('gui')
if has('win32')
let g:oemfont = 'Courier New:h10:w5'
let g:usrfont = ''
let &gfw = 'NSimSun:h11'
else
let g:oemfont = 'unifont 12'
let g:usrfont = 'Monospace 12'
endif
let &gfn = g:usrfont
endif
" 将 US-ASCII 升级为 GBK 编码,而不是 UTF-8
" 检测并设置 OEM 字体及宽度
function ChkEnc()
if &fenc == g:usasc && v:cmdarg == ''
e ++enc=gbk
if exists(':sy')
sy on
endif
endif
if has('gui')
if &fenc == 'cp437' || &fenc == '437'
let &gfn = g:oemfont
let &ambw = 'single'
else
let &gfn = g:usrfont
let &ambw = 'double'
endif
endif
endfunction
au BufReadPost * call ChkEnc()
" 避免不能从终端复制文本
if !has('gui_running')
set mouse=
endif
灰蓝天际
转载请勿修改,并注明作者:灰蓝天际 及许可协议:署名-非商业性使用-禁止演绎。
欢迎关注:
GitHub:hltj 微博:灰蓝天际(@hltj) Twitter:@jywhltj
公众号 | 微博 |