在vim启动过程中,首先将查找配置文件并执行其中的命令。而这些初始化文件一般有vimrc、gvimrc和exrc三种。
利用:version
命令,可以得到配置文件的详细信息。
注意:如果执行gvim,那么$VIMRUNTIME/menu.vim也会被执行。
配置文件位置
vimrc是主配置文件,它有全局和用户两种版本。
全局vimrc文件,存放在Vim的安装目录中。可以使用以下命令,确定Vim的安装目录:
:echo $VIM
默认情况下,系统vimrc存放在以下位置:
Linux: /usr/share/vim/vimrc
Windows: c:\program files\vimrc
用户vimrc文件,存放在用户主目录中。可以使用以下命令,确定用户主目录:
:echo $HOME
默认情况下,用户vimrc存放在以下位置:
Linux: /home/username/.vimrc
Windows: c:\documents and settings\username\_vimrc
注意:用户配置文件优先于系统配置文件。
gvimrc是GVIM的配置文件,它也有全局和用户两种版本,并且存放在与vimrc相同的目录中。
默认情况下,系统gvimrc存放在以下位置:
Linux: /usr/share/vim/gvimrc
Windows: c:\program files\vim\_gvimrc
默认情况下,用户gvimrc存放在以下位置:
Linux: /home/username/.gvimrc
Windows: c:\documents and settings\username\_gvimrc
exrc文件,仅用于向后兼容olvi/ex,它的全局和用户两种版本也放置于vimrc相同的目录里。除非你使用vi-compatible模式,否则不需要关注exrc配置文件。
注意:在Unix和Linux下,vim的配置文件被命名为以点开头的隐藏文件;而在Windows下,配置文件则以下划线开头命名。
编辑配置文件
可以使用以下命令,新建缓冲区来编辑配置文件:
:edit $MYVIMRC
也可以使用以下命令,新建标签页来编辑配置文件:
:tabedit $MYVIMRC
例如,我们可以在配置文件中使用以下命令,来设置vim的选项:
:syntax on "打开语法加亮功能
:set shiftwidth=4 "设置缩进宽度为4个空格
其中,单引号(")为注释内容。
应用配置文件
修改配置文件后,需要重新启动Vim,或使用:source命令来应用新的设置:
:source $MYVIMRC
我们可以在配置文件中增加以下命令,在保存后自动应用配置:
autocmd bufwritepost .vimrc source $MYVIMRC
配置文件实例
以下是本人的vim配置文件内容,供各位参考:
set ignorecase smartcase " 搜索时忽略大小写,但在有一个或以上大写字母时仍保持对大小写敏感 | |
set nu " 显示行号 | |
set ruler | |
set rulerformat=%55(%{strftime('%a\ %b\ %e\ %I:%M\ %p')}\ %5l,%-6(%c%V%)\ %P%) | |
set guioptions+=b | |
set guioptions-=T | |
set paste | |
"set clipboard=unnamed " 让Vim和Win共用剪贴板 | |
set cursorline cursorcolumn | |
syntax enable " 打开语法高亮 | |
syntax on " 允许按指定主题进行语法高亮,而非默认高亮主题 | |
colorscheme xoria256 " 指定配色方案 | |
set showcmd " 在命令行显示当前输入的命令 | |
set langmenu=en_US " 将菜单和信息设置为英文 | |
let $LANG = 'en_US' | |
source $VIMRUNTIME/delmenu.vim | |
source $VIMRUNTIME/menu.vim | |
set fileencoding=utf-8 " 设置多编码处理 | |
set encoding=utf-8 | |
set tenc=utf-8 | |
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1 | |
"language message zh_CN.UTF-8 | |
filetype on " 开启文件类型侦测 | |
filetype plugin on " 根据侦测到的不同类型加载对应的插件 | |
if has("autocmd") && exists("+omnifunc") | |
autocmd Filetype * | |
\ if &omnifunc == "" | | |
\ setlocal omnifunc=syntaxcomplete#Complete | | |
\ endif | |
endif | |
set laststatus=2 " 设置状态栏 | |
set statusline=%2*%n%m%r%h%w%*\ %F\ %1*[FORMAT=%2*%{&ff}:%{&fenc!=''?&fenc:&enc}%1*]\ [TYPE=%2*%Y%1*]\ [COL=%2*%03v%1*]\ [ROW=%2*%03l%1*/%3*%L(%p%%)%1*]\ [DATE=%2*%{strftime(\"%c\",getftime(expand(\"%%\")))}%1*] | |
"set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [ASCII=\%03.3b]\ [HEX=\%02.2B]\ [POS=%04l,%04v][%p%%]\ [LEN=%L] | |
function! InsertStatuslineColor(mode) | |
if a:mode == 'i' | |
hi statusline guibg=peru | |
elseif a:mode == 'r' | |
hi statusline guibg=blue | |
else | |
hi statusline guibg=black | |
endif | |
endfunction | |
au InsertEnter * call InsertStatuslineColor(v:insertmode) | |
au InsertLeave * hi statusline guibg=orange guifg=white | |
hi statusline guibg=black | |
hi User1 guifg=gray | |
hi User2 guifg=red | |
hi User3 guifg=white | |
set winaltkeys=no | |
" map | |
nmap <tab> V> | |
nmap <s-tab> V< | |
vmap <tab> >gv | |
vmap <s-tab> <gv | |
" 打开另存为对话框 | |
map <F2> <Esc>:browse saveas<CR> | |
" 使用NERDTree插件查看工程文件 | |
nmap <F3> :NERDTreeToggle planning<CR> | |
" 启用/禁止折行 | |
nmap <silent> <F5> <Esc>:call ToggleWrap()<CR> | |
" 显示/禁止行列光标 | |
nmap <silent> <F6> <Esc>:call ToggleCursor()<CR> | |
" 新建标签页 | |
map <F10> <Esc>:tabnew<CR> | |
" 显示/禁止查找高亮度 | |
nmap <silent> <A-f> <Esc>:call ToggleHLSearch()<CR> | |
function! ToggleWrap() | |
if &wrap | |
set nowrap | |
else | |
set wrap | |
endif | |
endfunction | |
function! ToggleHLSearch() | |
if &hls | |
set nohls | |
else | |
set hls | |
endif | |
endfunction | |
function! ToggleCursor() | |
if &cursorcolumn | |
set nocursorline nocursorcolumn | |
else | |
set cursorline cursorcolumn | |
endif | |
endfunction | |
let mapleader=";" " 定义快捷键的前缀,即<Leader> | |
nmap <leader>v :tabedit $MYVIMRC<CR> | |
" 配置文件 | |
autocmd bufwritepost _vimrc source $MYVIMRC | |
" 设置文件格式 | |
set fileformats=unix,dos,mac | |
" Template | |
autocmd! BufNewFile * silent! 0r $VIM/vimfiles/skel/Template.%:e | |
" 指定备份文件目录 | |
set backupdir=F:\Bak | |
set backupskip=D:/Temp/* | |
" 取消代码自动折叠 | |
autocmd! BufNewFile,BufRead * setlocal nofoldenable | |
" 打开/关闭代码折叠 | |
nnoremap <space> za | |
" 优化大文件编辑 | |
let g:LargeFile=10 | |
" 自动加载文件 | |
set autoread | |
set list! | |
set listchars=nbsp:¬,tab:┈┈,precedes:«,extends:»,trail: | |
hi NonText ctermfg=247 guifg=#a73111 cterm=bold gui=bold | |
hi SpecialKey ctermfg=77 guifg=#654321 | |
augroup filetypedetect | |
au BufNewFile,BufRead *.mxl setf mxl | |
augroup END |
请教一下,看见很多vimrc的例子里面都有
回复删除if has("autocmd") && exists("+omnifunc")
这样的例子,比如if has ("unix"), if has ("win32")
这些字符串就是 :version 里面的features(+)么?
什么情况下需要用+,如("+omnifunc"),什么情况下不用?
还有什么情况下用has,什么情况用exists?