构建VIM下的C++编程环境

时间:2021-05-01 09:48:40

1、VIM配置

  Vim强大的配置与功能,其来源基本上就两个地方:Vim插件以及Vim配置文件
  Vim本身的系统配置文件夹是在/usr/share/vim/和/etc/vim/两个文件夹下。一般情况下,我们不需要改变这两个文件夹下的配置文件,只需在自身用户文件夹/home/username(其中,username为用户名,我的用户名是xiaoku)下建立自己的配置文件(.vimrc)。

  一个具有语法高亮的.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 " 语法高亮
endif
colorscheme ron " elflord ron peachpuff default 设置配色方案,vim自带的配色方案保存在/usr/share/vim/vim72/colors目录下 " detect file type
filetype on
filetype plugin on " If using a dark background within the editing area and syntax
" highlighting
" turn on this option as well
set background=dark " Uncomment the following to have Vim jump to the last position when
" reopening a file
if has("autocmd")
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
"have Vim load indentation rules and plugins according to the detected
filetype
filetype plugin indent on
endif " 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 abandoned
set mouse=a " Enable mouse usage (all modes) "使用鼠标
set number " Enable line number "显示行号
"set previewwindow " 标识预览窗口
set history=50 " set command history to 50 "历史记录50条 "
" "--状态行设置--
set laststatus=2 "
" 总显示最后一个窗口的状态行;设为1则窗口数多于一个的时候显示最后一个窗口的状态行;0不显示最后一个窗口的状态行
set ruler "
" 标尺,用于显示光标位置的行号和列号,逗号分隔。每个窗口都有自己的标尺。如果窗口有状态行,标尺在那里显示。否则,它显示在屏幕的最后一行上。
"
" "--命令行设置--
set showcmd " 命令行显示输入的命令
set showmode " 命令行显示vim当前模式
"
" "--find setting--
set incsearch " 输入字符串就显示匹配点
set hlsearch

2、构建源代码索引

  利用ctags可以建立源码树的标签索引(标签就是一个标识符被定义的地方,如函数定义),使程序员在编程时能迅速定位函数、变量、宏定义等位置去查看原形。

  举个例子来说,可以构建Linux内核源代码的索引树,然后就能够在编程的过程中查看系统函数的原型与定义等内容,下面详细说一下过程:

2.1 下载Linux内核源代码

  详细过程请参考我的上一篇博文《在Fedora 20环境下安装系统内核源代码》。

2.2 安装ctags

  利用yum在线安装ctags:

[xiaoku@localhost linux-3.16.-.fc20.x86_64]$ sudo yum install ctags

 2.3 建立内核源代码的索引

  建立之前,先进入内核源代码所在的工程目录:

[xiaoku@localhost linux-3.16.-.fc20.x86_64]$ pwd
/home/xiaoku/rpmbuild/BUILD/kernel-3.16.fc20/linux-3.16.-.fc20.x86_64
[xiaoku@localhost linux-3.16.-.fc20.x86_64]$ ctags -R *

  完成之后,会发现在此工程目录中,新增了一个tags文件夹,该目录中就是代码索引内容。

2.4 给VIM中添加TAGS索引

  编辑用户对应的VIM配置文件,在.vimrc文件结尾添加配置信息内容,如下:

[xiaoku@localhost linux-3.16.-.fc20.x86_64]$ pwd
/home/xiaoku/rpmbuild/BUILD/kernel-3.16.fc20/linux-3.16.-.fc20.x86_64
[xiaoku@localhost linux-3.16.-.fc20.x86_64]$ vi ~/.vimrc

  添加的内容如下所示:

"--ctags setting--
"" 按下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
set tags+=/home/xiaoku/rpmbuild/BUILD/kernel-3.16.fc20/linux-3.16.-.fc20.x86_64 "add new tags file(刚刚生成tags的路径,在ctags -R 生成tags文件后,不要将tags移动到别的目录,否则ctrl+]时,会提示找不到源码文件)

  其中,set tags+=./tags 表示在当前工作目录下搜索tags文件,set tags+=/home/xiaoku/rpmbuild/BUILD/kernel-3.16.fc20/linux-3.16.2-200.fc20.x86_64 表示在搜寻tags文件的时候,也要搜寻指定目标文件夹下的tags文件。然后保存并退出vi。这样,你就可以用vim在任意地方查看有关Linux的函数原形。

3、TAGS用法简介

3.1 tag命令常用用法

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

3.2 简单应用举例

  建立一个最简单的代码示例:

int main()
{
printf("Hello world!\n");
return ;
}

  输入完成后,退出到命令行状态输入:w,但不要退出VI,将光标移动到printf函数位置,按下组合件Ctrl + W + ],vi就能够自动跳转到Linux系统中的printf函数原型位置,再按下Ctrl + o返回到原来位置。

4、C++编译器

  Linux环境下默认是支持C语言编译的,即默认带了gcc编译器。不过,如果我们需要编译c++代码,在Fedora环境下需要安装g++编译器,安装的命令如下:

[root@localhost workspace]# yum install gcc-c++

  我记得以前安装g++的命令就是直接yum install g++啊,不知道Fedora环境下为什么改了名字。在编译C++文件的时候,要注意使用g++而不是gcc,否则会出现错误:

[root@localhost workspace]# gcc main.cpp -o out
/tmp/ccCafWzx.o:在函数‘main’中:
main.cpp:(.text+0xa):对‘std::cout’未定义的引用
main.cpp:(.text+0xf):对‘std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)’未定义的引用
main.cpp:(.text+0x14):对‘std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)’未定义的引用
main.cpp:(.text+0x1c):对‘std::ostream::operator<<(std::ostream& (*)(std::ostream&))’未定义的引用
/tmp/ccCafWzx.o:在函数‘__static_initialization_and_destruction_0(int, int)’中:
main.cpp:(.text+0x4a):对‘std::ios_base::Init::Init()’未定义的引用
main.cpp:(.text+0x59):对‘std::ios_base::Init::~Init()’未定义的引用
collect2: 错误:ld 返回

构建VIM下的C++编程环境的更多相关文章

  1. ubuntu下搭建cocos2dx编程环境-中

        上篇文章里讲了在ubuntu下部署cocos2d-x开发环境,这篇文章主要示范在ubuntu下部署cocos2d-x android开发环境.分开写就是因为我看很多文章里都将这两件事情混杂着写 ...

  2. Linux下新手怎样将VIM配置成C&plus;&plus;编程环境(能够STL自己主动补全)

    ~ 弄拉老半天,最终弄的几乎相同啦,果然程序猿还是须要有点折腾精神啊. 首先你要安装vim,命令:sudo apt-get install vim vim它仅仅是一个编辑器,它不是IDE(比方code ...

  3. ubuntu下搭建cocos2dx编程环境-下

         前两篇介绍了cocos2d-x 下linux开发环境配置和android 环境配置问题.在这其中遇到很多问题,所以最后一篇分享一下在处理这些问题时,我是如何解决的,是怎么想的.同时总结一些解 ...

  4. ubuntu下搭建cocos2dx编程环境-上

        这大半年一直在开发flash游戏,用到的编程语言是actionscript和c++.所以这次公司决定开发手游端的话,C++不是很生疏,这是个好消息.坏消息是由于现在网页游戏还没有上线,所以公司 ...

  5. Golang - OSX配置VIM下的Golang开发环境 &lpar;MacOS为例&rpar;

    测试环境 MacOS 10.12.6 首先安装VIM brew install vim 我已经安装了 Vim 8.0版本 然后安装 Vundle ,这是一个vim包管理器 git clone http ...

  6. ubuntu14&period;04下unix网络编程 环境的配置

    在ubuntu下 首先:在unpv13e文件加下 ./configure cd lib make cd ../libfree make cd ../liggai make cd .. vim lib/ ...

  7. ubuntu14&period;04下unix网络编程环境的配置

    建议 unpv13e/README看一下,忽略一下内容 ===================================================================== 操作 ...

  8. 在windows下搭建汇编编程环境

    汇编语言程序搭建masm+debug 下载链接 dosbox:链接:https://pan.baidu.com/s/1TgkfU-d5w6Nz9TOYro1pYw 密码:mp83 masm:链接:ht ...

  9. mac 下搭建php 编程环境全过程

    1,打开终端, 设置root密码sudo passwd root输入密码 2, 安装 apachemac 自带apache 启动apachectl start重新启动apachectl restart ...

随机推荐

  1. java中的泛型和sql中的索引

    sql中的索引 索引:好处查询的速度快,被删除,修改,不会对表产生影响,作用是加速查询: 一种典型的数据库对象 作用:提交数据的查询效率,尤其对一些数据量很大的表 索引是用来为表服务的 索引是orac ...

  2. 解决C&num;导出excel异常来自 HRESULT&colon;0x800A03EC的方法 &period;

    解决C#导出excel异常来自 HRESULT:0x800A03EC的方法 .   xlBook.SaveAs(FilePath,Microsoft.Office.Interop.Excel.XlFi ...

  3. Inno Setup 系统托盘图标插件 TrayIconCtrl V1&period;5

    原文 http://restools.hanzify.org/article.asp?id=93 V1.5 修正在某些 Windows 平台上(例如 Windows XP SP3)不能正常运行的问题. ...

  4. &lbrack;UWP&rsqb;如何使用Fluent Design System &lpar;下&rpar;

    4. 兼容旧版本 FDS最常见的问题之一是如何与Fall Creators Update之前的版本兼容,其实做起来也挺简单的,ColorfulBox就实现了Creators Update与Fall C ...

  5. &lbrack;HNOI 2004&rsqb;树的计数

    Description 一个有n个结点的树,设它的结点分别为v1, v2, …, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵.给定n,d1, d2, …, dn,编程需要 ...

  6. 简述RIP路由协议和OSPF路由协议的相同点和不同点。

    路由协议分为静态路由协议和动态路由协议.动态路由协议有很多种,如RIP.OSPF.EIGRP等. 1.RIP(路由信息协议)是路由器生产商之间使用的第一个开放标准.RIP有两个版本:RIPv1和RIP ...

  7. python全栈开发day117-MongoDB&comma;pymongo

    1.MongoDB操作 使用了不存在的对象即创建该对象 1.增加: 官方不推荐写法: insert([{},{},{}]) 官方推荐写法: insertOne({}) insertMany([{},{ ...

  8. Python3面向对象—点和矩形类

    Python类练习 定义一个类 class Point: '''二维坐标系中代表一个点''' pass print('打印Point:{}'.format(Point)) p1 = Point() p ...

  9. HTTP请求的502、504、499错误

    1.名词解释 502 Bad Gateway:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应(伪响应). 504 Gateway Time-out:作为网关或者代理工作的服务 ...

  10. python 检测字符串编码类型是什么

    for index,value in enumerate(listvalue): adchar=chardet.detect(value) print adchar if adchar['encodi ...