我的vimrc配置文件:
主要特色有:
1、按<F2>键可切换颜色主题;
2、按<F3>键可在当前行首添加注释;
3、按<F4>键可删除当前行首的注释;
4、按<F5>键可编译常见的代码文档,如c、cpp、java、latex、NCL、python等
5、按<F6>键可编译并运行常见的文档,如c、cpp、java、latex、NCL、python等
6、normal模式下按<F12>删除行尾空格和DOS换行符号
其他如代码高亮,字体设置、自动补全和缩进等
" Vim 模式 set nocompatible """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "侦测文件类型 filetype on "载入文件类型插件 filetype plugin on "为特定文件类型载入相关缩进文件 filetype indent on " 设定窗口大小 set lines=27 columns=80 winpos 200 100 " 光标移动到buffer的顶部和底部时保持3行距离 set scrolloff=3 " 显示当前标所在行线 set cursorline "语法高亮 syntax on "显示行号 set nu " 自动设当前编辑的文件所在目录为当前工作路径 set autochdir """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "颜色主题colorscheme ron colorscheme murphy let g:csnum = 0"定义全局变量用于切换颜色主题" "按<F2>键依次修改颜色主题 map <F2> :call ChangeColorScheme()<CR> function! ChangeColorScheme() if g:csnum == 0 :colorscheme torte :let g:csnum = 1 elseif g:csnum == 1 :colorscheme murphy :let g:csnum = 2 elseif g:csnum == 2 :colorscheme desert :let g:csnum = 3 elseif g:csnum == 3 :colorscheme ron :let g:csnum = 4 elseif g:csnum == 4 :colorscheme delek :let g:csnum = 5 elseif g:csnum == 5 :colorscheme elflord :let g:csnum = 6 elseif g:csnum == 6 :colorscheme evening :let g:csnum = 7 elseif g:csnum == 7 :colorscheme koehler :let g:csnum = 8 else :colorscheme default :let g:csnum = 0 endif endfunction """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "按下F3键添加单行注释符号(行首部) map <silent> <F3> :call AddFirstSingleComments()<CR> function AddFirstSingleComments() if &filetype == 'sh' :.,+0 s/^/#/ elseif &filetype == 'fortran' :.,+0 s/^/!/ elseif &filetype == 'c' :.,+0 s#^#//# elseif &filetype == 'cpp' :.,+0 s#^#//# elseif &filetype == 'ncl' :.,+0 s#^#;# elseif &filetype == 'tex' :.,+0 s#^#%#g elseif &filetype == 'python' :.,+0 s/^/#/ else :.,+0 s/^/#/ endif endfunction """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "按下F4键取消单行注释符号(行首部) map <silent> <F4> :call RemoveFirstSingleComments()<CR> function RemoveFirstSingleComments() if &filetype == 'sh' :.,+0 s/^#// elseif &filetype == 'fortran' :.,+0 s/^!/ / elseif &filetype == 'c' :.,+0 s#^//## elseif &filetype == 'ncl' :.,+0 s#^;## elseif &filetype == 'cpp' :.,+0 s#^//## elseif &filetype == 'tex' :.,+0 s/^%// elseif &filetype == 'python' :.,+0 s/^#// else :.,+0 s/^#// endif endfunction """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "允许退格键删除 set backspace=2 "启用鼠标 set mouse=a set selection=exclusive set selectmode=mouse,key "设置高亮搜索 set hlsearch "在搜索时,输入的词句的逐字符高亮 set incsearch " 去掉按键错误提示 set noerrorbells set novisualbell set t_vb= " 命令行(在状态行下)的高度,默认为1,这里是2 set cmdheight=2 " 带有如下符号的单词不要被换行分割 set iskeyword+=_,$,@,%,#,- " 300 条操作历史记录 set history=300 " 列表模式, 显示tab及行尾空格 set list set lcs=tab:>-,trail:- "按C语言格式缩进 set cindent " 为C程序提供自动缩进 set smartindent "设置Tab长度为4格 set tabstop=4 "设置自动缩进长度为4格 set shiftwidth=4 "继承前一行的缩进方式,特别适用于多行注释 set autoindent " 高亮显示匹配的括号 set showmatch "括号匹配显示时间为1(单位是十分之一秒) set matchtime=1 "增强模式中的命令行自动完成操作 set wildmenu " 关闭文件备份和交换文件生成 set nobackup set nowb set noswapfile "行内替换 set gdefault "设置字体GVIM set guifont=Courier\ New\ 14,Arial\ 14 "编码设置 "set enc=utf-8 "set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936 "语言设置 "set langmenu=zh_CN.UTF-8 "set helplang=cn " 总是显示状态栏 set laststatus=2 " 状态栏格式 set statusline=%F%m%r%h[%{&fileformat}]\ \ \ ASCII=\%b,HEX=\%B\ \ \ %c%V,%l/%L(%P) """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " normal模式下按Ctrl+F12建删除行尾空格和DOS换行符号 nmap<silent> <F12> :%s/\s*\r*$//g<CR> """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "C,C++,Fortran,Python,java,Latex,sh等按F5编译但是一般不要求运行 map <F5> :call CompileALL()<CR> func! CompileALL() :cd %:p:h exec "w" if &filetype == 'c' exec "!g++ % -o %<" elseif &filetype == 'cpp' exec "!g++ % -o %<" elseif &filetype == 'ncl' exec "!ncl %" elseif &filetype == 'java' exec "!javac %" elseif &filetype == 'fortran' exec "!gfortran % -o %<" elseif &filetype == 'python' exec "!python %" elseif &filetype == 'tex' exec "!xelatex -shell-escape %<" exec "!xelatex -shell-escape %<" elseif &filetype == 'sh' :!sh ./% endif endfunc """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "C,C++,Fortran,Python,java,Latex,sh等按<F6>编译运行 map <F6> :call CompileAndRun()<CR> func! CompileAndRun() :cd %:p:h exec "w" if &filetype == 'c' exec "!g++ % -o %<" exec "! ./%<" elseif &filetype == 'cpp' exec "!g++ % -o %<" exec "! ./%<" elseif &filetype == 'ncl' exec "!ncl %" elseif &filetype == 'java' exec "!javac %" exec "!java %<" elseif &filetype == 'fortran' exec "!gfortran % -o %<" exec "! ./%<" elseif &filetype == 'python' exec "!python %" elseif &filetype == 'tex' exec "!xelatex -shell-escape %<" exec "!xelatex -shell-escape %<" elseif &filetype == 'sh' :!sh ./% endif endfunc """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "C,C++的调试<F8> map <F8> :call Rungdb()<CR> func! Rungdb() :cd %:p:h exec "w" exec "!g++ % -g -o %<" exec "!gdb ./%<" endfunc """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" au BufRead,BufNewFile * setfiletype txt """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " 通过使用: commands命令,告诉我们文件的哪一行被改变过 set report=0 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " 在被分割的窗口间显示空白,便于阅读 set fillchars=vert:\ ,stl:\ ,stlnc:\ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "代码格式化连续输入四个字符gg=G """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "如果只是想使用系统粘贴板的话直接在输入模式按Shift+Inset就可以了 "下面只能值GVIM中使用,GVIM中支持系统剪切板 "按Ctrl+C,再按一次y,复制一行,若按w则复制一个单词到系统剪切板 map <c-c> "+y map <c-v> "+p "如果粘贴代码后,缩进就全乱了,可以使用下面的设置 "set paste "绑定快捷键来激活or取消paste模式 "set pastetoggle=<F9>
set nocompatible source $VIMRUNTIME/vimrc_example.vim source $VIMRUNTIME/mswin.vim behave mswin 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 $VIMRUNTIME =~ ' ' if &sh =~ '\<cmd' let cmd = '""' . $VIMRUNTIME . '\diff"' let eq = '"' else let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"' endif else let cmd = $VIMRUNTIME . '\diff' endif silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq endfunction """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "侦测文件类型 filetype on "载入文件类型插件 filetype plugin on "为特定文件类型载入相关缩进文件 filetype indent on " 设定窗口大小 set lines=26 columns=80 winpos 200 100 " 光标移动到buffer的顶部和底部时保持3行距离 set scrolloff=3 " 显示当前标所在行线 set cursorline "语法高亮 syntax on "显示行号 set nu " 自动设当前编辑的文件所在目录为当前工作路径 set autochdir """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "颜色主题colorscheme ron colorscheme murphy let g:csnum = 0"定义全局变量用于切换颜色主题" "按<F2>键依次修改颜色主题 map <F2> :call ChangeColorScheme()<CR> function! ChangeColorScheme() if g:csnum == 0 :colorscheme torte :let g:csnum = 1 elseif g:csnum == 1 :colorscheme murphy :let g:csnum = 2 elseif g:csnum == 2 :colorscheme desert :let g:csnum = 3 elseif g:csnum == 3 :colorscheme ron :let g:csnum = 4 elseif g:csnum == 4 :colorscheme delek :let g:csnum = 5 elseif g:csnum == 5 :colorscheme elflord :let g:csnum = 6 elseif g:csnum == 6 :colorscheme evening :let g:csnum = 7 elseif g:csnum == 7 :colorscheme koehler :let g:csnum = 8 else :colorscheme default :let g:csnum = 0 endif endfunction """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "按下F3键添加单行注释符号(行首部) map <silent> <F3> :call AddFirstSingleComments()<CR> function AddFirstSingleComments() if &filetype == 'sh' :.,+0 s/^/#/ elseif &filetype == 'fortran' :.,+0 s/^/!/ elseif &filetype == 'c' :.,+0 s#^#//# elseif &filetype == 'cpp' :.,+0 s#^#//# elseif &filetype == 'ncl' :.,+0 s#^#;# elseif &filetype == 'tex' :.,+0 s#^#%#g elseif &filetype == 'python' :.,+0 s/^/#/ else :.,+0 s/^/#/ endif endfunction """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "按下F4键取消单行注释符号(行首部) map <silent> <F4> :call RemoveFirstSingleComments()<CR> function RemoveFirstSingleComments() if &filetype == 'sh' :.,+0 s/^#// elseif &filetype == 'fortran' :.,+0 s/^!/ / elseif &filetype == 'c' :.,+0 s#^//## elseif &filetype == 'ncl' :.,+0 s#^;## elseif &filetype == 'cpp' :.,+0 s#^//## elseif &filetype == 'tex' :.,+0 s/^%// elseif &filetype == 'python' :.,+0 s/^#// else :.,+0 s/^#// endif endfunction """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "允许退格键删除 set backspace=2 "启用鼠标 set mouse=a set selection=exclusive set selectmode=mouse,key "设置高亮搜索 set hlsearch "在搜索时,输入的词句的逐字符高亮 set incsearch " 去掉按键错误提示 set noerrorbells set novisualbell set t_vb= " 命令行(在状态行下)的高度,默认为1,这里是2 set cmdheight=2 " 带有如下符号的单词不要被换行分割 set iskeyword+=_,$,@,%,#,- " 300 条操作历史记录 set history=300 " 列表模式, 显示tab及行尾空格 set list set lcs=tab:>-,trail:- "按C语言格式缩进 set cindent " 为C程序提供自动缩进 set smartindent "设置Tab长度为4格 set tabstop=4 "设置自动缩进长度为4格 set shiftwidth=4 "继承前一行的缩进方式,特别适用于多行注释 set autoindent " 高亮显示匹配的括号 set showmatch "括号匹配显示时间为1(单位是十分之一秒) set matchtime=1 "增强模式中的命令行自动完成操作 set wildmenu " 关闭文件备份和交换文件生成 set nobackup set nowb set noswapfile "行内替换 set gdefault "设置字体GVIM set guifont=Courier\ New:h12,Arial:h12 "编码设置 "set enc=utf-8 "set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936 "语言设置 "set langmenu=zh_CN.UTF-8 "set helplang=cn " 总是显示状态栏 set laststatus=2 " 状态栏格式 set statusline=%F%m%r%h[%{&fileformat}]\ \ \ ASCII=\%b,HEX=\%B\ \ \ %c%V,%l/%L(%P) """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " normal模式下按Ctrl+F12建删除行尾空格和DOS换行符号 nmap<silent> <F12> :%s/\s*\r*$//g<CR> """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "C,C++,Fortran,Python,java,Latex,sh等按F5编译但是一般不要求运行 map <F5> :call CompileALL()<CR> func! CompileALL() :cd %:p:h exec "w" if &filetype == 'c' exec "!g++ % -o %<" elseif &filetype == 'cpp' exec "!g++ % -o %<" elseif &filetype == 'ncl' exec "!ncl %" elseif &filetype == 'java' exec "!javac %" elseif &filetype == 'fortran' exec "!gfortran % -o %<" elseif &filetype == 'python' exec "!python %" elseif &filetype == 'tex' exec "!xelatex -shell-escape %<" exec "!xelatex -shell-escape %<" elseif &filetype == 'sh' :!sh ./% endif endfunc """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "C,C++,Fortran,Python,java,Latex,sh等按<F6>编译运行 map <F6> :call CompileAndRun()<CR> func! CompileAndRun() :cd %:p:h exec "w" if &filetype == 'c' exec "!g++ % -o %<" exec "! ./%<" elseif &filetype == 'cpp' exec "!g++ % -o %<" exec "! ./%<" elseif &filetype == 'ncl' exec "!ncl %" elseif &filetype == 'java' exec "!javac %" exec "!java %<" elseif &filetype == 'fortran' exec "!gfortran % -o %<" exec "! ./%<" elseif &filetype == 'python' exec "!python %" elseif &filetype == 'tex' exec "!xelatex -shell-escape %<" exec "!xelatex -shell-escape %<" elseif &filetype == 'sh' :!sh ./% endif endfunc """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "C,C++的调试<F8> map <F8> :call Rungdb()<CR> func! Rungdb() :cd %:p:h exec "w" exec "!g++ % -g -o %<" exec "!gdb ./%<" endfunc """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" au BufRead,BufNewFile * setfiletype txt """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " 通过使用: commands命令,告诉我们文件的哪一行被改变过 set report=0 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " 在被分割的窗口间显示空白,便于阅读 set fillchars=vert:\ ,stl:\ ,stlnc:\ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "代码格式化连续输入四个字符gg=G """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "如果只是想使用系统粘贴板的话直接在输入模式按Shift+Inset就可以了 "下面只能值GVIM中使用,GVIM中支持系统剪切板 "按Ctrl+C,再按一次y,复制一行,若按w则复制一个单词到系统剪切板 map <c-c> "+y map <c-v> "+p "如果粘贴代码后,缩进就全乱了,可以使用下面的设置 "set paste "绑定快捷键来激活or取消paste模式 "set pastetoggle=<F9>
如果想支持NCL自动完成的话,可以添加:
"支持NCL文件类型和自动完成 au BufRead,BufNewFile *.ncl set filetype=ncl au! Syntax newlang source $VIM/ncl.vim