vim 配置代码自动补齐

1.插件准备

1.1下载OmniComplete传送门
1.2下载C++标准库索引文件:传送门

2.解压和安装准备

tar -jxvf 压缩包名称

(1)此时在当前解压出两个目录,一个cpp_src,一个omnicppcomplete-0.41,然后进入cpp_src
执行ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f 【生成的tags文件名】,若不写-f执行,则默认生成tags.
执行的指令为:ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f 生成的tags文件名
此时能在cpp_src目录下找到一个生成的tags文件。这里head的绝对路径因人而已。可以用pwd命令查看。

(2)然后是安装omnicppcomplete-0.41插件,首查档先进入当前用户目录 cd ~
然后执行ls -la查看用户目录下是否有.vim目录 和.vimrc文件。若没有则创建.vim目录
终端命令为mkdir .vim, 此时解压后的omnicppcomplete-0.41下有三个目录,分别是after、 Autoloadh和common,将这三个目录复制到用户目录下的.vim目录,该插件就算安装完了。

(3)然后是写vim的配置,若用户目录下没有.vimrc文件,则手动创建一个: touch .vimrc
然后通过gedit .vimrc打开编辑,如下的信息(这里需要修改的为set tags+=/home/firecar/vim简单配置/cpp_src/生成的tags文件名 将其路径改为(1)生成的索引文件)。

"允许插件  
filetype plugin on
" 设置行号
set number
" 语法高亮。自动识别代码,使用多种颜色表示
syntax enable
" 支持使用鼠标
set mouse=a
" 按下回车键后,下一行的缩进会自动跟上一行的缩进保持一致
set autoindent
" 按下Tab键后,vim显示的空格数
set tabstop=4
" normal模式下,>>增加一级缩进、<<取消一级缩进、==取消全部缩进时,每一级缩进的空格数
set shiftwidth=4
" 自动将Tab转为空格(防止Tab键在不同编辑器缩进不一致导致问题)
set expandtab
" Tab转为多少个空格
set softtabstop=4

"设置文件的代码形式 utf8
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
set fileencodings=ucs-bom,utf-8,chinese,cp936



"新建.c,.h,.cpp文件,自动插入文件头 
autocmd BufNewFile *.cpp,*.[ch],*.sh,*.java exec ":call SetTitle()" 
""定义函数SetTitle,自动插入文件头 
func SetTitle() 

	if &filetype == 'cpp'
                call setline(1,"#include<iostream>") 
		call append(line("."), "using namespace std;")
		call append(line(".")+1, "")
	endif
	if &filetype == 'c'
		call setline(1,"#include<stdio.h>") 
		call append(line("."), "#include<stdlib.h>;")
		call append(line(".")+1, "")
	endif
	"新建文件后,自动定位到文件末尾
	autocmd BufNewFile * normal G
endfunc 


"补全括号和花括号(换行四次)   
: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

function! ClosePair(char)
	if getline('.')[col('.') - 1] == a:char
		return "\<Right>"
	else
		return a:char
	endif
endfunction
filetype plugin indent on 

"使用tab自动补全的设定
function! CleverTab()
        if strpart( getline('.'), 0, col('.')-1 ) =~ '^\s*$'
                return "\<Tab>"
        else
                return "\<C-N>"
        endif
endfunction
inoremap <Tab> <C-R>=CleverTab()<CR>

"C,C++ 按F5编译运行
map <F5> :call CompileRunGcc()<CR>
func! CompileRunGcc()
	exec "w"
	if &filetype == 'c'
		exec "!g++ % -o %<"
		exec "! %<"
	elseif &filetype == 'cpp'
		echo "Compiling ..."
                exec "!g++ % -o %< -std=c++11"
                echo "Compiled successfully ..."
                exec "! %<"
	elseif &filetype == 'java' 
		exec "!javac %" 
		exec "!java %<"
	elseif &filetype == 'sh'
		:!./%
	elseif &filetype == 'py'
		exec "!python %"
		exec "!python %<"
	endif
endfunc

"C,C++的调试
map <F8> :call Rungdb()<CR>
func! Rungdb()
	exec "w"
	exec "!g++ % -g -o %<"
	"exec "!gdb ./%<"
endfunc


set tags+=/usr/share/vim/peizhi/cpp_src/head            " 修改为刚开始生成索引文件的绝对路径


" OmniCppComplete
let OmniCpp_DisplayMode=1           "显示类成员
let OmniCpp_NamespaceSearch = 1
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_ShowAccess = 1
let OmniCpp_ShowPrototypeInAbbr = 1 " 显示函数参数列表
let OmniCpp_MayCompleteDot = 1   " 输入 .  后自动补全
let OmniCpp_MayCompleteArrow = 1 " 输入 -> 后自动补全
let OmniCpp_MayCompleteScope = 1 " 输入 :: 后自动补全
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
" 自动关闭补全窗口
au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
set completeopt=menuone,menu,longest



set autowriteall
set updatetime=500

"按下F12自动更新tags
map <F12> :call Rungdbe()<CR>
func! Rungdbe()
	exec "w"                
	exec "!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q"     
endfunc


highlight Pmenu ctermbg=gray ctermfg=black    " 背景为灰色 ,字体为黑色
highlight PmenuSel ctermbg=black ctermfg=yellow  " 选中的那一行背景为黑色,字体为黄色
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值