Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5225296
  • 博文数量: 1696
  • 博客积分: 10870
  • 博客等级: 上将
  • 技术积分: 18357
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-30 15:16
文章分类
文章存档

2017年(1)

2016年(1)

2015年(1)

2013年(1)

2012年(43)

2011年(17)

2010年(828)

2009年(568)

2008年(185)

2007年(51)

分类: LINUX

2010-04-07 22:17:03

用Vim进行C/C++编程介绍  

(今天学到的最有用的一个技巧: 设置VIM,只需要记忆一个命令—— :set all)   

  Ctags的使用  
   
  Ctags是vim的伴生工具,   它的基本功能是让程序员能自由穿梭于程序的不同部分(如从一个函数名跳转到该函数的定义处),   最通常的用法是象下面这样以源程序目录下所有文件作为参数。  
  [eric@Linux   temp]$ctags   *.c  
  该命令会在当前目录下创建一个名为'tags'的文件,该文件包含了你当前目录下所有的C/C++文件中的相关信息,具体来说包含以下对象的信息:  
  由#define定义的宏  
  枚举值  
  函数定义,原型和声明.  
  类,枚举类型名,   结构名和联合结构名  
  名字空间  
  类型定义  
  变量(定义和声明)  
  类,结构和联合结构的成员  
  接下来,Vim就通过该文件中的信息定位这些程序元素。有几种方法可以对这些元素进行定位。  
  第一种方法,可以在启动vi程序时通过-t选项加要跳转的程序元素名,   如下:  
  [eric@Linux   temp]$vi   -t   link2    
  将会打开包含link2定义的文件link.c并定位到定义link2的那一行上。  
  如果你已经在vi编辑环境中,也可以在底线命令行上键入:  
  :ta   link2  
  该命令可能使你离开你当前打开的文件(而跳转到包含link2定义的文件的相关行上去,   如果你已经改变了当前文件的内容而没有存盘,则只能在你设置了'autowrite'时才会跳转到该文件;否则会给出警告,另外,autowrite可简 写为等效的aw),欲了解`autowrite'选项的详细信息,可以使用在线帮助:h   autowrite命令(也可简写为:h   aw)。  
  最后一种跳转到一个程序元素的方法是在(命令模式下)光标停在该程序元素上时按下`CTRL+]'键,如:你在看程序时看到某处调用了一个叫 link1()的函数,你可以将光标停在link1单词上(停在该单词任何一个字符都可),然后按下`CTRL+]'键,它就会跳转到该函数的定义处,值 得注意的是Ctrl-]碰巧是telnet的终端符,所以如果你在编辑远程计算机上的文件(通常是通过telnet登录到远程主机上),可能会遇到一些问 题。通过在线帮助':h^]'可以了解这方面的更多信息。(在:h^)中关于该问题是这样说的,多数telnet都允许使用命令telnet   -E   hostname来打开或关闭该脱字符,或者用telnet   -e   escape   hostname来指定另外一个脱字符来代替^],此外,如果可能的话,可以使用rsh来代替telnet来避免这个问题,关于telnet   -E   及   telnet   -e的详情,请参看man   telnet中相关的帮助)  
  关于ctags程序的更多用法,请参看它的相关帮助页,man   ctags,或者通过vim的在线帮助系统查看它的用法,:h   ctags  
   
  C语言风格的缩进  
   
  Vi有几种不同的方法实现自动缩进。对于C/C++程序员来说,最好的方法显然是cindent模式,该模式具有多种功能帮助程序员美化程序的外观,无需 任何额外的工作(当然,设置正确的模式:se   cindent是必需的),欲打开该模式,只需键入命令:set   cindent(所有的set都可以简写为se,虽然只节省了一个字符)需要注意的是  
  cindent控制缩进量是通过shiftwidth选项的值,而不是通过tabstop的值,shiftwidth的默认值是8(也就是说,一个缩进为 8个空格),要改变默认的设置,可以使用`:set   shiftwidth=x'命令,其中x是你希望一个缩进量代表的空格的数目。  
  cindent的默认设置选项一般来说是比较可人的,但如果你的程序有特殊需求,也可以改变它,设置cindent的选项,通过`:set   cino=string'选项(其中,string是要用户自己键入的字符串,译者)string定义了一个列表,该列表决定了你的cindent的行 为。你可以定义多种indent类型,vim的帮助对此有很详细的说明。  
  欲查找关于该主题的帮助,使用命令`:h   cinoptions-values'。要想查看当前的设置值,可以使用命令`:set   cino'。  
  要了解更多的细节,可以使用在线帮助`:h   shiftwidth',':h   cindent',`:h   cinoptions',`:h   cinoptions-values',`:h   cinkeys',和`:h   cinwords'。  
   
  语法高亮  
   
  用过集成开发环境的程序员都知道语法高亮的妙处所在,它不光使你的代码更具可读性,它也使你免于拼写错误,使你明确注释的范围,Vim对多种语言都有语法 高亮的功能,当然C/C++一定包括在内,打开语法高亮功能,可使用命令`:syntax   on'。  
  如果你觉得默认的设置已经够好了,使用它就是如此简单。Vim的语法高亮工具也可以十分复杂,拥有众多选项。要了解更多的细节,可通过命令`:h   syntax'查看在线帮助,在支持彩色的终端上或者使用gvim(vim的GUI版,增强了一些功能),但如果你当前的环境不支持彩色显示,vim会使 用下划线,粗体字,试图进行等效的替代。  
  要了解更详细的内容,可通过命令`:h   syn-gstart',':h   syntax-printing'查看在线帮助。  
   
  编辑-编译-再编辑  
   
  这实在是极好的功能,其基本功能是,你可能不用离开当前编辑环境,通过指定一个命令,就可以编译你当前编辑的项目,如果编译时因发生错误而中断,vim将 会打开第一个发生错误的文件并定位于引起错误的行上。这一命令就是`:mak'(或者':make'),vim将会运行由选项makeprg指定的 make程序,它的默认值就是make。如果愿意的话,你也可以使用命令`:set   makeprg=string'改变项目维护工具(比如,在VC下使用nmake,:set   makeprg=nmake.exe),vim使用选项`errorformat'的设置去解析编译器输出的错误信息的格式。由于不同的编译器有不同的错 误信息格式,所以可能需要显式地指定错误信息的格式。选项`errorformat'的设置使用与c函数scanf风格类似的语法,最重要的是指定%f代 表文件名,%l代表行号,%m代表错误信息。  
  GCC格式的errorformat设置:%f:%l:\%m  
   
  有些编译器的errorformat可能十分复杂,但好在vim对此提供了完整的在线帮助':h   errorformat'。要了解其它细节,可用命令`:h   quickfix',   `:h   mak',   `:h   makeprg',   `:h   errorfile',`:h   errorformat'查看相应的帮助。  
   
  有用的快捷按键  
   
  有一些快捷按键对程序员而言特别有用,   下面是其中的一部分:  
   
  [   [   =   Go   to   previous   first-column   '{';   equivalent   to   ?^{    
  移动到前一个行首的'{'字符上,   等价于?^{  
   
  ]   ]   =   Go   to   next   first-column   '{';   equivalent   to   /^{    
  移动到下一个行首的'{'字符上,   等价于/^{  
   
  [   ]   =   Go   to   previous   first-column   '}';   equivalent   to   ?^}    
  移动到前一个行首的'}'字符上,   等价于?^}  
   
  ]   [   =   Go   to   next   first-column   ']';   equivalent   to   /^]    
  移动到下一个行首的'}'字符上,   等价于?^}  
   
  {   =   Go   to   previous   blank   line.    
  到前一个空行上  
   
  }   =   Go   to   next   blank   line.    
  到下一个空行上  
   
  gd   =   Go   to   definition   of   current   local   variable   (current   =   cursoris   on   it)    
  到当前局部变量的定义处(当前的意思是光标停留其上的单词).  
   
  *   =   Go   to   next   instance   of   current   word    
  到与当前单词相同的下一个单词上  
   
  #   =   Go   to   previous   instance   of   current   word    
  到与当前单词相同的上一个单词上  
   
  括号匹配  
   
  %   可以让光标从它当前所在的括号跳转到与它相匹配的括号上去,对花括号和圆括号,方括号都有效,常用于手工检查括号是否匹对。  
   
  替换操作  
   
  Vim具有强大的字符串替换功能,操作起来十分简单,不需惹人生厌的GUI(图形用  
  户界面),查找并替换文本,可以使用下面的命令:  
  :   [address]   s//string/[g|c|N]   (其中的N是一个整数值)  
  此命令查找由grep风格的正则表达式指定的匹配模式,并将其替换为由string指定的字符串,`address',   `g',和`N'   是对命令的补充选项,它们分别决定了命令的作用范围,是只替换第一个匹配的字符串还是替换所有匹配的字符串,只替换每行中第N次匹配的字符串。  
  g   =   全部:替换每行中所有匹配的字符串。  
  c   =   询问:在每次替换之前询问用户是否确定要进行替换。  
  N   =   第N次只替换在一行中第N个匹配的字符串(如:s/zhao/slimzhao/2,而当前行的内容是zhao   zhao   zhao,则替换后的内容为zhao   slimzhao   zhao)  
  (如果没有指定这些辅助修饰标志,则vim默认为只替换一行中第一个匹配的字符串,即等价于address1,address2s//string/1)  
  [address   values]   -   可以是一个或是由逗号分开的两个辅助修改标志。(下面的x代表一个整数)  
  .   =   表示当前行(即光标所在的行,译者注)  
  $   =   当前文件的最后一行  
  %   =   整个文件(即对每一行,   等价于1,$)  
  x   =   当前文件的第x行  
  +x   =   从当前行开始下面的第x行(如果当前行为第1行,则+3   代表第4行)  
  -x   =   从当前行开始上面的第x行(如果当前行为第4行,则-3   代表第1行)  
  逗号用于分隔任何上面指定的单个行,以形成一个范围(当然,这个范围的下界不能小于上界,如10,1为非法的范围,此时vim会给出一个警告信息,问你是 否进行反向操作,如回答y,则等价于1,10,操作仍正常进行,否则,撤消当前操作),其后指定的操作将作用于此处给出的范围,vim帮助里有关于替换操 作的充分信息。  
   
  其它杂项  
   
  Vim有众多诱人的小功能,下面列出一些尤其值得注意的一些特性:  
  包含文件搜索-   `:h   include-search'  
  书签设置-   'mx'用于设置书签,'x'用于从书签返回;(其中的x可以为任何字母,但只能记录当前文件里的书签;退出vim后再次进入将不会保留这些书签,书签就 是代表在文件中某一特定位置的一种标记)  
  注释符-   `:h   comments'  
阅读(1808) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~