Vim 编辑器-实现基础跳转

目标:vim + ctags + cscope 实现跳转到定义,跳转到调用。

1 vimrc配置

先安装ctagscscope 插件。参考博客 vim + ctags + cscope = 强大的IDE 中内容先实现最基础的跳转功能。

在家目录创建.vimrc文件,编辑.vimrc中内容如下:

c 复制代码
"Generate tags and cscope.out from FileList.txt (c, cpp, h, hpp)
nmap <C-@> :!find -name "*.c" -o -name "*.cpp" -o -name "*.h" -o -name "*.hpp" > FileList.txt<CR>
                       \ :!ctags -L -< FileList.txt<CR>
                       \ :!cscope -bkq -i FileList.txt<CR>
if has("cscope")
    set csto=0
    set nocsverb
    " add any database in current directory
    if filereadable("cscope.out")
        cs add cscope.out
    endif
    set csverb
    "set cst  这两句会将cscope当作tag,当找不到时会卡住,因此注释掉
    "set cscopetag
endif

nmap zs :cs find s <C-R>=expand("<cword>")<CR><CR> "符号查找(函数名、宏、枚举值)
nmap zg :cs find g <C-R>=expand("<cword>")<CR><CR> "查找符号的定义(函数名、宏、枚举值)
nmap zc :cs find c <C-R>=expand("<cword>")<CR><CR> "查找调用函数的所有函数
nmap zt :cs find t <C-R>=expand("<cword>")<CR><CR> "搜索文本字符串
nmap ze :cs find e <C-R>=expand("<cword>")<CR><CR> "搜索符合正则表达式的模式,当前光标下的单词作为模式。
nmap zf :cs find f <C-R>=expand("<cfile>")<CR><CR> "打开名称为光标所在文件名的文件
nmap zi :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>"这个命令用于查找包含当前文件的文件(试了不管用)
nmap zd :cs find d <C-R>=expand("<cword>")<CR><CR> "列出当前光标下函数调用的所有函数,函数较大时常用

cd到想要阅读的工程目录,
vim 命令进入vim交互界面,
Ctrl + @ 先生成标签文件,
:q退出vim,(该操作生成标签文件,只执行一次)

之后vim打开该目录下的文件就能使用cscope与ctags相关命令操作实现跳转了。

【注】对于部分目录结构体非常复杂的文件,还是自己指定头文件位置,手动生成tags文件比较好。省的生成一堆没用的tag文件影响跳转速度,如下shell脚本:

bash 复制代码
#!/bin/bash
rm tags cscope.* FileList.txt
find \
../../<路径1>/ \
../<路径2>/ \
./<路径3>/ \
-name "*.c" -o -name "*.cpp" -o -name "*.h" -o -name "*.hpp" > FileList.txt
ctags -L FileList.txt
cscope -bkq -i FileList.txt

2 必备的跳转快捷键(每天背诵+实操)

分类成ctags和cscope的两种。

ctags 基本操作:

c 复制代码
Ctrl+] 跳转到光标所在函数定义位置,入栈操作
Ctrl+t 是Ctrl+]的反向操作,出栈操作
Ctrl+i 原路深入(不局限于Ctrl+]构成的调用树)
Ctrl+o 原路返回,Ctrl+i的反向操作(与Ctrl+o的区别???无栈的概念)

gf		打开名称为光标所在文件名的文件
:help helptags 查看帮助文件

下面好像是vim编辑器快捷键
hjkl	对应上下左右
[[		跳转到上面的函数开头
]]		跳转到下面的函数开头
{		转到上一个空行(常用于开始写代码了)
}		转到下一个空行(常用于开始写代码了)
*		光标单词下一次出现的地方
#		光标单词上一次出现的地方

cscope 基本操作:

bash 复制代码
cs find s  : 符号查找(函数名、宏、枚举值)	
cs find g  : 查找符号的定义(函数名、宏、枚举值)
cs find c  : 查找调用函数的所有函数
cs find t  : 搜索文本字符串
cs find e  : 搜索符合正则表达式的模式,当前光标下的单词作为模式。
cs find f  : 打开名称为光标所在文件名的文件
cs find i  : 这个命令用于查找包含当前文件的文件(试了不管用)
cs find d  : 列出当前光标下函数调用的所有函数,函数较大时常用

快速记忆

Ctrl+t 可以配合下面的操作
signal 为符号查找,所以为s.

designate /ˈdezɪɡnət/,指派,谁指派这个函数来这的?含字母g, 可跳到函数定义。

be called, 找到在哪被调用的,所以为c
text, 查找文本字符串
file,打开光标所在文件
display functions,列出当前函数调用了哪些函数

3 参考链接

1,https://blog.csdn.net/weixin_42910064/article/details/113522043

2,https://zhuanlan.zhihu.com/p/607755311

下一步试试增加花里胡哨的操作。

相关推荐
小短腿的代码世界6 小时前
Qt量化策略编辑器深度解析:从DSL解析到可视化编排的完整架构
qt·架构·编辑器
咬人喵喵6 小时前
五一劳动节 SVG 交互图文案例大全
低代码·微信·编辑器·交互·svg
啾啾啾6667 小时前
VScode用cookie登录时,输入cookie值后按回车没反应
ide·vscode·编辑器
fqbqrr7 小时前
2604,vim可定制对话框
vim
Misnice8 小时前
Cursor 常用快捷键总结
编辑器
望眼欲穿的程序猿1 天前
苹果系统使用VsCode开发QT
ide·vscode·编辑器
其实防守也摸鱼1 天前
带你了解与配置phpmyadmin
笔记·安全·网络安全·pdf·编辑器·工具·调试
Rsun045511 天前
Oracle中常用语法
编辑器
非黑皆白1 天前
配置Vscode Claude Code 插件使用deepseek-v4-pro模型
ide·vscode·编辑器
puamac1 天前
UcTabWindow 布局多tab,加载编辑器和资源管理器等自定义控件
c#·编辑器·datagridview