之前把vim弄得乱七八糟,这次重新弄了一下。
现在主要有以下功能和对应插件:
1 按 . 或 :: 或 -> 的自动补全,补全是根据自定义的类型以及C++标准库类型 ;快捷键跳转到函数定义: 插件ctags,插件omnicppcomplete
2 注释等快捷键:插件c-support
3 在输入代码时自动匹配,不用按快捷键,匹配语言关键字或是曾经输入的历史记录:插件autocomplpop
4 目录树显示:插件nerdtree
5 每个文件的函数名,等显示:插件taglist(依赖于ctags)
具体这些插件怎么安装,没时间写了,可以搜索这些插件的使用方法。
现把~/.vim文件夹下的目录结构截图:
配置文件~/.vimrc的内容如下:
配置文件日期:2013.04.21 21:36
colorscheme jungle
set hlsearch
set backspace=2
set autoindent
set ruler
set showmode
set bg=dark
set nobackup " 覆盖文件时不备份
set autochdir " 自动切换当前目录为当前文件所在的目录
"filetype plugin indent on " 开启插件
set noerrorbells " 关闭错误信息响铃
set novisualbell " 关闭使用可视响铃代替呼叫
set t_vb= " 置空错误铃声的终端代码
set t_Co=256
"自动缩进的时候,缩进尺寸为4个空格
set sw=4
"Tab宽度为4个字符
set ts=4
"可以使用鼠标
set mouse=a
"使用C样式的缩进
set cindent
"为C程序提供自动缩进
set smartindent
"打开 C/C++ 风格的自动缩进。 打开了自动缩进后, 在编码的时候我们可以使用“V”命令选中一段文本后.
set cin
" 设定默认解码
set fenc=utf-8
set fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936
" 不要使用vi的键盘模式,而是vim自己的
set nocompatible
" history文件中需要记录的行数
set history=100
" 在处理未保存或只读文件的时候,弹出确认
set confirm
" 与windows共享剪贴板
set clipboard+=unnamed
" 侦测文件类型
filetype on
" 载入文件类型插件
filetype plugin on
" 为特定文件类型载入相关缩进文件
filetype indent on
"取消补全内容以分割子窗口形式出现,只显示补全列表
set completeopt=longest,menu
" 保存全局变量
set viminfo+=!
" 带有如下符号的单词不要被换行分割
set iskeyword+=_,$,@,%,#,-
" 语法高亮
syntax on
" 高亮字符,让其不受100列限制
:highlight OverLength ctermbg=red ctermfg=white guibg=red guifg=white
:match OverLength '\%101v.*'
" 状态行颜色
highlight StatusLine guifg=SlateBlue guibg=Yellow
highlight StatusLineNC guifg=Gray guibg=White
" C++的编译和运行
map <F6> :call CompileRunGpp()<CR>
func! CompileRunGpp()
exec "w"
exec "!g++ % -o %<"
exec "! ./%<"
endfunc
" C的编译和运行
map <F5> :call CompileRunGcc()<CR>
func! CompileRunGcc()
exec "w"
exec "!gcc % -o %<"
exec "! ./%<"
endfunc
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Autocommands
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 只在下列文件类型被侦测到的时候显示行号,普通文本文件不显示
if has("autocmd")
autocmd FileType xml,html,c,cs,java,perl,shell,bash,cpp,python,vim,php,ruby,nc set number
autocmd FileType xml,html vmap <C-o> <ESC>'<i<!--<ESC>o<ESC>'>o-->
autocmd FileType java,c,cpp,nc,cs vmap <C-o> <ESC>'<o
autocmd FileType html,text,php,vim,c,nc,java,xml,bash,shell,perl,python setlocal textwidth=100
autocmd Filetype html,xml,xsl source $VIMRUNTIME/plugin/closetag.vim
"autocmd BufReadPost *
\ if line("'"") > 0 && line("'"") <= line("$") |
\ exe "normal g`"" |
\ endif
endif " has("autocmd")
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Plugin configuration
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" NERDTree
let NERDTreeMouseMode = 3 "单击打开文件和文件夹
map <F8> :NERDTreeToggle<CR>
" taglist
let Tlist_Auto_Highlight_Tag = 1
let Tlist_Auto_Open = 0
let Tlist_Auto_Update = 1
let Tlist_Close_On_Select = 0
let Tlist_Compact_Format = 0
let Tlist_Display_Prototype = 1
let Tlist_Display_Tag_Scope = 0
let Tlist_Enable_Fold_Column = 0
let Tlist_Exit_OnlyWindow = 1
let Tlist_File_Fold_Auto_Close = 0
let Tlist_GainFocus_On_ToggleOpen = 1
let Tlist_Hightlight_Tag_On_BufEnter = 1
let Tlist_Inc_Winwidth = 0
let Tlist_Use_Right_Window = 1 "在右侧窗口中显示taglist窗口
let Tlist_Show_One_File = 1 "只显示一个文件的list
let Tlist_Use_SingleClick = 1 "点击一次就显示成员或变量定义的位置
map <F12> :TlistToggle<CR>
"""""""""""""""""""""""""""""""""""""""""""""""""""""
" => 自动补全
""""""""""""""""""""""""""""""""""""""""""""""""""""""
"au FileType php setlocal dict+=/etc/vim/php_funclist.txt
"php 中 一般是会在 $, ->, :: 后需要出现自动补全,在 .vimrc 中加入以下代码:
"if !exists('g:AutoComplPop_Behavior')
" let g:AutoComplPop_Behavior = {}
" let g:AutoComplPop_Behavior['php'] = []
" call add(g:AutoComplPop_Behavior['php'], {
" \ 'command' : "\<C-x>\<C-o>",
" \ 'pattern' : printf('\(->\|::\|\$\)\k\{%d,}$', 0),
" \ 'repeat' : 0,
" \})
"endif
"2013-4-15添加
"-- omnicppcomplete setting --
set completeopt=menu,menuone
let OmniCpp_MayCompleteDot = 1 " autocomplete with .
let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->
let OmniCpp_MayCompleteScope = 1 " autocomplete with ::
let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)
let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files
let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup window
let OmniCpp_GlobalScopeSearch=1
let OmniCpp_DisplayMode=1
let OmniCpp_ShowAccess = 1
let OmniCpp_DefaultNamespaces=["std"]
" -- ctags setting 2013.4.16 11:06
set nocp
autocmd FileType c,cpp,cc set tags+=~/.vim/tags/cpptags
autocmd FileType nc set tags+=~/.vim/tags/nesCtags
au BufWritePost *.c,*.cpp,*.cc,*.nc,*.h !ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
"在 Vim 中实现括号自动补全:
":inoremap ( ()<ESC>i
":inoremap ) <c-r>=ClosePair(')')<CR>
":inoremap { {}<ESC>i
":inoremap } <c-r>=ClosePair('}')<CR>
":inoremap [ []<ESC>i
":inoremap ] <c-r>=ClosePair(']')<CR>
"function ClosePair(char)
" if getline('.')[col('.') - 1] == a:char
" return "\<Right>"
" else
" return a:char
" endif
"endf
" 查看方法输入:Man api_name
source $VIMRUNTIME/ftplugin/man.vim
" 映射之后就可以少按一下 Shift 键。
cmap man Man
" 在普通模式下按下 K (大写)即可启动 man 查看光标下的函数。
nmap K :Man <cword><CR>
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => nesC配置
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
augroup filetypedetect
au! BufRead,BufNewFile *nc setfiletype nc
augroup END
传一张最终的效果图: