vim下的ctags和taglist等的使用和配置

news/2024/11/8 1:26:27/
1.ctags

(1)到  http://prdownloads.sourceforge.net/ctags/ctags-5.6.tar.gz
下载ctags源码ctags-5.6.tar.gz

(2)解压并安装
假设在家目录下taogle用户的目录下:
tar zxvf ctags-5.6.tar.gz
cd ctags-5.6
./configure && make && make install
(3)使用
<1> 对于一个工程文件夹如:cd  /home/taogle/vimPlungTest/src
<2> 建立ctags文件,在该目录下运行 ctags -R  
—— "-R"表示递归创建,也就包括源代码根目录下的任何子目录下的源程式(如果你的源码是多层的目录, 就去最上层的目录)。从而在src目录下建立了一个“tags”文件,"tags"文档中包括这些对象的列表。
如果修改程序后,比如增加了函数定义,删除了变量定义,tags文件不能自动rebuild,必须再次在当前"tags"文件所在的目录下运行 $ctags -R

l 用#define定义的宏
l 枚举型变量的值
l 函数的定义、原型和声明
l 名字空间(namespace)
l 类型定义(typedefs)
l 变量(包括定义和声明)
l 类(class)、结构(struct)、枚举类型(enum)和联合(union)
l 类、结构和联合中成员变量或函数
VIM用这个"tags"文档来定位上面这些做了标记的对象
注意:
运行vim的时候,必须在"tags"文档所在的目录下运行。否则,对于该例子还要在运行vim的时,用  " :set tags= /home/taogle/vimPlungTest/src " 命令来设定"tags"文档的路径,这样vim才能找到"tags"文档。
如果经常在这个工程编程的话,可以将 " set tags= /home/taogle/vimPlungTest/src "这句话写进~/.vimrc 文件中去直接作为vim的配置文件。当然这个路径随着工程目录的变化要随时作调整。(切记tags后面的"="一定不能有空格,否则vim会报 E518错误 )
强烈推荐以下的方法:在vimrc中加入以下的句子:
if getfsize("vimscript")>0
source   vimscript
endif
然后在工程tags文件所在的目录下(如:" /home/taogle/vimPlungTest/src" )新建一个叫做“vimscript”的文件,在文件中添加以下的内容:
set tags= /home/taogle/vimPlungTest/src    "或者 /home/taogle/vimPlungTest/src/tags
set tags+= /home/taogle/vimPlungTest/src/tags.lib  "这一句通常可以没有
这样每次启动vim就会自动运行vimscript脚本中的句子,从而可以自动找到tags所在的目录。
并在vimscript文件中加入如下一行就可实现在vim中每次打开vim编辑时都重新生成关于c++的tags文件:
! ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=c++

      ——  ! command   //实现在vim中运行shell
或者为了更加简单 ,在vimrc中添加以下的句子,就可以在进入vim后,按下Ctrl+F12组合键(每当有代码更新的时候,时不时按下以更新tags),在当前目录下寻找所有的c/c++文件,从而在当前目录下建立tags文件:

map :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
快捷键:
<1>     把光标移到变量名或函数名上,然后按下"Ctrl-]"。用"Ctrl-o"或“Ctrl-t”退回原来的地方。 
<2>     在函数中移动光标
[{     转到上一个位于第一列的"{"
}]     转到下一个位于第一列的"{"
{      转到上一个空行
}      转到下一个空行 ([ and ] 也分别是两个指令)
gd   转到当前光标所指的局部变量的定义
*      转到当前光标所指的单词下一次出现的地方
#     转到当前光标所指的单词上一次出现的地方
2. taglist
taglist的功能是即时生成当前文件的函数列表和全局变量列表,便于索引。 能够列出源文档中的tag(function, class, variable, etc)并跳转.
注意:taglist依赖于ctags,所以要先装ctags,否则taglist装了也没法用!
(1) 在 http://vim.sourceforge.net/scripts/download_script.php?src_id=6416 下载得到 taglist_42.zip

(2)解压得到两个文档(假设在zip文件在/home/taogle文件夹下)
cd /home/taogle
$ unzip -d taglist taglist_42.zip
$ cd taglist
$ tree

.
|-- doc
| `-- taglist.txt 
`-- plugin
`-- taglist.vim   

(3)安装
cp doc/taglist.txt    /usr/share/vim/vim72/doc/                  --taglist 帮助文件 
cp plugin/taglist.vim   /usr/share/vim/vim72/plugin/        -- taglist 插件
(4)配置和使用
启动vim,可使用 “:helptags .”来配置好帮助文件,并能够用来查看;
重启vim,用“:TlistToggle”来打开和关闭taglist窗口。
在 /usr/share/vim/中的文件vimrc中添加关于taglist的常用配置命令如下:
==============================
let Tlist_Ctags_Cmd = '/usr/bin/ctags'   "设定Linux系统中ctags程序的位置
let Tlist_Show_One_File=1    "不同时显示多个文件的tag,只显示当前文件的
let Tlist_Exit_OnlyWindow=1  "如果taglist窗口是最后一个窗口,则退出vim
let Tlist_Use_Right_Window = 1         "在右侧窗口中显示taglist窗口
"let Tlist_Use_SingleClick= 1    " 缺省情况下,在双击一个tag时,才会跳到该tag定义的位置
let Tlist_Auto_Open=1    "在启动VIM后,自动打开taglist窗口
let Tlist_Process_File_Always=1  "taglist始终解析文件中的tag,不管taglist窗口有没有打开
let Tlist_File_Fold_Auto_Close=1 "同时显示多个文件中的tag时,可使taglist只显示当前文件tag,其它文件的tag都被折叠起来
==============================
(5)使用
<1> 切换函数列表的开、关
==> 或者使用  “:TlistToggle” 在打开和关闭间切换
==> 可以用 “:TlistOpen” 打开taglist窗口,用“:TlistClose”关闭taglist窗口。
==> 在vimrc中使用如下面的映射,就可以使用 “,tl”  键就可以打开/关闭taglist窗口:
map tl :TlistToogle

<2> 在正常编辑区域和tags区域中切换 
      ctrl+w+w
<3> 定位指定内容 
在tags区域中,把光标移动到变量、函数名称上,然后敲回车(或者是双击某个tag),就会自动在正常编辑区域中定位到指定内容了。
在taglist窗口中,可以使用下面的快捷键 :

            跳到光标下tag所定义的位置,用鼠标双击此tag功能也一样 
o                    在一个新打开的窗口中显示光标下tag 
   (空格)显示光标下的tag的原型定义,在vim 
u                    更新taglist窗口中的tag 
s                    更改排序方式,在按名字排序和按出现顺序排序间切换 
x                    taglist窗口放大和缩小,方便查看较长的tag 
+                    打开一个折叠,同zo 
-                    将tag折叠起来,同zc 
*                    打开所有的折叠,同zR 
=                   将所有tag折叠起来,同zM 
[[                   跳到前一个文件 
]]                   跳到后一个文件 
q                  关闭taglist窗口 
          显示帮助
Taglist插件还提供了很多Ex命令,甚至可以用这些命令创建一个taglist的会话,然后在下次进入VIM时加载此会话。
Taglist插件还可以与winmanager插件协同使用。
3.  omnicppcomplete 插件(让vim支持代码自动补全)
插件:omnicppcomplete
软件:ctags
ctags一般系统默认就有。
下载并安装插件 omnicppcomplete:
假设在家目录下存在.vim文件夹, 如:     /home/taogle/.vim,如果不存在,在家目录下建立.vim目录;然后使用以下的命令:
unzip omnicppcomplete-0.41.zip   -d    /home/taogle/.vim (或者使用:$HOME/.vim)
从而在 /home/taogle/.vim下面解压出after、autoload、doc三个文件夹。至此 omnicppcomplete的安装已经完成。
千万要注意 :在unzip前面不能加sudo,否则会使得解压出的三个文件夹属性为不可写(no write),从而造成 omnicppcomplete的不可用,关于此,笔者有惨痛的教训见以下的帖子:
http://forum.ubuntu.com.cn/viewtopic.php?f=68&t=290726&p=2034064&sid=623c81b6d292d6759a991099b3ebfb24#p2034064
再运行vim,然后在vim的命令模式下输入 :helptags $HOME/.vim/doc ,这样可以添加omnicppcomplete的帮助文件到vim。
你可以继续输入:h omnicppcomplete来查看插件提供的文档,里边有安装和使用的所用方法。
在你的vim配置文件(~/.vimrc,没有可以新添加一个)加上以下几句:
set nocp
filetype plugin on

//可选项
set completeopt=longest,menu
set completeopt=menuone
使用方法:
omnicppcomplete主要依赖ctags生成的tags文件来判断补全的,所以首先应该生成一定的信息。也就是说应该先把类写好,然后再生成tags,以后出现对象的 ”.” 或 ”->”成员操作时它自动寻找成员函数。
在vim编辑文件时按Ctrl+F12,ctags会把这个文件所在目录以及子目录的所有文件信息收集生成一个名为tags的文件存在当前编辑文件所在目录。然后就可以实现代码自动补全咯。 在~/.vimrc中添加的 map…… 那句宏就实现这个功能。注意,如果要让新编写的文件可以使用则需先写入,命令为 :w
如果在补全时受不了[预览]窗口的打扰可以打开vim配置文件加入
set completeopt=menu
4.NERD_commenter.vim
注释插件,用来注释掉代码的工具,支持“//”、“/* */”两种代码注释方式。
下载插件
安装很简单,将解压的doc文件放在vimfile/doc下,另一个vim文件放在vimfile/plugin下面……
也是程序员非常实用的一款插件,支持各种语言的补全,只要你能想到的,放心他绝对注释的了,而且还支持单行注释,批量注释,等各种命令映射,在这里,我把最常用的键映射在vimrc中配置了一下。
"对NERD_commenter的设置
let NERDShutUp=1
      "支持单行和多行的选择,//格式
map ,c 
这样的话,在光标所在行上,按下一次ctrl+h是注释,再按下一次是取消注释。
而其内建的指令,cm是多行注释,类似C++的/**/,,cu是取消注释。

其他的命令:
在Normal或者Visual 模式下:
* ,ca,在可选的注释方式之间切换,比如C/C++ 的块注释/* */和行注释//
    * ,cc,注释当前行
    * ,c,切换注释/非注释状态
    * ,cs,以”性感”的方式注释
    * ,cA,在当前行尾添加注释符,并进入Insert模式
    * ,cu,取消注释
    * Normal模式下,几乎所有命令前面都可以指定行数
    * Visual模式下执行命令,会对选中的特定区块进行注释/反注释

5.DoxygenToolkit.vim 由注释生成文档,并且能够快速生成函数标准注释 
下载地址
安装:将下载的DoxygenToolkit.vim直接放在vimfile/plugin文件夹下面……
配置:

map fg : Dox 
map fn: DoxAuthor
map fl: DoxLic
let g:DoxygenToolkit_authorName="Taogle"
let g:DoxygenToolkit_licenseTag="My own license\"
let g:DoxygenToolkit_undocTag="DOXIGEN_SKIP_BLOCK"
let g:DoxygenToolkit_briefTag_pre = "@brief\t"
let g:DoxygenToolkit_paramTag_pre = "@param\t"
let g:DoxygenToolkit_returnTag = "@return\t"
let g:DoxygenToolkit_briefTag_funcName = "no"
let g:DoxygenToolkit_maxFunctionProtoLines = 30 
这样在vim的normal模式下,将光标放到文件的头部,按下fn就会对文件加上文档注释
将光标放到函数的定义的前面一行,按下fg就会对函数进行注释
按下fl,进行授权注释
6.a.vim .cpp和.h文件快速切换
下载地址
把下载的a.vim放到plugin下,不需要配置。
直接可以:A,打开.cpp和.h对应的文件,:AV,打开.cpp和.h对应的文件,并且分屏显示
或者在vimrc中写下如下的映射,快捷键映射
map av : AV        (最常用)

还有其他的几个命令如下:
:A   switches to the header file corresponding to the current file being edited (or vise versa)
:AS   splits and switches
:AV   vertical splits and switches
:AT   new tab and switches
:AN   cycles through matches
:IH     switches to file under cursor
:IHS  splits and switches
:IHV  vertical splits and switches
:IHT  new tab and switches
:IHN  cycles through matches
因为这个插件都依赖于ctags管理的tags数据,所以新编辑的内容不会立即起效。所以应该时不时按下Ctrl-F12更新tags。
7. AddCppClass: 帮助你快速添加一个C++类
http://www.vim.org/scripts/script.php?script_id=2986
安装方法同4.NERD_commenter

可以在vimrc中设置快捷键
map cs : AddCppClass
从而在使用时,在normal模式下按下cs就可以提示添加一个类……
8.grep.vim,在工程中快速查找 
下载:  http://www.vim.org/scripts/script.php?script_id=311
安装方法同6. a.vim
常用命令--> :Grep
但是这个插件挺难用的,只能慢慢摸索着用了
本文转自博客园知识天地的博客,原文链接:vim下的ctags和taglist等的使用和配置,如需转载请自行联系原博主。

http://www.ppmy.cn/news/195318.html

相关文章

希捷移动硬盘指示灯频闪,电脑无法识别

希捷移动硬盘指示灯频闪&#xff0c;电脑&#xff08;台式机&#xff09;无法识别&#xff0c;但是笔记本可以识别&#xff1a; 将硬盘插入台式机后方的usb接口试试

慧荣SM2246XT主控的固态硬盘修复开卡不识别怎么短接方法

一块坏了的240G的固态硬盘&#xff0c;电脑完全不认盘了&#xff0c;所以想修复一下&#xff0c;拆开看到主控是慧荣的SM2246XT&#xff0c;幸好此主控是有开卡软件的&#xff0c;下载也比较方便&#xff0c;最新的SM2246XT_MP_EnhancePageMode_MPQ1102A_DBQ0412_FWR1212A.rar修…

计算机不认2t移动硬盘,高手指导win7系统无法识别2T希捷的硬盘的还原技巧

随着电脑的使用率越来越高&#xff0c;我们有时候可能会遇到win7系统无法识别2T希捷的硬盘问题&#xff0c;如果我们遇到了win7系统无法识别2T希捷的硬盘的问题&#xff0c;要怎么处理win7系统无法识别2T希捷的硬盘呢&#xff1f;我们只用1、右键点击我的电脑--》管理--》设备管…

计算机不认2t移动硬盘,win7系统无法识别2T希捷的硬盘的解决方法

今天和大家分享一下win7系统无法识别2T希捷的硬盘问题的解决方法&#xff0c;在使用win7系统的过程中经常不知道如何去解决win7系统无法识别2T希捷的硬盘的问题&#xff0c;有什么好的办法去解决win7系统无法识别2T希捷的硬盘呢&#xff1f;小编教你只需要1、右键点击我的电脑-…

德乐SM2258XT固态硬盘DERLER T-1不认盘量产修复工具

一块三星德乐DERLER T-1的固态硬盘不认盘了&#xff0c;插电脑也没任何反应&#xff0c;所以想用开卡量产工具来解决&#xff0c;最后成功了&#xff0c;固态硬盘主控是慧荣SM2258XT的&#xff0c;如果你的固态硬盘也是&#xff0c;那么可以参考此文修好你的固态硬盘。教程如下…

简单评测一个SM2259XT2+闪迪BICS5的1TB固态盘,附开卡软件下载地址

简单测评一下&#xff0c;前几天买的&#xff0c;一天到货&#xff0c;快递挺快的&#xff0c;比较忙&#xff0c;最近才有时间处理。随便上电读一下状态&#xff0c;原厂做过RDT的&#xff0c;全部开好了的&#xff0c;看序列号应该是22.10的库存。 150元1TB固态盘&#xff0c…

希捷硬盘无法连接计算机,新买的希捷1T移动硬盘在电脑上没法识别

现在把我的有限经验说出来供您参考。 现象描述。新买来的硬盘&#xff0c;无论是传统的机械硬盘的移动硬盘&#xff0c;还是以芯片作为储存介质的固态“硬盘”的移动硬盘&#xff0c;如果没有经过格式化或初始化的话&#xff0c;在电脑上是无法识别的。值得注意的是&#xff0c…

希捷硬盘开机不识别,进入系统后自动扫描硬件以识别显示

2014年底买的一块2TB希捷机械硬盘ST2000DM001-1ER164&#xff0c;用了两年更换了主板、CPU等&#xff0c;后来出现开机不识别的情况&#xff0c;具体表现为&#xff1a;关机后开机&#xff0c;找不到硬盘&#xff0c;就进入BIOS了&#xff0c;只要在BIOS状态下待机半分钟左右再…