VIM 打造 c/c++ IDE

1. vim 的安装

$sudo apt-get install vim vim-scripts vim-doc <br>

其中vim-scripts包含了vim的一些基本插件,包括语法高亮,缩进等等。
vim的中文文档tar包下载地址: http://sourceforge.net/projects/vimcdoc/files/vimcdoc/
解压后其中有个doc文件夹, 将其中的内容全部复制到~/.vim/doc, 或者vim安装目录下的doc目录中, 此时vim中的help信息已经是中文的了.
网页版中文帮助文档网址http://vimcdoc.sourceforge.net/doc/help.html
首页就时vim帮助文档的目录,阅读起来更方便有效、更有针对性!

2. vim的配置文件

vim系统的配置文件在 /usr/share/vim, /etc/vim 两个文件夹下,但是,可以修改 ~/.vimrc 文件和 ~/.vim 目录来对用户单独配置vim。

3. vim的基本配置

"---------------------------------- pathogen 设置-------------------------"pathogen插件用于管理其他vim插件,安装其他插件时候,可以直接解压覆盖到 .vim 目录下的 autoload, plugin, doc目录;"也可以安装完pathogen之后(会在autoload目录下有一个pathogen.vim,同时在.vim 下创建 bundles目录)进入 bundles目录,"执行 git clone xxxx 到bundles目录,利用 pathogen进行安装execute pathogen#infect()execute pathogen#helptags()

"定义快捷键的前缀,前缀类似于命令空间,避免多个相同的快捷键冲突"如 c, <header> c, <header><header> c 是三个不同的快捷键let mapleader=";"

"----------------------------------基本配置------------------------------"关闭兼容模式set nocompatible

"文件类型检测,可以针对不同类型的文件加载不同的插件filetype on"根据侦测的文件类型,加载相应的插件filetype plugin on

"vim 自身命令行 模式自动补全set wildmenu

"设置语法高亮if has("syntax")    syntax onendif 

"高亮光标所在的行set cul 

"用浅色高亮当前行autocmd InsertEnter * se cul

"设置行间隔set linespace=0

"设置退格键可用set backspace=2

"设置匹配模式,显示匹配的括号set showmatch

"整词换行set linebreak

"设置光标可以从行首或行末换到另一行去set whichwrap=b,s,<,>,[,] 

"设置使用鼠标set mouse=a

"显示行号set number

"标志预览窗口set previewwindow

"设置历史记录条数set history=50

"设置自动写回文件"自动把内容写回文件: 如文件被修改过,在每个 :next、:rewind、:last、:first、:previous、:stop、:suspend、  :tag、:!、:make、CTRL-]" 和 CTRL-^命令时进行;  用 :buffer、CTRL-O、CTRL-I、‘{A-Z0-9} 或 `{A-Z0-9}  命令转到别的文件时亦然。set autowrite

"---------------------------------配色方案------------------------------syntax enable

syntax on

"设置背景色set background=dark

"vim 配色方案"colorscheme solarizedcolorscheme desert

set t_Co=256

"设置字体set guifont=Consolas:h11

"---------------------------------设置宽度(tab等)----"设置tab宽度set tabstop=4

"设置软tab宽度,软tab,用空格代替tabset softtabstop=4

"自动缩进的宽度set shiftwidth=4

"----------------------------------设置对齐和缩进--------"设置自动对齐,(和上一行)set autoindent

"智能对齐"set smartindent

"使用c/c++语言的自动缩进方式set cindent

"设置c/c++语言的具体缩进方式set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s 

"不要用空格代替制表符set expandtab

"在行和段开始处使用制表符set smarttab

4. 代码折叠

  1. 折叠方式foldmethod
    vim提供以下6种方法来选定折叠方式:
    manual 手工定义折叠
    indent 更多的缩进表示更高级别的折叠
    expr 用表达式来定义折叠
    syntax 用语法高亮来定义折叠
    diff 对没有更改的文本进行折叠
    marker 对文中的标志折叠
  2. 折叠级别foldlevel
    ‘foldlevel’ 是个数值选项:数字越大则打开的折叠更多。
    当 ‘foldlevel’ 为 0 时,所有的折叠关闭。
    当 ‘foldlevel’ 为正数时,一些折叠关闭。
    当 ‘foldlevel’ 很大时,所有的折叠打开。
  3. 折叠栏foldcolumn
    ‘foldcolumn’ 是个数字,它设定了在窗口的边上表示折叠的栏的宽度。当为0时,没有折叠栏。最大是12。
    一个打开的折叠由一栏来表示,顶端是 ‘-‘,其下方是 ‘|’。这栏在折叠结束的地方结束。当折叠嵌套时,嵌套的折叠出现在被包含的折叠右方一个字符位置。
    一个关闭的折叠由 ‘+’ 表示。
    当折叠栏太窄而不能显示所有叠时,显示一数字来表示嵌套的级别。
    在折叠栏点击鼠标,可以打开和关闭折叠:
    (1)点击 ‘+’ 打开在这行的关闭折叠
    (2) 在任何其他非空字符上点击,关闭这行上的打开折叠
    在vim配置文件/home/user/.vimrc中加入如下的配置:
    "--fold setting--set foldmethod=syntax " 用语法高亮来定义折叠set foldlevel=100 " 启动vim时不要自动折叠代码set foldcolumn=5 " 设置折叠栏宽度
  4. 常用命令
    za 打开/关闭在光标下的折叠
    zA 循环地打开/关闭光标下的折叠
    zo 打开 (open) 在光标下的折叠
    zO 循环打开 (Open) 光标下的折叠
    zc 关闭 (close) 在光标下的折叠
    zC 循环关闭 (Close) 在光标下的所有折叠
    zM 关闭所有折叠
    zR 打开所有的折叠

5. quickfix 设置

通过quickfix命令集,可以在vim内编译程序,并且直接跳转到出错位置进行修正,

然后接着进行编译和修正,直到不再出错为止。在 vim的配置文件~/.vimrc文件中加入如下配置:

"-- QuickFix setting --" 按下F6,执行make cleanmap <F6> :make clean<CR><CR><CR>" 按下F7,执行make编译程序,并打开quickfix窗口,显示编译信息map <F7> :make<CR><CR><CR> :copen<CR><CR>" 按下F8,光标移到上一个错误所在的行map <F8> :cp<CR>" 按下F9,光标移到下一个错误所在的行map <F9> :cn<CR>" 以上的映射是使上面的快捷键在插入模式下也能用imap <F6> <ESC>:make clean<CR><CR><CR>imap <F7> <ESC>:make<CR><CR><CR> :copen<CR><CR>imap <F8> <ESC>:cp<CR>imap <F9> <ESC>:cn<CR>
下面的命令运行 "make" (包括你所给出的参数) 程序并捕捉其运行结果: >

:make {arguments}
如果编译时出现错误,按 ,回到vim界面,看不到出错信息了!这时,可以运行以下命令
:cw[indow] 打开quickfix窗口来查看出错信息,它会自动跳到第一处出错的地方。然后,你可以双击出错某一条出错信息,vim就会自动跳转到相应的出错位置
:cn[ext] 光标移到下一个错误所在的行
:cp[revious] 光标移到上一个错误所在的行
:cfirst 到第一处错误
:clast 到最后一处错误
:cc 空间不够时,Vim 会缩短出错信息。如果你想查看详细信息,可以使用此命令
:cl[ist] 列出所有出错信息的概览(只有那些含有文件名或行数的错误信息会被显示,需要查看那些并不含文件名或行数的信息可用“:cl[ist]!”命令)

6. ctags配置

ctags 可以建立源码树的标签索引,用于快速定位函数、变量等。

$sudo apt-get install ctags #安装ctags
$ ctags -R * #建立索引文件

~/.vimrc中对ctgs的使用进行配置

"-------------------------------------ctags设置----------------------------  "按下F5重新生成tag文件,并更新taglist  map <F5> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR>:TlistUpdate<CR>  imap <F5> <ESC>:!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR>:TlistUpdate<CR>  set tags=tags  set tags+=./tags "add current directory‘s generated tags file

tag命令用法:
Ctrl+] 跳到当前光标下单词的标签
Ctrl+O 返回上一个标签
Ctrl+T 返回上一个标签
:tag TagName 跳到TagName标签
以上命令是在当前窗口显示标签,当前窗口的文件替代为包标签的文件,当前窗口光标跳到标签位置。如果不希望在当前窗口显示标签,可以
:stag TagName 新窗口显示TagName标签,光标跳到标签处
Ctrl+W + ] 新窗口显示当前光标下单词的标签,光标跳到标签处
当一个标签有多个匹配项时(函数 (或类中的方法) 被多次定义),”:tags” 命令会跳转到第一处。如果在当前文件中存在匹配,那它将会被首先使用。
可以用这些命令在各匹配的标签间移动:
:tfirst 到第一个匹配
:[count]tprevious/tp 向前 [count] 个匹配
:[count]tnext/tn 向后 [count] 个匹配
:tlast 到最后一个匹配
或者使用以下命令选择要跳转到哪一个
:tselect TagName
输入以上命令后,vim会为你展示一个选择列表。然后你可以输入要跳转到的匹配代号 (在第一列)。其它列的信息可以让你知道标签在何处被定义过。
以下命令将在预览窗口显示标签
:ptag TagName 预览窗口显示TagName标签,光标跳到标签处
Ctrl+W + } 预览窗口显示当前光标下单词的标签,光标跳到标签处
:pclose 关闭预览窗口
:pedit file.h 在预览窗口中编辑文件file.h(在编辑头文件时很有用)
:psearch atoi 查找当前文件和任何包含文件中的单词并在预览窗口中显示匹配,在使用没有标签文件的库函数时十分有用。

5. 管理vim插件 pathogen

通过pathogen,可以管理vim插件。
当自己下载安装vim插件的时候,也可以在自己的插件子目录~/.vim下。在~/.vim 子目录下,设置插件目录plugin 和文档目录doc.
使用手动方式进行拷贝添加:解压  xxx.zip,将 解压后的目录中的 autoload, plugin, doc 目录中的文件拷贝到 ~/.vim目录下

对应的autoload, plugin, doc 目录中去(直接解压覆盖安装即可)。
或者使用pathogen 插件管理器来管理插件,pathogen在~/.vim/autoload目录下有 pathogen.vim, 然在.vim目录下建立
bundle目录,在bumdle目录下执行 git clone xxxx.git 获得插件,即可完成自动安装。同时,在.vimrc 文件中添加
execute pathogen#effect()
execute pathogen#helptags()

6. vim 自动补全 Onmicpp-Complete

    vim的自动补全功能可以通过 Omnicpp-Complete来实现。
在~/.vimrc 配置文件中进行配置:
"-- omnicppcomplete setting --" 按下F3自动补全代码,注意该映射语句后不能有其他字符,包括tab;否则按下F3会自动补全一些乱码imap <F3> <C-X><C-O>" 按下F2根据头文件内关键字补全imap <F2> <C-X><C-I>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 fileslet OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup windowlet OmniCpp_GlobalScopeSearch=1 " enable the global scope searchlet OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members"let OmniCpp_DefaultNamespaces=["std"]let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation and remove the last columnlet OmniCpp_ShowAccess=1
OnmiCppComplete是基于ctags数据库即tag文件来自动补全的,所以在使用ctags -R 生成tag文件时需要加入其他选项,

才能与OnmiCppComplete配合。
ctags -R —c++-kinds=+p —fields=+iaS —extra=+q .
—c++-kinds=+p : 为C++文件增加函数原型的标签
—fields=+iaS : 在标签文件中加入继承信息(i)、类成员的访问控制信息(a)、以及函数的指纹(S)
—extra=+q : 为标签增加类修饰符。注意,如果没有此选项,将不能对类成员补全
例如,为了添加标准c++的代码补全。

  1. 下载c++的源代码

    $sudo apt-get install build-essential  (源码会放在/usr/include/c++ 目录下)
    
  2. 然后生成和omnicppcomplete连接的tags文件
    在/usr/include/c++目录下执行,ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .  生成tags文件
    
  3. 在.vimrc 文件中添加
    set tags+=/usr/include/c++/tags
    

注意:在自动补全的点,Vim必须知道可能补全的定义。比如说,在namespace std命名空间下的变量和函数,必须要用using namespace std;暴露出来,否则是不能补全的。
在.cpp文件中还可以,在.h文件中这样就不是好的做法了。暂时不知道这个问题是由于我自己配置错误还是程序没有实现。
当自动补全下拉窗口弹出后,一些可用的快捷键:
Ctrl+P 向前切换成员
Ctrl+N 向后切换成员
Ctrl+E 表示退出下拉窗口, 并退回到原来录入的文字
Ctrl+Y 表示退出下拉窗口, 并接受当前选项
其他补全方式:
Ctrl+X Ctrl+L 整行补全
Ctrl+X Ctrl+N 根据当前文件里关键字补全
Ctrl+X Ctrl+K 根据字典补全
Ctrl+X Ctrl+T 根据同义词字典补全
Ctrl+X Ctrl+I 根据头文件内关键字补全
Ctrl+X Ctrl+] 根据标签补全
Ctrl+X Ctrl+F 补全文件名
Ctrl+X Ctrl+D 补全宏定义
Ctrl+X Ctrl+V 补全vim命令
Ctrl+X Ctrl+U 用户自定义补全方式
Ctrl+X Ctrl+S 拼写建议
帮助文档
:help omnicppcomplete

7. 提示函数原型 echo_func

echofunc可以在命令行中提示当前输入函数的原型。
echofunc下载地址:<http://www.vim.org/scripts/script.php?script_id=1735> 下载完成后,把echofunc.vim文件放到 ~/.vim/plugin

文件夹中
当你在vim插入(insert)模式下紧接着函数名后输入一个”(“的时候, 这个函数的声明就会自动显示在命令行中。如果这个函数有多个声明,
则可以通过按键”Alt+-“和”Alt+=”向前和向后翻页,
这个两个键可以通过设置g:EchoFuncKeyNext和g:EchoFuncKeyPrev参数来修改。这个插件需要tags文件的支持,
并且在创建tags文件的时候要加选项”—fields=+lS”(OmniCppComplete创建的tag文件也能用),
整个创建tags文件的命令如下:
$ ctags -R —fields=+lS

8. 标签浏览器 TagList

Taglist了列出了当前文件中的所有标签,宏、变量、函数等。

安装taglist: 下载taglist 的压缩包, 解压缩到 ~/.vim 目录覆盖 doc和plugin目录即可。
配置taglist:

"-- Taglist setting --let Tlist_Ctags_Cmd=‘ctags‘ "因为我们放在环境变量里,所以可以直接执行let Tlist_Use_Right_Window=1 "让窗口显示在右边,0的话就是显示在左边let Tlist_Show_One_File=0 "让taglist可以同时展示多个文件的函数列表let Tlist_File_Fold_Auto_Close=1 "非当前文件,函数列表折叠隐藏let Tlist_Exit_OnlyWindow=1 "当taglist是最后一个分割窗口时,自动推出vim"是否一直处理tags.1:处理;0:不处理let Tlist_Process_File_Always=1 "实时更新tagslet Tlist_Inc_Winwidth=0

进入vim后用命令":Tlist"打开/关闭taglist窗口帮助文档:help taglist.txt

9. cscope 设置

Cscope是一个类似于ctags的工具,不过其功能比ctags强大很多。
  1. 安装Cscope
    $ sudo apt-get install cscope
  2. 在vim配置文件/home/user/.vimrc中加入如下的配置:
    if has(“cscope”)
    set csprg=/usr/bin/cscope “ 指定用来执行cscope的命令
    set csto=0 “ 设置cstag命令查找次序:0先找cscope数据库再找标签文件;1先找标签文件再找cscope数据库
    set cst “ 同时搜索cscope数据库和标签文件
    set cscopequickfix=s-,c-,d-,i-,t-,e- “ 使用QuickFix窗口来显示cscope查找结果
    set nocsverb
    if filereadable(“cscope.out”) “ 若当前目录下存在cscope数据库,添加该数据库到vim
    cs add cscope.out
    elseif $CSCOPE_DB != “” “ 否则只要环境变量CSCOPE_DB不为空,则添加其指定的数据库到vim
    cs add $CSCOPE_DB
    endif
    set csverb
    endif

map :cs add ./cscope.out . :cs reset
imap :cs add ./cscope.out . :cs reset
“ 将:cs find c等Cscope查找命令映射为c等快捷键(按法是先按Ctrl+Shift+-, 然后很快再按下c)
nmap s :cs find s =expand(““) :copen
nmap g :cs find g =expand(““)
nmap d :cs find d =expand(““) :copen
nmap c :cs find c =expand(““) :copen
nmap t :cs find t =expand(““) :copen
nmap e :cs find e =expand(““) :copen
nmap f :cs find f =expand(““)
nmap i :cs find i =expand(““) :copen

  1. cscope的主要功能是通过其”find”子命令来实现的
    “cscope find”的用法:
    cs find c|d|e|f|g|i|s|t name
    0 或 s 查找这个 C 符号(可以跳过注释)
    1 或 g 查找这个定义
    2 或 d 查找这个函数调用的函数
    3 或 c 查找调用过这个函数的函数
    4 或 t 查找这个字符串
    6 或 e 查找这个 egrep 模式
    7 或 f 查找这个文件
    8 或 i 查找包含这个文件的文件
  2. 用法:
    <1>、为源码建立一个cscope数据库
    $ cscope -Rbq
    $ ls cscope.*
    cscope.in.out cscope.out cscope.po.out
    <2>、用vim打开某个源码文件,末行模式下,输入“:cs add cscope.out”(该命令已被我们映射为快捷键F4),添加cscope数据库到vim。因为我们已将vim配置为启动时,自动添加当前目录下的cscope数据库,所以你再添加该cscope数据库时,vim会提示“重复cscope数据库 未被加入“
    <3>、完成前两步后,现在就可以用“cs find c”等Cscope查找命令查找关键字了。我们已在.vimrc中将“cs find c”等Cscope查找命令映射为c等快捷键(按法是先按Ctrl+Shift+-, 然后很快按下c)

帮助文档
:help ifcscop
注意:帮助文档if_cscop中,快捷键映射nmap <C-
>i :cs find i ^=expand(““)$是有误的!
比如光标“header.h”上按下i,也就是查找包含“header.h“的文件。但是按照这个映射规则,则是将i映射为cs find i ^header.h$,也就是查找包含“^header.h$“的文件,这显然不是我们想要的结果。该映射规则应该改成nmap i :cs find i =expand(““)

10. vim 常用快捷键

%  跳转到配对的括号去[[  跳转到当前或者上一代码块(函数定义、类定义等)的开头去(但要求代码块中‘{‘必须单独占一行)][  跳转到当前代码块(函数定义、类定义等)的结尾去(但要求代码块中‘{‘必须单独占一行)]]  跳转到下一代码块(函数定义、类定义等)的开头去(但要求代码块中‘{‘必须单独占一行)[/  跳到注释开头(只对/* */注释有效)]/ 跳到注释结尾(只对/* */注释有效)gD  跳转到当前文件内标识符首次出现的位置,可用于跳转到全部变量的定义处;查找局部变量时,  要是多个函数中定义了该局部变量,使用gD进行查找,找到的变量定义可能不是你需要的gd 跳转到当前函数内标识符首次出现的位置,可用于跳转到局部变量的定义处‘‘  跳转到光标上次停靠的地方, 是两个\`,   而不是一个双引号mx  设置书签,x只能是a-z的26个字母`x  跳转到书签处("`"是1左边的键)>  增加缩进,"x>"表示增加以下x行的缩进<  减少缩进,"x<"表示减少以下x行的缩进
参考文章:

http://www.cnblogs.com/zhangsf/archive/2013/06/13/3134409.html

时间: 2024-08-29 12:24:03

VIM 打造 c/c++ IDE的相关文章

两个命令把Vim打造为python IDE

curl -O https://raw.githubusercontent.com/vince67/v7_config/master/vim.sh bash vim.sh 原文地址:https://www.cnblogs.com/ziheIT/p/8971916.html

vim+python打造自己的IDE插件推荐

今天同事小伙伴突然告诉我说,他用的编辑器sublime3导致笔记本突然卡顿,看当时内存吃到了30G,而他笔记本总共才8G内存,怀疑是内存泄漏,果断换回了原来用的PyCharm.因为我也用PyCharm学习python,深知它的内存使用基本也在1G以上,听到他这个消息,我决定还是换回我一直习惯的vim,毕竟"编辑器之神"并非浪的虚名. 所谓打造,其实就是找一些适合自己的插件,先简单总结一些,我亲测过的几个插件.开始之前先说明一点,这里提到的几个插件都是非常强大和有名气的,但所谓适合自己的

使用VIM打造IDE(针对C语言)

=============================== 话不多说,先来看看效果 =============================== ================================ 使用vim打造IDE, 针对C语言开发者 建议使用gvim ================================ # 安装ruby, command-t插件会用到 sudo apt install ruby ruby-dev # 安装vim, vim-gtk sudo

vim打造IDE

1.首先安装插件管理器 Pathogen Install to ~/.vim/autoload/pathogen.vim mkdir -p ~/.vim/autoload ~/.vim/bundle && curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim 在Centos家目录中新建.vimrc文件,添加: execute pathogen#infect() syntax on filetype plugi

【转】手把手教你把Vim改装成一个IDE编程环境(图文)

手把手教你把Vim改装成一个IDE编程环境(图文) By: 吴垠 Date: 2007-09-07 Version: 0.5 Email: lazy.fox.wu#gmail.com Homepage: http://blog.csdn.net/wooin Copyright: 该文章版权由吴垠和他可爱的老婆小包子所有.可在非商业目的下任意传播和复制.对于商业目的下对本文的任何行为需经作者同意.联系方式:lazy.fox.wu#gmail.com 1 写在前面   Linux下编程一直被诟病的一

Use Vim as a Python IDE

Use Vim as a Python IDE I love vim and often use it to write Python code. Here are some useful plugins and tools for building a delightful vim python environment, escpecially for Vim8: 我喜欢vim,经常用它来编写Python代码.以下是一些有用的插件和工具,用于构建令人愉快的vim-python环境,尤其是vim

vim打造开发IDE

个人的插件和配置 set nocompatible " 去除VI一致性,必须要添加 filetype off " 必须要添加 " advanced keys " :qa! close all the tabs set cursorline set nu " parameter for ctags set autochdir set tags=tags; " parameter for NERDTree " autocmd VimEnte

vim 打造IDE

1.MinBufExplorer 2.Ctags Ctags工具是用来遍历源代码文件生成tags文件,这些tags文件能被编辑器或其它工具用来快速查找定位源代码中的符号(tag/symbol),如变量名,函数名等.比如,tags文件就是Taglist和OmniCppComplete工作的基础. [[email protected] ~]#ctags -R Ctrl-]    跳转到光标所在符号的定义. Ctrl-t    回到上次跳转前的位置. 3.TagList Taglist是vim的一个插

centos7使用vim打造强大的python IDE

编译升级vim centos7.3自带的vim是7.4.*版本, YouCompleteMe需要Vim 7.4.1578+我这里编译安装vim8.0 # 移除旧版本 sudo yum remove vim -y # 安装必要组件 sudo yum install ncurses-devel python-devel -y # 下载源码编译安装 git clone https://github.com/vim/vim.git cd vim/src # 根据自己实际情况设置编译参数 ./config