700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Linux——VIM开发C++自动补全(STL 括号)和开发环境配置

Linux——VIM开发C++自动补全(STL 括号)和开发环境配置

时间:2020-01-18 17:39:57

相关推荐

Linux——VIM开发C++自动补全(STL 括号)和开发环境配置

首先确定vim编辑.cc或者.cpp文件时当前自动补全函数,在命令模式下输入

:set omnifunc?

如果得到的结果为:omnifunc=ccomplete#Complete,说明有必要进行以下的操作以实现针对c++的自动补全

1 首先安装OmniCppComplete,参见:

/scripts/script.php?script_id=1520

安装的过程很简单,与大多数vim插件一样,cd到~/.vim/目录解压所下载的文件即可(这个~目录是当前用户的~目录,如果是root的,那么全局有效,如果只是当前用户,只有在当前用户下有效,新手要搞清楚这个)

2 在~/.vim/目录下创建tags子目录

3 创建stdc++ 对应的tags:

A)首先下载经高手修改定制的libstdc++头文件,可以到这里下载:

/scripts/script.php?script_id=2358

并将其解压到~/.vim/tags

B) 运行以下命令

cd/.vim/tags ctags -R –c++-kinds=+p –fields=+iaS –extra=+q –language-force=C++ cpp_src

在~/.vimrc文件里添加tags文件的路径,我的STL源码目录是~/.vim/tags/cpp_src,所以就在.vimrc里加这么一句

set tags+=~/.vim/tags/cpp_src/tags

4 修改~/.vimrc文件

在其中加入以下内容:

"This line should not be removed as it ensures that various options are" properly set to work with the Vim-related packages available in Debian.debian.vim" Uncomment the next line to make Vim more Vi-compatible" NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous" options, so any other options should be set AFTER setting 'compatible'.set nocompatible" Vim5 and later versions support syntax highlighting. Uncommenting the" following enables syntax highlighting by default.if has("syntax")syntax on " 语法高亮endifcolorscheme ron " elflord ron peachpuff default 设置配色方案,vim自带的配色方案保存在/usr/share/vim/vim72/colors目录下" detect file typefiletype onfiletype plugin on" If using a dark background within the editing area and syntax highlighting" turn on this option as wellset background=dark" Uncomment the following to have Vim jump to the last position when" reopening a fileif has("autocmd")au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif"have Vim load indentation rules and plugins according to the detected filetypefiletype plugin indent onendif" The following are commented out as they cause vim to behave a lot" differently from regular Vi. They are highly recommended though."set ignorecase " 搜索模式里忽略大小写"set smartcase " 如果搜索模式包含大写字符,不使用 'ignorecase' 选项。只有在输入搜索模式并且打开 'ignorecase' 选项时才会使用。set autowrite " 自动把内容写回文件: 如果文件被修改过,在每个 :next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:!、:make、CTRL-] 和 CTRL-^命令时进行;用 :buffer、CTRL-O、CTRL-I、'{A-Z0-9} 或 `{A-Z0-9} 命令转到别的文件时亦然。set autoindent " 设置自动对齐(缩进):即每行的缩进值与上一行相等;使用 noautoindent 取消设置"set smartindent " 智能对齐方式set tabstop=4 " 设置制表符(tab键)的宽度set softtabstop=4" 设置软制表符的宽度 set shiftwidth=4 " (自动) 缩进使用的4个空格set cindent " 使用 C/C++ 语言的自动缩进方式set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s"设置C/C++语言的具体缩进方式"set backspace=2 " 设置退格键可用set showmatch " 设置匹配模式,显示匹配的括号set linebreak " 整词换行set whichwrap=b,s,<,>,[,] " 光标从行首和行末时可以跳到另一行去"set hidden " Hide buffers when they are abandonedset mouse=a " Enable mouse usage (all modes) "使用鼠标set number " Enable line number "显示行号"set previewwindow " 标识预览窗口"--状态行设置--set laststatus=2 " 总显示最后一个窗口的状态行;设为1则窗口数多于一个的时候显示最后一个窗口的状态行;0不显示最后一个窗口的状态行set ruler " 标尺,用于显示光标位置的行号和列号,逗号分隔。每个窗口都有自己的标尺。如果窗口有状态行,标尺在那里显示。否则,它显示在屏幕的最后一行上。"--命令行设置--set showcmd " 命令行显示输入的命令set showmode " 命令行显示vim当前模式"--find setting--set incsearch " 输入字符串就显示匹配点set hlsearch" configure tags - add additional tags here or comment out not-used onesset tags+=~/.vim/tags/cppset tags+=~/.vim/tags/glset tags+=~/.vim/tags/fl " build tags of your own project with CTRL+F12map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>" OmniCppCompletelet OmniCpp_NamespaceSearch = 1let OmniCpp_GlobalScopeSearch = 1let OmniCpp_ShowAccess = 1let OmniCpp_ShowPrototypeInAbbr = 1 " show function parameterslet OmniCpp_MayCompleteDot = 1 " autocomplete after .let OmniCpp_MayCompleteArrow = 1 " autocomplete after ->let OmniCpp_MayCompleteScope = 1 " autocomplete after ::let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]" automatically open and close the popup menu / preview windowau CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endifset completeopt=menuone,menu,longest,preview

5 检验

用vim打开cpp文件,输入

std::

将得到std命名空间的所有标示符,按CTRL+N或者CTRL+P选择

继续输入std::vector vi,然后输入

vi.

vim将自动提示其成员

我拉.vimrc(这个文件是在~文件夹下,用 ls -al 就可以看到)

" configure tags - add additional tags here or comment out not-used onesset tags+=~/.vim/tags/cpp_src/tagsset tags+=~/.vim/tags/glset tags+=~/.vim/tags/fl" build tags of your own project with CTRL+F12map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>" OmniCppCompletelet OmniCpp_NamespaceSearch = 1let OmniCpp_GlobalScopeSearch = 1let OmniCpp_ShowAccess = 1let OmniCpp_ShowPrototypeInAbbr = 1 " show function parameterslet OmniCpp_MayCompleteDot = 1 " autocomplete after .let OmniCpp_MayCompleteArrow = 1 " autocomplete after ->let OmniCpp_MayCompleteScope = 1 " autocomplete after ::let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]" automatically open and close the popup menu / preview windowau CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endifset completeopt=menuone,menu,longest,preview"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""键盘命令""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""nmap <leader>w :w!<cr>nmap <leader>f :find<cr>" 映射全选+复制 ctrl+amap <C-A> ggVGYmap! <C-A> <Esc>ggVGYmap <F12> gg=G" 选中状态下 Ctrl+c 复制vmap <C-c> "+y"去空行 nnoremap <F2> :g/^\s*$/d<CR> "比较文件 nnoremap <C-F2> :vert diffsplit "新建标签 map <M-F2> :tabnew<CR> "列出当前目录文件 map <F3> :tabnew .<CR> "打开树状文件目录 map <C-F3> \be "C,C++ 按F5编译运行map <F5> :call CompileRunGcc()<CR>func! CompileRunGcc()exec "w"if &filetype == 'c'exec "!g++ % -o %<"exec "! ./%<"elseif &filetype == 'cpp'exec "!g++ % -o %<"exec "! ./%<"elseif &filetype == 'java' exec "!javac %" exec "!java %<"elseif &filetype == 'sh':!./%endifendfunc"C,C++的调试map <F8> :call Rungdb()<CR>func! Rungdb()exec "w"exec "!g++ % -g -o %<"exec "!gdb ./%<"endfunc""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""实用设置"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 设置当文件被改动时自动载入set autoread" quickfix模式autocmd FileType c,cpp map <buffer> <leader><space> :w<cr>:make<cr>"代码补全 set completeopt=preview,menu "允许插件 filetype plugin on"共享剪贴板 set clipboard+=unnamed "从不备份 set nobackup"make 运行:set makeprg=g++\ -Wall\ \ %"自动保存set autowriteset ruler " 打开状态栏标尺set magic " 设置魔术set guioptions-=T " 隐藏工具栏set guioptions-=m " 隐藏菜单栏"set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&encoding}\ %c:%l/%L%)\" 设置在状态行显示的信息set foldcolumn=0set foldmethod=indent set foldlevel=3 set foldenable " 开始折叠" 不要使用vi的键盘模式,而是vim自己的set nocompatible" 语法高亮set syntax=on" 去掉输入错误的提示声音set noeb" 在处理未保存或只读文件的时候,弹出确认set confirm" 自动缩进set autoindentset cindent" Tab键的宽度set tabstop=4" 统一缩进为4set softtabstop=4set shiftwidth=4" 不要用空格代替制表符set noexpandtab" 在行和段开始处使用制表符set smarttab" 显示行号set number" 历史记录数set history=1000"禁止生成临时文件set nobackupset noswapfile"搜索忽略大小写set ignorecase"搜索逐字符高亮set hlsearchset incsearch"行内替换set gdefault"编码设置set enc=utf-8set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936"语言设置set langmenu=zh_CN.UTF-8set helplang=cn" 我的状态行显示的内容(包括文件类型和解码)"set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}"set statusline=[%F]%y%r%m%*%=[Line:%l/%L,Column:%c][%p%%]" 总是显示状态行set laststatus=2" 命令行(在状态行下)的高度,默认为1,这里是2set cmdheight=2" 侦测文件类型filetype on" 载入文件类型插件filetype plugin on" 为特定文件类型载入相关缩进文件filetype indent on" 保存全局变量set viminfo+=!" 带有如下符号的单词不要被换行分割set iskeyword+=_,$,@,%,#,-" 字符间插入的像素行数目set linespace=0" 增强模式中的命令行自动完成操作set wildmenu" 使回格键(backspace)正常处理indent, eol, start等set backspace=2" 允许backspace和光标键跨越行边界set whichwrap+=<,>,h,l" 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位)set mouse=aset selection=exclusiveset selectmode=mouse,key" 通过使用: commands命令,告诉我们文件的哪一行被改变过set report=0" 在被分割的窗口间显示空白,便于阅读set fillchars=vert:\ ,stl:\ ,stlnc:\" 高亮显示匹配的括号set showmatch" 匹配括号高亮的时间(单位是十分之一秒)set matchtime=1" 光标移动到buffer的顶部和底部时保持3行距离set scrolloff=3" 为C程序提供自动缩进set smartindent" 高亮显示普通txt文件(需要txt.vim脚本)au BufRead,BufNewFile * setfiletype txt"自动补全:inoremap ( ()<ESC>i:inoremap ) <c-r>=ClosePair(')')<CR>:inoremap { {}<ESC>i:inoremap } <c-r>=ClosePair('}')<CR>:inoremap [ []<ESC>i:inoremap ] <c-r>=ClosePair(']')<CR>:inoremap " ""<ESC>i:inoremap ' ''<ESC>ifunction! ClosePair(char)if getline('.')[col('.') - 1] == a:charreturn "\<Right>"elsereturn a:charendifendfunctionfiletype plugin indent on "打开文件类型检测, 加了这句才可以用智能补全set completeopt=longest,menu"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" CTags的设定 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""let Tlist_Sort_Type = "name" " 按照名称排序 let Tlist_Use_Right_Window = 1 " 在右侧显示窗口 let Tlist_Compart_Format = 1 " 压缩方式 let Tlist_Exist_OnlyWindow = 1 " 如果只有一个buffer,kill窗口也kill掉buffer let Tlist_File_Fold_Auto_Close = 0 " 不要关闭其他文件的tags let Tlist_Enable_Fold_Column = 0 " 不要显示折叠树 autocmd FileType java set tags+=D:\tools\java\tags "autocmd FileType h,cpp,cc,c set tags+=D:\tools\cpp\tags "let Tlist_Show_One_File=1 "不同时显示多个文件的tag,只显示当前文件的"设置tags set tags=tags "set autochdir """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""其他东东""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""默认打开Taglist let Tlist_Auto_Open=1

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。