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

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

相关推荐
VidDown16 天前
VidDown 工具站:免费、本地优先的开发者工具箱
javascript·编辑器·音视频·视频编解码·视频
VidDown16 天前
显卡处理视频技术详解:从硬解码到 NVENC,GPU 如何让视频处理起飞?
javascript·编辑器·音视频·视频编解码·视频
夜猫逐梦16 天前
【UE基础】03.蓝图与编辑器工作流
编辑器·ue·蓝图·ue编辑器
VidDown16 天前
视频帧率技术详解:从 24fps 到 120fps,帧率如何影响你的观看体验?
网络·网络协议·编辑器·音视频·视频编解码·视频
爱就是恒久忍耐16 天前
VSCode里如何比较2个branch
ide·vscode·编辑器
bloglin9999916 天前
vscode中可视化的合并分支,在“合并编辑器中解析”中“与基线进行比较”是什么意思
ide·vscode·编辑器
zyplayer-doc17 天前
企业知识库安全与权限管理完全指南:从加密到审计的六层防护
人工智能·安全·pdf·编辑器·创业创新
古德new17 天前
鸿蒙PC迁移:Photoflare Qt 图片编辑器鸿蒙PC适配全记录
qt·编辑器·harmonyos
春日见17 天前
vscode的AI编程插件推荐:
大数据·ide·vscode·算法·机器学习·编辑器·ai编程
jieshenai17 天前
VScode sys.path,并使CTRL+左键可访问源码
ide·vscode·编辑器