vimrc配置文件

我的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 

你可能感兴趣的:(vimrc配置文件)