`
atomoptics
  • 浏览: 92855 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

用VIM编写C/C++程序

阅读更多

用VIM编写C/C++程序

Vi是Unix下最常用的文本编辑器。VIM(Vi IMproved)则是它的增强版。有人常常拿VIM和emacs比较,VIM尽管不象emacs那样有那么多的功能,但是比emacs更方便、好用。用过emacs的人肯定会为emacs的一些快捷键感到烦恼,有时候用真希望自己有八只手。VIM的学习曲线也不象emacs那么长,只要看看VIM自带的vitutor,大约只要20分钟就能掌握VIM的用法。对于Unix下的C/C++的程序员,我推荐你们使用VIM+Ctags的组合来写程序。其中原因听我慢慢道来。(下面对VIM的介绍主要是针对5.6以后的版本)
VIM支持语法制导和自动缩进

VIM会根据文件的后缀名,如:*.c、*.cpp、*.cc,等,自动设置语法制导(Syntax Highlighting)。C/C++中的一些保留字,如:if、for、include,等等,就会有不同的颜色,这样就会减少程序员犯错的可能,阅读程序的时候相对来说也轻松很多。用下面这些命令在VIM中查看有关语法制导的帮助:“:h syntax”、“:h syn-qstart”、“:h syntax-printing”。

VIM也支持根据GNU的风格自动缩进,这样程序员编写出来的代码就更易阅读,而且也有利于培养好的编程风格。用下面这些命令在VIM中查看有关自动缩进的帮助:“:h cindent”、“:h cinoptions”、“:h cinoptions-values”、“:h cinkeys”、“:h cinwords”。
使用Ctags

VIM中已经带了Ctags这个程序。尽管ctags也可以支持其它编辑器,但是它正式支持的只有VIM。Ctags可以帮助程序员很容易地浏览源代码。用下面的命令可以在源代码的根目录下创建“tags”文件:

[/home/brimmer/src]$ ctags -R

“-R”表示递归创建,也就包括源代码根目录下的所有子目录下的源程序。“tags”文件中包括这些对象的列表:

l        用#define定义的宏

l        枚举型变量的值

l        函数的定义、原型和声明

l        名字空间(namespace)

l        类型定义(typedefs)

l        变量(包括定义和声明)

l        类(class)、结构(struct)、枚举类型(enum)和联合(union)

l        类、结构和联合中成员变量或函数

VIM用这个“tags”文件来定位上面这些做了标记的对象,下面介绍一下定位这些对象的方法:

1)        用命令行。在运行vim的时候加上“-t”参数,例如:

[/home/brimmer/src]$ vim  -t  foo_bar

这个命令将打开定义“foo_bar”(变量或函数或其它)的文件,并把光标定位到这一行。

2)        在vim编辑器内用“:ta”命令,例如:

:ta foo_bar

3)        最方便的方法是把光标移到变量名或函数名上,然后按下“Ctrl-]”。用“Ctrl-o”退回原来的地方。

注意:运行vim的时候,必须在“tags”文件所在的目录下运行。否则,运行vim的时候还要用“:set tags=”命令设定“tags”文件的路径,这样vim才能找到“tags”文件。
快速改正错误

在VIM编辑器的环境下用“:make”就可以编译程序,当然其前提是在当前目录下有Makefile文件。运行完“:make”之后,如果程序中有错误,就会显示出来。这时候,光标会自动指向第一个出现错误的地方,而且你还可以看到错误的提示。然后,你就可以改正错误,而不用手工找到出错的那一行。记住下面几个有用的命令:

l        “:cl”列出错误

l        “:cn”让光标指向下一个错误

l        “:cp”让光标指向上一个错误

l        “:cnew”从头开始

你甚至可以让VIM识别出其它编译器而不是gcc的错误提示。这对一些开发嵌入式系统的程序员这很有用,因为他们很可能用的不是gcc而是其它编译器。通过设置“errorformat”的值,可以让VIM识别出编译器的出错提示。因为不同的编译器的出错提示是不同的,所以如果用的不是gcc就要重新设置。

“errorformat”的值是一个字符串,它的格式和C语言的scanf的字符串格式相识。

gcc的“errorformat”的值为:%f:%l:\%m。其中“%f”表示文件名,“%l”表示行号,“%m”表示出错信息。

用“:h errorformat”查看详细的帮助信息。

用“:h quickfix”、“:h make”、“:h makeprg”、“:h errorfile”查看其它的信息。
有用的快捷键

下面的这些快捷键对程序员很有帮助:
在函数中移动光标

[[  转到上一个位于第一列的“{”

]]  转到下一个位于第一列的“{”

{   转到上一个空行

}   转到下一个空行

gd  转到当前光标所指的局部变量的定义

*   转到当前光标所指的单词下一次出现的地方

#   转到当前光标所指的单词上一次出现的地方
括号的匹配

%   用来进行小括号、中括号和大括号的匹配。这要看当前光标指向的是什么符号了。
其它

VIM的配置文件是“.vimrc”,用这个文件可以配置VIM。VIM的图形界面的版本叫gvim。VIM也有用于Windows平台的版本。
VIM的资源

VIM的主页:http://www.vim.org/
版权说明

这篇文章的版权属于作者brimmer(brimmer@linuxaid.com.cn)和www.linuxaid.com.cn。如果要转载请加上版权提示。

Brimmer的主页:www.linuxaid.com.cn/engineer/brimmer。HTML格式和Word格式的文档可以在主页上找到。

 

分享到:
评论

相关推荐

    C edit with vim howto

    如何使用vim提高编写c/c++程序的工作效率。 程序员必读宝典

    vim的配置文件主要是c c++的配置

    配置vim编写c c++ java 等程序,个人的一个vim配置,挺好用的,一直用

    Vim的auto-pairs插件

    我ubuntu16中,用vim编写c和c++程序,安装了此插件,极大地方便了代码的输入。 二、功能介绍: 它可以自动完成大括号、小括号、中括号、双引号、单引号的成对匹配。这里以小括号的输入举例:当你在vim中输入(时,它...

    jeffy-vim:从 code.google.compjeffy-vim 自动导出

    简介jeffy-vim用于配置Vim编辑器,使Vim工作得更像一个C/C++的IDE。在一些插件的润色下,jeffy-vim实现了很多IDE的基本功能,比如:代码解析、代码补全、函数跳转、 程序调试等。我还自己编写了一个插件用于管理项目...

    jeffy-vim-v2.1

    jeffy-vim用于配置Vim编辑器,使Vim工作得更像一个C/C++的IDE。在一些插件的润色下,jeffy-vim实现了很多IDE的基本功能,比如:代码解析、代码补全、函数跳转、 程序调试等。我还自己编写了一个插件用于管理项目,...

    适用于x64 Windows的便携式C和C ++开发套件-C/C++开发

    w64devkit是一个Dockerfile,它从源代码构建了一个小型可移植开发套件,用于在x64 Windows上和x64 Windows上编写C和C ++应用程序。 不需要Docker本身使用这些工具。 它仅用作可靠,干净的环境来进行编译和链接。 ...

    Vim 配置包括所有的配置文件和扩展 适合windows linux

    对从c/c++文件自动生成说明文档 11。空格(space)为查找相当于/ 12. 自动加载vim配置文件 。。。还有很多自己可以去看里面的.vimrc内容,当然也建议你去读一遍里面的内容,有新大陆的发现记得留言告诉我和大家 ...

    w3school c语言教程 飞龙整理 20141103

    * 使用 "vi"、"vim" 或任何其他文本编辑器来编写 C 语言程序 * C 环境设置需要文本编辑器和 C 编译器 * 文本编辑器包括 Windows Notepad、OS Edit command、Brief、Epsilon、EMACS 和 vim/vi * C 编译器用于把源代码...

    具有脚本和其他功能的Midnight Commander叉子。-C/C++开发

    它的目标是:使隐藏的宝石– mcedit –发光并成长以能够与Vim和Emacs竞争,向mcedit和mc添加脚本语言以使其成为可能,并添加一些用该脚本语言编写的有意义的插件。 请查看MCEditWishList以获得计划的增强功能的精选...

    TCP协议socke套接字(服务端&客户端)网络协议配置代码

    此代码是我用来记录学习网络套接字的过程,代码是在linux操作系统的vim界面下基于C++编写的,如果在VS或者其他编译器出现提示不包含一些头文件,是正常的现象,因为其中的一些头文件是linux操作系统才有的(自己踩过...

    vim编辑器.docx

    在使用 GCC 编译器时,需要了解编译器的基本命令和参数,例如编译 C 程序、编译 C++ 程序、生成目标文件、连接目标文件等等。 GCC 编译器还提供了许多扩展功能,例如优化编译、调试编译等等。 在调试方面,GDB(GNU...

    gdb_graphs:使用gdb和python可视化CC ++程序的函数调用流

    gen_graph.py描述使用 graphviz 点对象和 matplotlib 可视化 C/C++ 程序的函数调用流的 Python 命令行工具。 Directory structure:├── gallery│ ├── graph_GNU_MAKE_.png│ ├── graph_QEMU.png│ ├── ...

    Linux C程序设计大全

    2.6.1 表达式优化——使用替换程序中的乘除法 2.6.2 表达式优化——常量折叠 2.6.3 表达式优化——使用数学公式 2.6.4 表达式优化——存储问题 2.6.5 分支优化——改变判断顺序 2.6.6 分支优化——使用switch语句 ...

    RHCE阶段笔记.pdf

    * 编译型语言:C、C++、Go等,需要提前编译,编译语言都有编译器。 * 解释型语言:Shell、Python、PHP等,程序运行不需要提前编译,一边执行,一边解释,每种解释型语言都有解释器。 * Shell语言支持大部分编程语言...

    嵌入式Linux应用程序开发详解-第3章Linux下的C编程基础整理.pdf

    嵌入式 Linux 应用程序开发详解-第 3 章 Linux下的 C 编程基础整理 本章节主要介绍了 Linux 下的 C 语言编程基础,covering the basics of C programming on Linux, including the history of C language, features...

    OperatingSystemExperiments:2020-2021第二学期操作系统实验

    OperatingSystemExperiments 操作系统实验 本仓库为操作系统实验材料,包括实验手册和实验报告模板... C/C++编程语言 编辑器:vim/emacs 编译器:gcc/g++ 调试工具: gdb 附: 实验报告提交事项 1、 实验报告提交时请以

    考试系统毕业设计项目含源码-resume:恢复

    C/C++ 和 Swift 参数提示的 YouCompleteMe fork。 YouCompleteMe 是一个众所周知的项目,它在 Vim 编辑器中提供模糊代码完成功能。 技术能力 编程语言: C C++ Go Rust Python Assembly Javascript PureScript 库: ...

    初窥Linux 之我最常用的20条命令总结

    然而每个人玩Linux的目的都不同,所以他们常用的命令也就差异非常大,而我主要是用Linux进行C/C++和shell程序编写的,所以常用到的命令可以就会跟一个管理Linux系统的人有所不同。因为不想在使用是总是东查西找,...

    2018上机考试须知1

    2. 考生编写的程序应该使用标准输入输出,不应该使用任何文件操作。 3. 评测时使用的时间为 Linux 系统的 real time,与 user time 相比,程序的 IO 操作等将被算入运行时间。 4. 除非题目允许,考生的程序无法使用...

Global site tag (gtag.js) - Google Analytics