我的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换行符号
其他如代码高亮,字体设置、自动补全和缩进等
Linux中:
" 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>
Windows中:
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