vim Ctags 和taglist安装和使用

Ctags是一个用于从程序源代码树产生索引文件(或tag文件),从而便于文本编辑器来实现快速定位的实用工具。在产生的tag文件中,每一个tag的入口指向了一个编程语言对象。这个对象可以是变量定义、函数、类或其他的物件。

Ctags是开放源代码的程序。支持下列的编程语言:汇编,AWK, ASP, BETA, Bourne/Korn/Zsh Shell, C, C++, COBOL, Eiffel, Fortran, Java, Lisp, Lua, Make, Pascal, Perl, PHP, Python, REXX, Ruby, S-Lang, Scheme, Tcl, Vim, and YACC。

支持Ctags产生的tag文件的编辑器以及编辑器插件包括:Vim,Vile,Lemmy,等等。

下载一个支持windows的版本的,只要拷贝出ctags.exe这个文件就可以,把它放在$(home)vim71下(也就是在vim的安装目录下找到.exe这样的文件所在的文件目录下)

 特别重要的地方:
编辑_vimrc,在里面加入以下两句: 
    set tags=tags; 
    set autochdir 
    注意第一个命令里的分号是必不可少的。这个命令让vim首先在当前目录里寻找tags文件,如果没有找到tags文件,或者没有找到对应的目标,就到父目录中查找,一直向上递归。因为tags文件中记录的路径总是相对于tags文件所在的路径,所以要使用第二个设置项来改变vim的当前目录。

ctags可以建立源码树的索引,使程序员在编程时能迅速定位函数、变量、宏定义等位置去查看原形
以下是在ubuntu下ctags的下载安装和配置过程:
 

ctags可以建立源码树的标签索引(标签就是一个标识符被定义的地方,如函数定义),使程序员在编程时能迅速定位函数、变量、宏定义等位置去查看原形
以下是在ubuntu下ctags的下载安装和配置过程:
下载并安装ctags,终端输入命令
lingd@ubuntu:~/arm$ sudo apt-get install ctags
建立源码索引,比如我经常需要查阅Linux的内核代码,而这些代码放在/home/lingd/arm/linux-2.6.24.7目录下
那么在终端进入到该目录后,输入命令ctags -R *,你会发现多了一个tags文件,这个就是索引文件
lingd@ubuntu:~/arm$ cd linux-2.6.24.7
lingd@ubuntu:~/arm/linux-2.6.24.7$ ls
arch     crypto         include  kernel       mm              samples   usr
block    Documentation  init     lib          net             scripts
COPYING  drivers        ipc      MAINTAINERS  README          security
CREDITS  fs             Kbuild   Makefile     REPORTING-BUGS  sound
lingd@ubuntu:~/arm/linux-2.6.24.7$ ctags -R *
lingd@ubuntu:~/arm/linux-2.6.24.7$ ls
arch     crypto         include  kernel       mm              samples   tags
block    Documentation  init     lib          net             scripts   usr
COPYING  drivers        ipc      MAINTAINERS  README          security
CREDITS  fs             Kbuild   Makefile     REPORTING-BUGS  sound
向vim注册索引文件tags的路径,
lingd@ubuntu:~/arm/linux-2.6.24.7$ vi ~/.vimrc
在打开文件的最后添加如下内容(当然,具体路径根据你自己的情况)
  1. "--ctags setting--
  2. " 按下F5重新生成tag文件,并更新taglist
  3. map <F5> :!ctags ---c++-kinds=+--fields=+iaS --extra=+.<CR><CR> :TlistUpdate<CR>
  4. imap <F5> <ESC>:!ctags ---c++-kinds=+--fields=+iaS --extra=+.<CR><CR> :TlistUpdate<CR>
  5. set tags=tags
  6. set tags+=./tags "add current directory's generated tags file
  7. set tags+=~/arm/linux-2.6.24.7/tags "add new tags file(刚刚生成tags的路径,在ctags -R 生成tags文件后,不要将tags移动到别的目录,否则ctrl+]时,会提示找不到源码文件)
set tags+=./tags表示在当前工作目录下搜索tags文件
set tags+=~/arm/linux-2.6.24.7/tags表示在搜寻tags文件的时候,也要搜寻~/arm/linux-2.6.24.7/文件夹下的tags文件。
然后保存并退出vi。这样,你就可以用vim在任意地方查看有关Linux的函数原形
------------------------------------
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 查找当前文件和任何包含文件中的单词并在预览窗口中显示匹配,在使用没有标签文件的库函数时十分有用。 
 


然后关闭终端重新打开,你就可以用VIM在任意地方查看有关Linux的函数原形

------------------------------------
最简单的使用方法举例
用vi在任意目录写一个test.c文件,内容如下:
int main(void)
{
        printf("HelloWorld!");
        return 0;
}
写好后末行模式输入w保存好(不要退出vi),按Esc回到指令模式,把光标停留在printf上
然后按 Ctrl+],vi会自动跳到Linux系统函数printf()处,这时我们能查看printf()的原形
查看完了,按Ctrl+o 就回到原来的地方。

http://blog.csdn.net/wooin/article/details/1858917

http://blog.csdn.net/tge7618291/article/details/4216977

安装taglist先要安装2个必备软件,不然taglist是跑不起来的:

vim和Exuberant ctags。

具体安装步骤:

1.下载taglist.zip,下载地址为:http://vim-taglist.sourceforge.net,下载最新的版本为targetlist_45.zip,接着解压压缩包,如果home目录下已经有目录.vim,则不需要建立,否则要用mkdir命令创建.vim目录,其绝对路径为:/home/username/.vim(username是你自己的用户名)。将压缩包解压到.vim目录下,最后文件路径应该如下所示:

             /home/username/.vim/plugin/taglist.vim        /home/username/.vim/doc/taglist.txt    ,目录路径一定要如此。        

2.切换到/home/username/.vim/doc 路径下,启动vim ,在命令行模式下执行“:helptags.”命令,注意一定不要忘记 " . ", 这一步很重要,不然你无法启动taglist帮助文件


3.重启vim, 使用“:TlistToggle"命令来打开或者关闭taglist窗口,使用“:help taglist”命令来获得taglist plugin更多的帮助信息。

taglist具体使用方法:

1.可以建立一个快捷键来快速打开或关闭Toglist,我们常用F8来实现此项功能,在~/.vimrc 找到.vimrc文件,如果没有,可以自己创建一个,将  nnoremap <silent> <F8> :TlistToggle<CR> 这条映射加入其中,你就可以用F8打开或关闭Taglist,非常方便吧。

 2 重点介绍:

<CR>跳转到光标下的标签的位置定义。

○:跳转到光标下的标签的位置,并 定义一个新的窗口。

P:跳转到的标签在前面(Ctrl-W_p)的窗口。

p:显示在文件窗口的标签定义并保持光标在taglist窗口

t:跳到标签在一个新的tab。如果该文件是已 打开一个tab,则移向该tab。

CTRL-t:跳到标签在一个新的Tab。

<space> :显示当前光标下的标签的原型。  对于文件名,显示该文件的完整路径,文件类型和数量的标签。标签类型,显示标签类型和标签的数量。

1. 编辑区域与tags区域切换: ctrl + w + w

u:更新taglist窗口中列出的标签

s:改变标签的排序顺序(按名称或按顺序)

d:删除在光标下的本文件标签

x:缩小或放大taglist窗口

+ :打开一个折叠

- :关闭一个折叠

*:打开所有的折叠

=:关闭所有的折叠

[[:跳转到前一个文件的开头

<Backspace>键:跳转到前一个文件的开头

]] :跳转到下一个文件的​​开头

Tab:跳转到下一个文件的​​开头

q:关闭taglist窗口

<F1>:显示帮助

 定位: 光标置于函数或者变量名上按 Enter 键( 按 o 键在新窗口中显示, space 键在下面状态栏显示原型定义 )

http://blog.csdn.net/bokee/article/details/6633193

自动补全:

vim自动补全——OmniCppComplete
vim的自动补全功能可通过其插件OmniCppComplete实现。
安装OmniCppComplete
lingd@ubuntu:~$ vim-addons install omnicppcomplete
配置OmniCppComplete
在vim配置文件/home/user/.vimrc中加入如下的配置:
  1. "-- omnicppcomplete setting --
  2. " 按下F3自动补全代码,注意该映射语句后不能有其他字符,包括tab;否则按下F3会自动补全一些乱码
  3. imap <F3> <C-X><C-O>
  4. " 按下F2根据头文件内关键字补全
  5. imap <F2> <C-X><C-I>
  6. set completeopt=menu,menuone " 关掉智能补全时的预览窗口
  7. let OmniCpp_MayCompleteDot = 1 " autocomplete with .
  8. let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->
  9. let OmniCpp_MayCompleteScope = 1 " autocomplete with ::
  10. let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)
  11. let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files
  12. let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup window
  13. let OmniCpp_GlobalScopeSearch=" enable the global scope search
  14. let OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members
  15. "let OmniCpp_DefaultNamespaces=["std"]
  16. let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation and remove the last column
  17. let OmniCpp_ShowAccess=
(前几行就是提供了C++中的./->/::等操作符的提示和自动完成)。
OmniCppComplete是基于ctags数据库即tags文件实现的(基于ctags生成的索引信息来实现自动补全的),所以在ctags -R生成tags时还需要一些额外的选项,这样生成的tags文件才能与OmniCppComplete配合运作。使用下列命令生成tags文件,就可以与OmniCppComplete配合运作:
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
--c++-kinds=+p  : 为C++文件增加函数原型的标签
--fields=+iaS   : 在标签文件中加入继承信息(i)、类成员的访问控制信息(a)、以及函数的指纹(S)
--extra=+q      : 为标签增加类修饰符。注意,如果没有此选项,将不能对类成员补全
# vim自动补全功能的测试
# 为了测试自动补全功能,我们先下载C++一份C++标准库的源代码。
lingd@ubuntu:~$ sudo apt-get install build-essential
# 然后在/usr/include/c++下就可以找到标准库的头文件了。
lingd@ubuntu:~$ cd /usr/include/c++
lingd@ubuntu:/usr/include/c++$ ls
4.4  4.4.3
# 在此文件夹下生成能与OmniCppComplete配合运作的tags文件
lingd@ubuntu:/usr/include/c++$ ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
lingd@ubuntu:/usr/include/c++$ ls
4.4  4.4.3  tags
# 在vim的配置文件中如下内容,然后在编程的时候就可以使用自动补全功能了。
lingd@ubuntu:/usr/include/c++$ vi ~/.vimrc
  1. set tags+=/usr/include/c++/tags
# 用vi打开前面的Test.c文件,在printf("Hello World! ")下一行中,输入pri,然后按下Ctrl+X Ctrl+O,此时vi会弹出一个窗口,所有以pri开头的tag都会出现在这个窗口中,printf就出现在第6行中
lingd@ubuntu:~$ cd ~
lingd@ubuntu:~$ vim Test.c
 
注意:在自动补全的点,Vim必须知道可能补全的定义。比如说,在namespace std命名空间下的变量和函数,必须要用using namespace std;暴露出来,否则是不能补全的。在.cpp文件中还可以,在.h文件中这样就不是好的做法了。暂时不知道这个问题是由于我自己配置错误还是程序没有实现。
当自动补全下拉窗口弹出后,一些可用的快捷键:
Ctrl+P  向前切换成员
Ctrl+N  向后切换成员
Ctrl+E  表示退出下拉窗口, 并退回到原来录入的文字
Ctrl+Y  表示退出下拉窗口, 并接受当前选项
其他补全方式:
Ctrl+X Ctrl+L 整行补全
Ctrl+X Ctrl+N  根据当前文件里关键字补全
Ctrl+X Ctrl+K  根据字典补全
Ctrl+X Ctrl+T  根据同义词字典补全
Ctrl+X Ctrl+I  根据头文件内关键字补全
Ctrl+X Ctrl+]  根据标签补全
Ctrl+X Ctrl+F  补全文件名
Ctrl+X Ctrl+D  补全宏定义
Ctrl+X Ctrl+V  补全vim命令
Ctrl+X Ctrl+U  用户自定义补全方式
Ctrl+X Ctrl+S  拼写建议
帮助文档
:help omnicppcomplete
 

 

linux下 查看某个结构体的定义

/usr/include/目录下
1. 生成tags文件  命令:sudo ctags -R
2. 搜索(宏、结构体)命令: vi -t 名称
3.然后就看见它们的定义了  ctrl + ] (进入) ctrl + t (返回)

『基本功能使用方法』

常用命令列表:

        1.  $ ctags –R *      ($ 为Linux系统Shell提示符)

        2.  $ vi –t tag         (请把tag替换为您欲查找的变量或函数名)

        3. :ts                                (ts 助记字:tags list, “:”开头的命令为VI中命令行模式命令)
        4. :tp                                (tp 助记字:tags preview)
        5. :tn                                (tn 助记字:tags next) 
        6. Ctrl + ]
        7. Ctrl + T

命令解释:

“$ ctags –R *”:“-R”表示递归创建,也就包括源代码根目录(当前目录)下的所有子目录。“*”表示所有文件。这条命令会在当前目录下产生一个“tags”文件,当用户在当前目录中运行vi时,会自动载入此tags文件。

Tags文件中包括这些对象的列表:

  1. 用#define定义的宏
  2. 枚举型变量的值
  3. 函数的定义、原型和声明
  4. 名字空间(namespace)
  5. 类型定义(typedefs)
  6. 变量(包括定义和声明)
  7. 类(class)、结构(struct)、枚举类型(enum)和联合(union)
  8. 类、结构和联合中成员变量或函数

VIM用这个“tags”文件来定位上面这些做了标记的对象。


剩下的命令就是定位这些对象的方法:

“$ vi –t tag” :在运行vim的时候加上“-t”参数,例如:

[/usr/src]$ vim -t main

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

如果这个变量或函数有多处定义,在VI命令行模式

:ts”命令就能列出一个列表供用户选择。    

“:tp”为上一个tag标记文件,

“:tn”为下一个tag标记文件。当然,若当前tags文件中用户所查找的变量或函数名只有一个,“:tp,:tn”命令不可用。

最方便的方法是把光标移到变量名或函数名上,然后按下“Ctrl+]”,这样就能直接跳到这个变量或函数定义的源文件中,并把光标定位到这一行。用“Ctrl+t”可以退回原来的地方。即使用户使用了N次“Ctrl+]”查找了N个变量,按N次“Ctrl+t”也能回到最初打开的文件,它会按原路返回 。

更多功能通过命令man ctags或在Vim命令行下运行help ctags查询。

注意:行vim的时候,必须在“tags”文件所在的目录下运行。否则,运行vim的时候还要用“:settags=”命令设定“tags”文件的路径,这样vim才能找到“tags”文件。改成:应该是在tags的子文件夹下都可以的。因为ctags会向上一级目录寻找。

在完成编码时,可以手工删掉tags文件(帚把不到,灰尘不会自己跑掉^_^)。

原文地址:https://www.cnblogs.com/youxin/p/3188407.html