`
totoxian
  • 浏览: 1074219 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

【转】使用vim编辑C程序

阅读更多
<!-- /editable --><!-- /wrapper --><!-- /header -->

使用VIM编辑C程序
Siddharth Heroor

译:mingleiChen

修订历史
修订版v1.0 Jan 14, 2001 Revised by: sh
第二版,修正了一下排版错误
修订版v0.1 Dec 04, 2000 Revised by: sh
第一版,我很愿意听到你的反馈
本文对使用Vim进行编辑C或其他语言(如C++、JAVA)的程序做了简单的介绍。

内容
1.介绍
2.范围内移动(Moving around)
2.1 w,e,b按键
2.2 {,},[[,]]按键
2.3 %按键
3.在C文件中任意跳转
3.1 ctags
3.2 marks
3.3 gd按键
4.自动单词完成
5.自动格式化
5.1 限制列宽
5.2 自动匹配代码
5.3 注释
6.多文件编辑
7.快速修正
8.版权
9.参考

1.介绍
本文档的目的是为VIM的新手用户编辑C语言文件提供可行的编辑选项.文档介绍了一些常用的命令和按键,它们能够有效的提高程序员书写C源代码的速度.
文档主要描述了如何使用VIM编辑C语言文件.本文描述的大部分内容同样适用于vi,此外,文中谈到的关于编辑C文件的内容或多或少的适用于C++,JAVA及其他相似的语言.

2.Moving around
2.1 按键w,e,b
用户可以使用w,e,b键在文件中移动.VIM可以识别C表达式中的不同符号.
看看下面的C代码:

图1

假设光标处于if语句的开始处,当按下w键,光标将跳至第一个(.再按一次w,光标将跳至NULL.再按将跳至==,接下来的按键会分别带你到x..)... &&... y... >... z... 最后到)...
按键e的作用与w相似,只是它会带你到当前单词的末尾,而不是下个单词的开始处.
而按键b的功能与w完全相反,当你按下它,它从相反的方向开始移动光标.如上例,将)...z...>...y...&&...)...x..最后是(...
2.2 按键{,},[[,]]
{和}用于在文档中的段落间移动.当编辑C程序时,这些按键表现出些许不同的含义.下面是一段程序,包含了几个空行.例如:

图2

上面的片断显示了两个段落,用户通过使用{和}键能够很容易的从一段开始移至另一个开始。{将带领光标至段首,而}则把光标移至段尾。许多人喜欢这样的编码样式,把逻辑上的一组语句组织成段,然后使用空行分割它们。例如:

图3

在这样的场合,{和}显得非常有用。用户很轻松的就可以从‘一段’移至另一段。 另一种有用的按键是[[和]],这一对按键将把你的光标带至{之前或是}之后的第一列。例如:

图4

假设你正在编辑函数foo(),突然你想转去编辑bar(),这时只需按]],光标会带你到函数bar()的第一个{处。用户可以按[[回到foo()的开始。
其他相似的按键集是][和[],][将把光标带至下一个位于第一列的}。例如你在编写foo()时需要转到foo()的结尾,这时只需要按][就可以做到。类似的,在你编写bar()的时候若需要移到foo()的结尾,按[]可以帮你做到这点。
记住这些按键的使用方法可以这样做,第一个按键指示了它将把光标向上移还是向下移。[向上移而]向下移。第二个按键则表示将匹配那个符号。类似的,[匹配{,并将光标移向它。]将光标移向}。
关于]],][,[[,[]的一个警告:它们只匹配第一列上的符号。如果用户想让这些按键匹配不管是不是第一列上的符号。VIM的文档有相关的介绍。用户可以自定义按键映射来找到那些符号。事实上,你不需要花费太多的时间在映射上。下面推荐的映射能很好的完成那些功能。
:map [[ ?{<CTRL−VCTRL−M>w99[{

:map ][ /}<CTRL−VCTRL−M>b99]}

:map ]] j0[[%/{<CTRL−VCTRL−M>

:map [] k$][%?}<CTRL−VCTRL−M>

2.3 按键%
%用来匹配光标之后的下一个项目,可以是一个圆括号,一个大括号或是一个方括号。通过按%键,光标自动跳到相应的匹配处。
此外,%也可以用来匹配#if,#ifdef,#else,#elif和#endif。
该按键在确认写好的代码时十分有用。例如:

图5

检查上面的代码包括检查圆括号使用的正确与否。%用来从一个圆括号跳到它对应的另一个。因此,用户可以找到多写或少写的圆括号,并修正。
类似的,%也可以用来在{和它对应的}间跳转。

3.在文件中任意位置跳转
3.1 ctags
Tag是有序的位置保持集。Tags对于理解和编辑C十分有用。它们是C文件中的书签集。当你需要从某个被调用的函数出发跳转到它的定义并随时跳回时,Tags十分有用。

来看看下面的例子:

图6

假设你正在编辑函数foo(),而你想看看函数bar()的定义。此时就可以使用Tags。用户可以跳转到bar()的定义,然后跳回来。如果需要,甚至可以跳转到另一个被bar()调用的函数去,接着再跳转回来。那么,要如何使用Tags呢?用户首先需要对所有源文件使用程序ctags。它将建立一个名为tags的文件。该文件包含了VIM编写的每个函数定义的指针。通过这些指针,很轻松的就能找到所有的函数。确切的用于跳转的按键是CTRL-]和CTRL-T,分别用于向后查找和向前返回。继续看前面的例子,当在函数foo()中bar()被调用的位置上按下CTRL-],光标自动跳转至函数bar()的开始处。然后你可以按CTRL-T从bar()中返回到foo()。

程序ctags按照如下方式调用:$ ctags options file(s)

为当前目录下所有c文件生成tags,输入命令:$ ctags *.c

如果某一文件夹中不同子目录中包含C文件,用户可以在主目录下调用命令:$ ctags −R *.c来生成各个文件的tags。

关于ctags还有许多的选项,可以查看ctags的手册来获得更多信息。

3.2 marks
Marks和Tags很像,但是marks可以被设置在文件中的任意位置,而不仅仅是在函数,枚举处。此外marks必须用户手动设置。 设置一个mark没有显式的标记。mark只是VIM记着的一个文件位置。例如下面的代码:

图7

假设你正编辑行:x++;你希望在你编辑完其他行后能够快速的返回到该行。这时你可以通过按键m'来为该行设置一个mark,然后按''回到该行。

VIM允许你设置多个mark,这些mark保存于寄存器a-z,A-Z以及1-0。例如,设置一个mark并保存于寄存器j,可以按mj,返回该mark可以按'j。
设置多个mark在前进或后退到某片代码显得十分有用。来看这个例子。用户可以在x++处设置一个mark,在y=x处再设置一个,然后再这两个mark中来回跳转。

Marks甚至可以在文件间跳转。用户可以使用寄存器A-Z来实现此功能。寄存器a-z只能在文件里不同代码块间跳转。也就是说,如果你在文件foo。c中设置了mark,使用的是寄存器a,那么到另一个文件中按下'a并不能将光标移到foo。c中的mark位置。如果你需要一个能够带你到另一个文件的mark,就得使用大写的寄存器A-Z。例如,用mA代替ma。在接下来的章节里我将讨论如何进行多文件编辑。

3.3按键gd
先来看看下面的代码:

图8

假设由于某些原因你忘记了y和z是什么而想快速的找到它们的定义。一种方法是向后查找y和z。VIM提供了另一种更加简单而快捷的方案:类似于goto定义的按键gd。当光标在y上,你按gd,这时光标将自动跳转到y
的定义:struct Y y;
另一个相似的按键是gD。它会带你到变量的全局定义处。所以如果用户想查看x的定义,按gD便可以了。

4.自动补完单词
先看看下面的代码:

图9

函数A_Very_Long_Function_Name()可能要一遍又一遍输入,在插入模式,用户可以通过前向或后向搜索自动补完单词。在函数Another_Function中,用户可以输入A_Very...然后按下Ctrl-P,第一个匹配到的单词将显示。在例子中,它显示为A_Very_Long_Variable_Name,如果匹配的不符合你的需求,可以再按Ctrl-P,继续搜索下个匹配的单词,显示为A_Very_Long_Function_Name。一旦单词匹配正确,你就可以继续书写程序了。在整个过程中VIM保持插入状态。
和Ctrl-P类似的按键是Ctrl-N,它先向前搜索最匹配的。这两组按键相同的是到达文件顶部或底部后都将自动继续搜索。
CTRL-P和CTRL-N都是模式CTRL-X的一部分,而CTRL-X又是insert模式的子模式。所以当你再insert模式下的时候就可以进入该模式。离开CTRL-X模式可以通过除了CTRL-P,CTRL-N,CTRL-X的按键来实现。一旦离开CTRL-X模式,你将回到insert模式。
CTRL-X模式下你可以有多种方式来实现自动补完。你甚至可以自动补完文件名。这在你写include头文件的时候很有用。例如通过下面的方式,你可以包含一个foo.h文件。

#include "f CTRL−X CTRL−F"
是的,是CTRL-X CTRL-F,听起来很象emacs。在CTRL-X模式下,你还可以做很多其他事情。其中之一就是字典补完(Dictionary completion)。字典补完允许用户指定一个包含了关键字的文件,它可以用于自动补全单词。默认状态下字典选项是没有设置的。该选项可以通过命令:set dictionary=file来设置。通常用户可以在字典文件里输入C关键字,typedefs,#defines。C++和java程序员可能更喜欢添加类名。
字典文件的格式十分简单,仅仅是每行一个单词就可以了。一个C字典文件看起来就像下面的图一样。

图10

使用字典补完,用户需要按CTRL-X CTRL-K。补全单词的方式很像按键CTRL-P和CTRL-N。所以,例如要输入'typedef',只需要按CTRL-X CTRL-K然后选择就好了。

5.自动格式化
5.1 格式化列宽
用户通常希望使用80或75的列宽。这可以通过命令:set textwidth=80轻松的实现。

可以将该命令写进你的.vimrc文件中,它将自动执行。
如果你需要在确定的文本宽度下自动换行,命令如下,通常该选项在终端下已经既定了。

:set wrapwidth=60
上面的命令设置文本宽度为60列。
5.2自动缩进代码
在C编码时,用户常常想要indent缩进内嵌代码块。若要在编码时自动完成它,VIM提供了一个叫做cindent的选项。使用下面的命令来完成:
:set cindent
通过设置cindent,代码变得很漂亮。你可以把上面的命令加进你的.vimrc文件中,让它自动执行。
5.3注释
VIM也可以让你自动格式化注释。你可以把注释分解成3块:开始部分。中间部分和结束部分。例如,你的编码格式需求可能需要注释表示为如下样式:

/*
* This is the comment
*/

在这个例子里,你可以使用下面的命令来格式化它。

:set comments=sl:/*,mb:**,elx:*
我来解释一下这个命令,命令分成三个部分。第一部分是sl:/*,这告诉VIM注释包括三块,以/*开始。下一部分告诉VIM中间的注释是*,最后一部分告诉VIM几件事。一是注释要以*/结尾,另一是当你按下/时它会自动补完注释。
我们再来看一个例子。假设你的注释样式如下:

/*
** This is the comment
*/

你可以输入这条命令:

:set comments=sl:/*,mb:**,elx:*
插入一条注释时,输入/*并按回车。下一行会自动填上**,当你写完一行注释后按回车,下一行又会自动补上**,如果你想要结束注释,不需要删除一个*再补上一个/,只要按/,VIM会自动结束注释。怎么样,VIM聪明吧。

6.多文件编辑
用户可以一次编辑多个文件。例如,你可以同时编辑一个头文件和源代码文件。若想一次编辑更多文件,按下面的命令调用VIM。

$ vim file1 file2 ...

现在,你就可以先编辑第一个文件,同时可以使用命令:n移至下一个文件。 你也可以使用命令:e#返回上一个文件。 当你编码时,同时可以看到两个文件而且能在它们之间切换应该很有用。换句话说,如果屏幕被分成两部分,上面显示头文件,下面显示代码文件,对你的编程应该很有用。Vim有这样一个命令可以实现该功能。输入命令:split即可。

在两个窗口中显示相同的文件,无论调用了什么命令,都只将影响处于焦点的窗口。于是用户可以使用命令:e file2来在另一个窗口中编辑另一个文件。

执行完那个命令后,你将发现有两个文件处于可视状态。一个窗口显示第一个文件,而另一个窗口显示了第二个文件。在这两个文件间切换可以使用命令CTRL-W。

使用帮助来获取更多关于窗口分割方面的知识。

7.快速查错
当你编写C程序时常常会陷入编辑-编译-编辑的循环中。典型的例子就是你在使用其他软件编辑C文件时,保存文件,编译代码,然后找到错误再重新编辑。VIM使用了一种叫做快速查错的模式来加快这一循环过程。基
本上用户需要把编译器错误保存到一个文件。然后用下面的命令打开这个文件。

$ vim −q compiler_error_file
VIM将会自动打开包含错误的文件并定位到第一个错误。
使用命令"make",用户可以自动编译代码并跳转到第一个出错的位置。按下面的方式调用make命令。

:make
基本上,该命令调用了shell下的make,并转到第一个错误上。然而,如果你不是用make来编译而用例如cc之类的命令编译,那么你得为make命令设置一个称作makeprg的变量。例如:set makeprg=cc\ foo.c
设置完makeprg之后,你就可以使用make并快速查错了。
在你改完第一个错误后,若要修改第二个错误,可以使用命令:cn
返回第一个错误用命令:cN
我将给出几个例子做示范。看看下面的代码:

图11

你可以看到第5行有个错误。文件保存为test。c,makeprg也用命令::set makeprg=gcc\ test.c设置了。
接下来使用命令make,gcc给出了如下的错误提示

图12

按下回车,光标自动移至第6行。
现在命令:cn将把光标移至第4行
用命令:cN返回上一个错误,光标会移到第6行。
改完错误后,用户再执行:make,成功了。

图13

这只是一个很小的例子,你可以使用快速查错功能来解决编译时的问题。而且尽可能的减少编辑-编译-编辑的循环时间。

8.版权
Copyright(c)2000,2001 Siddharth Heroor 在GNU FDL协议许可的范围内,本文可以拷贝,发布或是修改。v1。1及其后版本通过FSS出版。可以在http://www.gnu.org/copyleft/fdl.html找到一份license的拷贝。

9.参考
你可以从VIM上获得更多信息,请到www.vim.org上下载。

分享到:
评论

相关推荐

    熟练使用vim程序编辑器与shell.pdf

    熟练使用vim编辑器是系统管理员的一个重要工作,因为系统管理员至少要学会使用一种以上的文字接口的文本编辑器。vim可以用不同颜色显示文本内容,还能够进行诸如shell script、C program等程序的编辑,因此,可以将...

    基于C/C++语言的简易vim编辑器 仿vim编辑器

    # 基于C/C++语言的简易vim编辑器 仿vim编辑器 1. 编辑器下有normal和insert两种模式。默认为normal模式,按i键进入insert模式,按esc退出insert模式。 2. normal模式下按 h j k l键向左上下右移动光标。 3. normal...

    熟练使用vim程序编辑器与shell(二).pdf

    * 学会使用vim编辑器的基本命令,如输入、删除、复制、粘贴等 * 了解vim编辑器的模式,如normal mode、insert mode、visual mode等 * 学会使用vim编辑器的搜索和替换功能 * 了解vim编辑器的配置文件和插件的使用 二...

    linux系统熟练使用vim程序编辑器

    **Linux系统熟练使用vim程序编辑器** vim,全称为Vim (Vi Improved),是一个高度可配置的文本编辑器,尤其适合程序员和系统管理员使用。它提供了丰富的文本操作功能,包括输出、删除、查找、替换以及块操作,允许...

    vim编辑器配置文件vimrc的扩展

    总之,vimrc配置文件的扩展和定制是提升vim编辑器使用体验的关键。通过不断调整和优化,我们能够创建一个符合自己需求的高效编程环境。记住,实践出真知,只有不断尝试,才能找到最适合自己的vim配置。

    用VIM编写C/C++程序

    ### 使用VIM编写C/C++程序的关键知识点 #### VIM简介 VIM(Vi Improved),作为Unix系统中最常用的文本编辑器Vi的增强版,凭借其高效性和灵活性深受开发者喜爱。相较于Emacs,VIM的学习曲线更为平缓,通过内置教程`...

    vim配置C/C++开发环境.zip

    在IT行业中,文本编辑器是开发者的重要工具,而Vim作为一个功能强大的文本编辑器,深受许多程序员的喜爱。本文将详细讲解如何配置Vim为C/C++的开发环境,使其具备类似IDE的功能,如函数补全、小括号补全等。 首先,...

    vim编辑器.docx

    "vim编辑器.docx" Vim 编辑器是一款功能强大且广泛使用的文本编辑器,特别是在 Linux 和 Unix 系统中。 Vim 编辑器提供了许多实用的功能,例如语法高亮、代码补全、文本格式化等等。 在 Linux 系统中,Vim 编辑器...

    vim 用的c 插件

    - **编译和运行**:插件可能会提供直接在 Vim 内部编译和运行 C 程序的功能。 通过深入理解并熟练使用这些插件,你可以在 Vim 中实现更高效、更愉快的 C 语言编程体验。记得经常更新插件,以获取最新的特性和修复。...

    VIM使用讲解.pdf

    VIM是一个功能强大的文本编辑器,其使用方法涵盖了移动光标、文本编辑、命令执行等多个方面。...上述内容仅是VIM编辑器使用的冰山一角,更深入的学习和实践将使得用户能够充分挖掘VIM的潜力,成为真正的VIM高手。

    vim中利用gdb调试程序(源码与指导文档)

    【标题】"vim中利用gdb调试程序(源码与指导文档)"涉及的主要知识点是使用集成开发环境VIM与GNU Debugger (GDB)协同工作,以高效地调试C/C++程序。GDB是一个强大的源代码级调试工具,而VIM作为一个功能丰富的文本...

    windows下使用vim(gVim)和gcc(MinGW):C/C++/Fortran/ObjC/Ada Compiler

    在Windows操作系统中,开发C、C++、Fortran、Objective-C和Ada等编程语言时,一个常见的选择是结合使用vim编辑器(或者其图形化版本gVim)和GCC编译器(通过MinGW安装)。MinGW(Minimalist GNU for Windows)是一个...

    vim 7.2源码(支持vimgdb)

    Vim 7.2 源码包是一个用于构建自定义VIM编辑器版本的软件包,特别是针对在Linux环境下进行程序开发的用户。Vim(Vi Improved)是一款功能强大的文本编辑器,它继承了经典的Vi编辑器并进行了许多增强和扩展。Vimgdb则...

    Linux下由VIM搭建C/C++开发环境介绍

    为了搭建一个好的 C/C++ 开发环境,在 Linux 平台下选择 VIM 作为编辑器是一个不错的选择。下面我们将详细介绍如何在 Linux 环境下搭建好的 C/C++ 开发环境。 一、Linux 环境搭建 首先,我们需要在 Linux 平台下...

    vim的扩展文件打包

    Vim是一款强大的文本编辑器,深受程序员和系统管理员的喜爱,尤其在Linux环境下,它被广泛用作代码编辑器。这个“vim的扩展文件打包”是一个专门为 Vim 设计的资源集合,包含了用户配置文件和插件,旨在提升 Vim 的...

    vim编辑器的使用说明

    ### vim编辑器的使用说明 #### 一、简介 Vim(Vi Improved)是一款功能强大的文本编辑器,广泛应用于Linux操作系统中。对于初学者来说,掌握Vim的基本操作是十分必要的。本文将详细介绍Vim的一些基本命令,帮助新...

    最好的vim使用参考手册

    - 命令行编辑:使用`:help c_&lt;键位&gt;` - Vim命令参数:使用`:help -r` - 选项:使用`:help ’&lt;选项名&gt;` - **查找帮助**:使用`:help word`来搜索关键词`word`的相关帮助文档。 #### 二、Vim的使用指南 ##### 1....

    c语言vim编写的学生管理系统

    在本项目中,我们将探讨如何利用C语言和Vim编辑器来构建一个学生管理系统。这个系统将包括管理员、学生和老师的角色,支持数据的增删查改操作,并采用链表作为核心的数据结构。下面,我们将深入讲解这一过程。 首先...

Global site tag (gtag.js) - Google Analytics