一种用于Linux内核驱动开发的Vim环境配置

本文介绍一种用于linux内核驱动开发或linux内核源码阅读的vim环境配置。用到的几款插件包括:cags、cscope和taglist。其中,ctags主要用于查找函数的定义;taglist基于ctags和vim的一款插件,主要用于实现右侧的文件目录导航;cscope主要用于对函数的定义、调用关系等进行查找。下面详细介绍搭建过程:

1. 安装ctags

  • 源码下载Download Exuberant Ctags from SourceForge.net
  • 编译
  • 配置
    • 进入内核源码存放目录
    • 执行ctags -R。会在当前目录下面生成tags文件。
    • vim环境配置:
      • 永久配置:打开~/.vimrc,添加刚才生成的tags文件。set tags=***/tags
      • 暂时配置:在vim命令行输入:set tags=***/tags
  • 使用:在内核目录下用Vim打开源代码,就可以通过Ctrl+]进入光标所在函数、变量, 结构体、宏的定义处,按键Ctrl+o或者Ctrl+T返回原位置。
  • 更新:当你修改了ctags所在目录下的程序后(比如增加了函数定义, 删除了变量定义), tags文件不能自动更新, 你必须手动再运行一下命令ctags -R,但正在编辑的vim不用重新启动, 它可以实时读取最新的tags文件

2.安装taglist

  • 源码下载:http://www.vim.org/scripts/script.php?script_id=273

  • 安装:在 ~/.vim 目录下解压taglist_xx.zip

  • 说明文档:在vim命令行键入:help taglist.txt

    • 在Vim的一个垂直或水平的分割窗口中显示一个文件中定义的tags(函数, 类, 结构,
      变量, 等)
    • 在GUI Vim中, 可以选择把tags显示在下拉菜单和弹出菜单中
    • 当你在多个源文件/缓冲区间切换时, taglist窗口会自动进行相应地更新.
      当你打开新文件时, 新文件中定义的tags会被添加到已经存在的文件列表中,
      并且所有文件中定义的tags会以文件名来分组显示
    • 当你在taglist窗口中选中一个tag名时, 源文件中的光标会自动跳转到该tag的定
      义处
    • 自动高亮当前的tag名
    • 按类型分组各tag, 并且将各组显示在一个可折叠的树形结构中
    • 可以显示tag的原始类型和作用域
    • 在taglist窗口可选择显示tag的原始类型替代tag名
    • tag列表可以按照tag名, 或者时间进行排序
    • 支持以下语言的源文件: Assembly, ASP, Awk, Beta, C,
      C++, C#, Cobol, Eiffel, Erlang, Fortran, HTML, Java, Javascript, Lisp,
      Lua, Make, Pascal, Perl, PHP, Python, Rexx, Ruby, Scheme, Shell, Slang,
      SML, Sql, TCL, Verilog, Vim and Yacc.
    • 可以很简单的扩展支持新的语言. 对新语言支持的修改也很简单.
    • 提供了一些函数, 可以用来在Vim的状态栏或者在窗口的标题栏显示当前的tag名
    • taglist中的文件和tags的列表可以在被保存和在vim会话间加载
    • 提供了一些用来取得tag名和原始类型的命令
    • 在控制台vim和GUI vim中都可以使用
    • 可以和winmanager插件一起使用. winmanager插件可以让你同时使用文件浏览器,
      缓冲区浏览器和taglist插件, 就像一个IDE一样.
    • 可以在Unix和MS-Windows系统中使用
  • 配置

    • 打开~/.vimrc

    • 添加如下语句

      let Tlist_Show_One_File=1
      let Tlist_Exit_OnlyWindow=1
      
  • 此时,利用vim打开一个文件后,命令行键入:Tlist

    image-20220905225627441

    • 右边的窗口就是TagList窗口, 其中列出了文件中的tag, 并且按照"typedef", “variable”, "function"等进行了分类.
    • 将光标移到某函数上, 按下回车或<Ctrl+]>后, 源程序会自动跳转到该函数的定义处
    • 当你在浏览TagList窗口时, 如果还不想让源码跳转, 但是想看看tag在源码中完整的表达, 可以将光标移到你想要看的tag上, 然后按下空格键, 在下面的命令栏中, 会显示该tag在源码中完整的写法, 而不会跳转到源码处.

3.安装Cscope

  • 安装

    1. Ubuntu下执行sudo apt install cscope
    2. 或者自己下载源码(http://cscope.sourceforge.net)、配置(./configure)、编译(make)和安装(make install)。
  • 配置

    • ~/.vimrc中添加一句set cscopequickfix=s-,c-,d-,i-,t-,e-,用来设定是否使用 quickfix 窗口来显示 cscope 结果
    • 跟ctags一样, 在使用前必须先在项目的顶层目录下生成一个cscope的数据库,命令为cscope -Rbqk。此后会生成三个文件:cscope.in.outcscope.outcscope.po.out
      • R 表示把所有子目录里的文件也建立索引
      • b 表示cscope不启动自带的用户界面,而仅仅建立符号数据库
      • q 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
      • k 在生成索引文件时,不搜索/usr/include目录
    • 利用vim编辑器,打开项目文件,并在命令行键入:cs add 项目顶层目录绝对路径/cscope.out 项目顶层目录绝对路径。也可以将该语句添加到.vimrc环境中使之自动加载。
  • 使用

    • 查找函数的定义::cs find g func_name

    • 查找函数被调用的情况::cs find c func_name,按下回车后vim会自动跳转到第一个符合要求的地方

      • 如果自动跳转的位置你不满意, 想看其他的结果, 可以用:cw命令打开QuickFix窗口。
    • cscope的主要功能是通过子命令"find"来实现的,即:cs find [cdefgist] name

      0 或 s查找本 C 符号(可以跳过注释)
      1 或 g查找本定义
      2 或 d查找本函数调用的函数
      3 或 c查找调用本函数的函数
      4 或 t查找本字符串
      6 或 e查找本 egrep 模式
      7 或 f查找本文件
      8 或 i查找包含本文件的文件
    • Cscope的帮助手册中推荐了一些快捷键的用法, 将下面的内容添加到~/.vimrc中, 并重启vim

      nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR>
      nmap <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR>
      nmap <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR>
      nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR>
      nmap <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR>
      nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
      nmap <C-_>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
      nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR>
      
      • 当光标停在某个你要查找的词上时, 按下<C-_>g(先按"Ctrl+Shift±", 然后很快再按"g") ,就是查找该对象的定义。

ind d =expand(“”)
```

- 当光标停在某个你要查找的词上时, 按下<C-_>g(先按"Ctrl+Shift+-", 然后很快再按"g") ,就是查找该对象的定义。
  • 重新初始化所有连接,:cs reset
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leon_George

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值