我的编辑器之神VIM配置

一直用未经配置的vi,甚是麻烦,于是乎参考了几位牛人的配置,结合我自己的实际需要,把我的VIM做了一番配置,也算作是对这款神器入门了。


把/etc/vimrc做个备份,然后新建一个/etc/vimrc,内容如下:

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 显示相关
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"显示行号
set nu
"不要图形按钮
set go=
"高亮语法
syntax on
"允许折叠 手动折叠
set foldenable
set foldmethod=manual
set foldcolumn=0
set foldlevel=3
"黑色背景
set background=dark
"去掉vi一致性模式
set nocompatible
"显示中文帮助
if version >= 603
	set helplang=cn
	set encoding=utf-8
endif
"配色方案
"colorscheme murphy
"字体
if(has("gui_runing"))
	set guifont=Bitstream\Vera\Sans\Mono\10
endif
"打开状态栏标尺
set ruler
"突出显示当前行
set cursorline
"设置魔术
set magic
"隐藏工具栏
set guioptions-=T
"隐藏菜单栏
set guioptions-=m
"自动缩近
set autoindent
set cindent
"Tab键的宽度
set tabstop=4
"统一缩近为4
set softtabstop=4
set shiftwidth=4
"不用空格代替制表符
set noexpandtab
"在段和行开始处使用制表符
set smarttab

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 其它实用设置
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"当文件被改动时自动载入
set autoread
"共享剪贴板
set clipboard+=unnamed
"从不备份
set nobackup
set noswapfile
"自动保存
set autowrite
"处理未保存或只读文件时弹出确认
set confirm
"搜索忽略大小
set ignorecase
"搜索逐字符高亮
set hlsearch
set incsearch
"退格键正常处李indent,eol,start等
set backspace=2
"允许退格键和光标键跨越行边界
set whichwrap+=<,>,h,l
"通过:commands命令输出文件哪一行被修改过
set report=0
"高亮显示匹配的括号
set showmatch
"自动补全括号
:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(')')<CR>
:inoremap { {<CR>}<ESC>O
:inoremap } <c-r>=ClosePair('}')<CR>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(']')<CR>
:inoremap " ""<ESC>i
:inoremap ' ''<ESC>i
:inoremap < <><ESC>i
:inoremap > <c-r>=ClosePair('>')<CR>
function! ClosePair(char)
	if getline('.')[col('.')-1] == a:char
		return "\<Right>"
	else
		return a:char
	endif
endfunction
filetype plugin indent on
set completeopt=longest,menu
"编码
set enc=utf-8
set fencs=utf-8,gb18030,gbk,gb2312,cp936,usc-bom,shift-jis
set termencoding=utf-8
set encoding=utf-8
set fileencodings=utf-8,ucs-bom,cp936
set fileencoding=utf-8
"语言设置
set langmenu=zh_CN.UTF-8

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 新建文件标题
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
autocmd BufNewFile *.cpp,*.[ch],*.sh,*.java exec ":call SetFileTitle()"
"定义函数
func SetFileTitle()
    if $filetype == 'sh'
        call setline(1,"\#####################################################################")
        call append(line("."), "\# File Name:".expand("%"))
        call append(line(".")+1, "\# Author:")
        call append(line(".")+2, "\# Mail:@")
        call append(line(".")+3, "\# Created Time:".strftime("%c"))
        call append(line(".")+4, "\#####################################################################")
        call append(line(".")+5, "\#!/bin/bash")
        call append(line(".")+6, "")
    else
        call setline(1, "/*********************************************************************")
        call append(line("."), " > File Name:".expand("%"))
        call append(line(".")+1, " > Author:")
        call append(line(".")+2, " > Mail:@")
        call append(line(".")+3, " > Created Time:".strftime("%c"))
        call append(line(".")+4, "**********************************************************************/")
        call append(line(".")+5, "")
    endif
    if &filetype == 'cpp'
        call append(line(".")+6, "#include<iostream>")
	call append(line(".")+7, "using namespace std;")
	call append(line(".")+8, "")
    endif
    if &filetype == 'c'
        call append(line(".")+6, "#include<stdio.h>")
	call append(line(".")+7, "")
    endif
    autocmd BufNewFile * normal G
endfunc

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 键盘命令
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"去空行
nnoremap <F2> :g/^\s*$/d<CR>
"比较文件
nnoremap <C-F2> :vert diffsplit
"按F5编译运行C/C++
map <F5> :call CompileRunGcc()<CR>
func! CompileRunGcc()
    exec "w"
    if &filetype == 'c'
        exec "!gcc % -o %< && ./%<"
    elseif &filetype == 'cpp'
        exec "!g++ % -o %< && ./%<"
    elseif &filetype == 'sh'
        :!./%
    endif
endfunc
"按F8调式C/C++
map <F8> :call Rungdb()<CR>
func! Rungdb()
    exec "w"
    exec "!g++ % -g -o %< && gdb ./%<"
endfunc

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 插件设置
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"ctags设置
set tags=tags
let Tlist_Auto_Open=1
let Tlist_Sort_Type="name"
let Tlist_Use_Right_Window=0
let Tlist_Compart_Format=1
let Tlist_Exit_OnlyWindow=1
let Tlist_File_Fold_Auto_Close=0
let Tlist_Enable_Fold_Column=0
let Tlist_Show_One_File=1
"NERDTree树形文件导航插件
map <F10> :NERDTreeToggle

其中用到了几个插件,需要安装一下,fedora下 # yum install vim-taglist ctags vim-nerdtree即可,其中前两个是ctags插件,可以迅速定位变量、函数的声明和调用位置,显示程序中所有定义的变量和函数清单等;最后一个插件可以显示树形的目录和文件清单,我的配置中按F10键打开。

几个常用的技巧

1、切换分隔的不同窗口(或文件) Ctrl+w ,连续两次即可

2、改变分隔窗口的位置 Ctrl+W j 移到下边,h移到左边,k移到上边,l移到右边

3、改变分隔窗口的大小 n Ctrl+W >,其中>为增大,<为减小,n为增大或减小的数量

4、横向分隔  split,横向分隔并打开一个新文件 split 文件路径,纵向分隔vsplit

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值