代码导航功能
IfAI 提供强大的代码导航功能,帮助您高效理解和浏览代码库。
跳转到定义
直接跳转到符号定义的位置。
键盘快捷键
| 平台 | 快捷键 |
|---|---|
| Mac | F12 或 Cmd+点击 |
| Windows/Linux | F12 或 Ctrl+点击 |
可查找的内容
- 函数定义
- 类定义
- 变量声明
- 类型定义
- 接口声明
- Trait 实现
- 宏定义
使用示例
// 将光标放在 'formatDate' 上并按 F12
const result = formatDate(new Date());
// 跳转到:
function formatDate(date: Date): string {
return date.toISOString();
}1
2
3
4
5
6
7
2
3
4
5
6
7
跨语言支持
跨语言无缝工作:
// 在 TypeScript 中
import { utils } from './helpers';
utils.formatName(); // F12 → 跳转到 helpers.ts
// 在 Rust 中
use crate::models::User;
let user = User::new(); // F12 → 跳转到 models.rs
// 在 Python 中
from auth import login
login(user) // F12 → 跳转到 auth.py1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
查找引用
定位使用符号的所有位置。
键盘快捷键
Shift+F12(所有平台)
引用类型
IfAI 对引用进行分类:
| 类型 | 图标 | 描述 |
|---|---|---|
| 读取 | 👁️ | 符号被读取/使用 |
| 写入 | ✏️ | 符号被修改 |
| 定义 | 📍 | 符号定义位置 |
引用面板
┌─────────────────────────────────────────────────────────┐
│ 'User' 的引用(找到 12 处) │
├─────────────────────────────────────────────────────────┤
│ 📍 models/user.ts - 第 15 行 [export class User]│
│ 👁️ auth/login.ts - 第 23 行 [User user] │
│ ✏️ auth/login.ts - 第 45 行 [user.name = ...] │
│ 👁️ components/UserCard.tsx - 第 8 行 [import { User }] │
│ ✏️ services/user.service.ts - 第 67 行 [user.update()] │
└─────────────────────────────────────────────────────────┘1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
使用场景
了解影响:
重命名函数之前,查找所有引用以确保
不会破坏任何内容。1
2
2
安全重构:
在进行更改之前查看哪些文件依赖于类。1
调试依赖关系:
追踪值在何处被意外修改。1
符号搜索
在整个项目中搜索符号。
键盘快捷键
Cmd+Shift+O(Mac)或 Ctrl+Shift+O(Windows/Linux)
搜索过滤器
| 前缀 | 搜索 |
|---|---|
@ | 符号(函数、类、变量) |
# | 标签 |
: | 按语言 |
搜索示例
@User → 查找 User 类、User 接口、user 变量
@login → 查找 login 函数、login 组件
:typescript → 仅搜索 TypeScript 文件1
2
3
2
3
符号索引
IfAI 自动为您的代码建立索引以实现快速导航。
支持的语言
IfAI 支持 35+ 种编程语言:
| 类别 | 语言 |
|---|---|
| Web | JavaScript、TypeScript、HTML、CSS、JSX、TSX |
| 后端 | Python、Go、Java、C#、PHP、Ruby |
| 系统 | Rust、C、C++、Swift、Kotlin |
| 脚本 | Lua、Perl、Shell、PowerShell |
| 数据 | SQL、R、Julia |
| 配置 | YAML、TOML、JSON、XML |
索引状态
在状态栏中检查索引进度:
索引中:234 个文件(100%)| 已索引 15,432 个符号1
重新索引
强制重新索引:
Cmd+Shift+P > "IfAI: 重新索引项目"1
面包屑导航
使用面包屑跟踪您的导航路径。
src > components > auth > Login.tsx1
点击任何面包屑跳回。
工作原理
Tree-Sitter 解析
IfAI 使用 Tree-sitter 进行准确解析:
- 快速增量解析
- 容错(适用于不完整的代码)
- 语言无关的 API
跨文件分析
跨文件的符号关系:
// auth.ts
export function login() { ... }
// main.ts
import { login } from './auth';
login(); // ← 知道这来自 auth.ts1
2
3
4
5
6
2
3
4
5
6
缓存
索引的符号被缓存以获得即时结果:
- 项目缓存在会话之间持久化
- 文件更改时的增量更新
- 编辑时的自动失效
技巧和窍门
快速导航
- Cmd+点击:跳转到定义
- Cmd+Shift+点击:查看定义(内联预览)
- F12:跳转到定义
- Shift+F12:查找引用
多光标导航
- Alt+点击:在每次点击处添加光标
- Cmd+D:选择符号的下一个出现位置
- Cmd+Shift+L:选择所有出现位置
仅键盘导航
| 操作 | 快捷键 |
|---|---|
| 显示所有符号 | Cmd+Shift+O |
| 跳转到行 | Ctrl+G |
| 跳转到文件 | Cmd+P |
| 后退 | Ctrl+- |
| 前进 | Ctrl+Shift+- |
性能
对于大型代码库,IfAI 优化导航:
- 延迟加载:按需索引文件
- 增量索引:仅扫描更改的文件
- 智能缓存:在内存中缓存热点符号
故障排查
"未找到符号"
解决方案:
- 等待索引完成
- 检查语言是否支持
- 确保文件没有语法错误
- 重新索引项目
索引缓慢
解决方案:
- 排除大型/生成的目录
- 减少索引范围
- 检查可用内存
引用过时
解决方案:
- 清除符号缓存
- 重新索引项目
- 重启 IfAI
学习笔记
