Vim - 实现基础跳转-简约不简单

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

1 vimrc配置

先安装ctagscscope 插件。参考博客 vim + ctags + cscope = 强大的IDE 中内容先实现最基础的跳转功能。
在家目录创建.vimrc文件,编辑.vimrc中内容如下:

"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> "列出当前光标下函数调用的所有函数,函数较大时常用

set number "show the line number
"set cursorcolumn "highlight the coloumn
set cursorline "highlight the line

set laststatus=2      " 总是显示状态栏
set cindent     "c语言使用的自动缩进
colorscheme slate " 使用配色方案为slate

set hlsearch    "高亮搜索的单词
nnoremap <silent> <Space><CR> :nohlsearch<CR> "按下空格加回车临时取消高亮

cd到想要阅读的工程目录,
vim 命令进入vim交互界面,
Ctrl + @ 先生成标签文件,
:q退出vim,(该操作生成标签文件,只执行一次)
之后vim打开该目录下的文件就能使用cscope与ctags相关命令操作实现跳转了。
【注】对于部分目录结构体非常复杂的文件,还是自己指定头文件位置,手动生成tags文件比较好。省的生成一堆没用的tag文件影响跳转速度,如下shell脚本:

#!/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 基本操作(都很重要,熟练掌握):

Ctrl+] (:tag命令)直接跳转到光标所在函数或结构第一个匹配的标签定义位置(存在单个定义时用),入栈操作
Ctrl+t 是 Ctrl+] 或 g + ] 的反向操作,出栈操作
Ctrl+i 原路深入(不局限于Ctrl+]构成的调用树)
Ctrl+o 原路返回,Ctrl+i的反向操作(与Ctrl+o的区别???无栈的概念)
g + ]  (:tselect命令也简写为:ts)列出所有匹配的标签定义,供用户选择(存在多个定义时使用),入栈操作
			然后就可以使用:tn :tp来切换上一个/下一个匹配的标签同时不增加栈深度
g + d  跳到当前函数光标所在局部变量定义处(大函数时有用)
g + f  打开名称为光标所在文件名的文件

:help tags 查看帮助文件
在bash中 vim -t main 直接打开带main标签的文件(然后使用:tn :tp切换标签防止匹配错误)

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

cscope 基本操作(我把cs find映射成了z):

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

快速记忆
Ctrl+t 可以配合下面的操作
signal 为符号查找,所以为 s 。
designate /ˈdezɪɡnət/,指派,谁指派这个函数来这的?含字母 g, 可跳到函数定义。(跳转到结构体定义使用ctags的g + ]Ctrl + ]更准确)(当选项很多时,只用上下翻页很慢,Ctrl+f后按下空格可快速翻页)
be called, 找到在哪被调用的,所以为 c 。
text, 查找文本字符串
file,打开光标所在文件
display functions,列出当前函数调用了哪些函数
备注:实验发现,当要跳转到结构体定义时,使用g + ]Ctrl + ]实现跳转到结构体定义比cscope的zg要快速简洁。

2 配色方案

因为我被nvim, lvim等配色方案娇生惯养,但又不想鼓捣插件(真的烦了),使用vim自带配色方案,发现都遵循最多三种颜色的简约风格,于是搜索学习vim配色。配色文件位置:/usr/share/vim/vim*/colors/,其中slate配色方案引起了我的注意,因为他把结构体名的亮度提高了,所以选择了这款。
参考链接:谁说 Vim 不好用?送你一个五彩斑斓的编辑器!

3 搜索高亮

想要实现/<name>搜索到的词高亮显示,但一直高亮或者结果太多又会显得有点碍眼。就如下设置vimrc:

set hlsearch    "高亮搜索的单词
nnoremap <silent> <Space><CR> :nohlsearch<CR> "按下空格加回车临时取消高亮
hi Search term=standout ctermfg=0 ctermbg=3 guifg=Black guibg=Yellow

其中nnoremap相比于nmap为非递归映射,更安全。
slient避免回显
nohlsearch为要替换的命令,说明一下,取消高亮有两种:

  1. :nohlsearch 只是取消当前搜索结果的高亮
  2. :set nohlsearch 之后的搜索都不会高亮了

可见我们只是觉的当前的高亮碍眼,所以选第一种。

修改高亮字块颜色参考:修改高亮字块颜色

4 fzf 模糊搜索定位文件位置

不用安装nerdtree, 不用学一堆快捷键。但是但是要快速找到目标文件使用:tabe + 路径:e + 路径打开目标文件,需要先大概记得目录结构,记住对自己重要的几个关键文件名关键词。使用fzf模糊搜索。
详情参考链接Linux 下的模糊查找神器 fzf 使用教程
Ubuntu安装:

sudo apt install fzf

使用:

find * -type f | fzf > selected

进入后输入文件名它就开始找了,如果输入带单引号字符 (') 为前缀,则进行“完全匹配”(或“非模糊”)。

5 美化tab窗口

参考连接:VIM-美化你的标签栏

6 参考链接

1,https://blog.csdn.net/weixin_42910064/article/details/113522043
2,https://zhuanlan.zhihu.com/p/607755311

下一步试试增加花里胡哨的操作。想要实现多标签,只需要打开一个vim, 想要切换到目标文件就可以立即切换。然后尝试了很多,nvim, lvim,直到最后看了基础vim学习,发现vim都有了, 请看链接Vim 命令从头学习记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值