Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>FnList 函数列表New to Visual Studio Code? Get it now.
FnList 函数列表

FnList 函数列表

OOOYD

|
3 installs
| (0) | Free
极速、轻量的函数导航面板:打开工程立刻显示当前文件的函数、宏、类型与全局变量。零依赖自带扫描器、置顶书签双作用域、光标自动跟随,滚动丝滑不卡顿。
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

FnList 函数列表

极速、轻量的函数导航面板。 打开工程立刻看到当前文件的函数、宏、类型与全局变量 —— 不用等语言服务,不用装依赖。

英文简介见文末 → English summary ↓(面板界面目前为中文)

面板从上到下是三块:搜索与排序工具栏(版本号在搜索框最右端)、置顶模块(没有置顶时自动隐藏)、 函数列表(文件名行固定在模块顶部,不随列表滚动,右端是该文件的符号数 —— 搜索时显示「命中 / 共 N」,鼠标悬停可看整个工程的符号与文件总数)。 列表里每个符号都有图标与配色区分类型,图标取自 VSCode 官方 codicon、与自带大纲同源 —— 函数=实心立方体、函数原型=同款空心轮廓、宏=常量方框、类型=结构方块、变量=变量括号; 函数原型另标 「声明」 文字。

功能

符号导航

  • 列出当前文件的函数、宏定义、类型(struct / enum / class / typedef)与全局变量
  • 跟随编辑器自动切换文件,无需手动刷新
  • 「当前文件」= 活动标签页里的那个代码文件:切到扩展详情页、设置、欢迎页这类非代码页面, 或关掉所有文件时,列表会空着并提示原因(与 VSCode 自带大纲的行为一致); 版本对比视图(时间线 / git diff)里认修改侧,也就是你正在编辑的那个工作副本, 点函数只移动光标、不会把你弹出对比
  • 声明与定义一眼可辨:函数定义为实心立方体,函数原型为同款空心轮廓并标有 「声明」 文字(与 VSCode 自带大纲写法一致)
  • 签名只保留参数类型:(device_t *dev, block_set_t *blocks) 简化为 (device_t *, block_set_t *), 长函数名也能完整显示;无参函数显示 (void) 而不是空括号
  • 带参宏显示参数名 MIN (a, b),与自带大纲一致

置顶(书签)

  • 任意行都能置顶:光标在函数起始行记为该函数,否则记该行内容
  • 双作用域:当前文件置顶(只在本文档显示)与跨文件置顶(本工作区内所有文件可见)。 置顶随当前工作区存储 —— 换工作区打开、目录改名 / 移动、换机器都不会跟随
  • 置顶区固定在顶部,不随下方列表滚动 —— 翻到列表深处想点置顶,不用再滚回去
  • 一键清除:置顶栏右侧的按钮点一下即清空全部置顶(所有文件、两种作用域), 并弹出可点的「撤销」,误点也能一键找回,不需要弹窗确认
  • 改代码后按名字自动重新绑定行号,函数上下移动也不会失联
  • 函数被删掉(或改名)时书签保留并标「函数不存在」;文件被删(或重命名)时标「文件不存在」, 两种情况都灰显不可点,函数或文件回来后自动恢复

搜索

  • 包含匹配、不区分大小写:搜 read 会命中 read_stream、ReadBuffer
  • 框内按 ↑ ↓ 找回历史:回车或点击结果时记入,最多 10 条,去重后最近的在最前
  • 搜索只过滤符号列表,置顶区始终完整显示

交互

  • 光标跟随:在代码里移动光标,列表自动高亮当前函数并滚动到可见处;切换高亮有一次柔和的放大缓动
  • 滚动丝滑:行元素与行索引一一绑定,滚动时零 DOM 重建,由浏览器原生滚动平移
  • 键盘操作:搜索框内 ↑ ↓ 翻历史,列表内 ↑ ↓ 移动高亮、Enter 跳转、Esc 清空搜索
  • 单击 / 双击:单击以预览标签打开、焦点留在列表;双击打开常驻标签并聚焦编辑器
  • 深色与浅色主题均完整适配

快捷键

命令 macOS Windows / Linux
搜索函数(聚焦面板搜索框) ⌃⌥F Ctrl+Alt+F
置顶 / 取消置顶当前行(当前文件) ⌃⌥B Ctrl+Alt+B
置顶 / 取消置顶当前行(本工作区跨文件) ⌃⌥⇧B Ctrl+Alt+Shift+B
打开函数列表 ⌃⌥L Ctrl+Alt+L

自定义快捷键

键位走 VSCode 标准机制,插件不做任何锁定,改键与恢复默认都原生支持。 注意:改键在「键盘快捷方式」面板,不是「设置」页(设置里只能改参数,改不了键):

  • 打开面板:左下角齿轮 ⚙ → 键盘快捷方式;或菜单 Code → 设置 → 键盘快捷方式; 快捷键是和弦——macOS 按 ⌘K 松开再按 ⌘S,Windows / Linux 按 Ctrl+K 松开再按 Ctrl+S
  • 改键:面板里搜索 FnList → 双击命令 → 按下新组合(例如 Alt+N)→ 回车,立即生效
  • 一键恢复默认:面板里右键命令 → 重置键位,即回到默认;想整体还原, 打开 keybindings.json 删掉自己加的条目即可
  • 「置顶 / 取消置顶」是开关式:同一键按第二次即取消(与 VSCode 切换注释同习惯)
  • 「重建索引」「查看被跳过的文件」没有默认键,可在同一面板自行绑定

设置

设置项 默认值 说明
fnlist.includeExtensions C/C++ 家族与 py(17 项) 需要索引的文件扩展名;其它语言可自行添加(尽力识别)
fnlist.excludeGlobs [] 额外排除的 glob,例如 **/third_party/**
fnlist.maxFileKB 300 超过该大小的文件后台跳过;当前打开的文件放宽到 10 倍(约 3MB),超过仍跳过
fnlist.maxFiles 50000 扫描文件数上限
fnlist.retainFiles 2000 符号表保留上限(超出按最久未使用淘汰)

支持的语言与已知取舍

面板的秒出、零依赖、离线可用,靠的是自带启发式扫描器(直接读源码,不依赖语言服务)。 代价是准确度低于语言服务,因此默认只索引验证过的语言:

  • C / C++(含 h / hpp / cc / cxx 等别名):宏修饰签名(API_EXPORT void fn(void))、 C++ 类外定义、__attribute__ 尾缀、extern "C" 包裹、K&R 风格函数、嵌套注释与字符串屏蔽
  • Python:def / class

已知边界(是设计取舍,不是 bug):

  • 只收顶层符号,类 / 结构体内的方法不收(例如 Java / C# 工程只会列出类名)
  • 条件编译只走主分支:#if 0 … #else 里的 #else 分支不会被收录
  • Python 按行启发识别,文档字符串里形似代码的内容可能产生误报
  • 其它语言(Go、Rust、TypeScript、Swift 等)可在 fnlist.includeExtensions 自行添加, 属尽力识别:带类型注解的声明可能被认成变量名,漏检时也没有提示
  • 拿不准时与 VSCode 自带大纲对照:大纲有、本面板没有 → 大概率是上述边界; 两边都没有 → 才值得当 bug 报

性能

自带一个轻量扫描器直接读源码建索引,不依赖语言服务,因此打开工程就能出结果:

  • 零依赖:纯 JavaScript,无第三方包、无编译步骤、无网络请求
  • 后台有界并发索引(8 路,逐个让出事件循环):实测 600 个文件扫描期间最长停顿 11ms,不卡输入
  • 增量更新:文件改动即时重解析;与全量扫描共用同一套排除规则(excludeGlobs、 files.exclude、search.exclude 及内置的 node_modules/build 等)
  • 内存与符号数线性相关,约 0.3 KB/符号 —— 万级符号的工程在 2 MB 上下; 超出保留上限时按最久未使用淘汰(当前文件与置顶文件永不淘汰),内存不会无限增长
  • 面板查询是纯内存过滤:无论工程多大都在 0.05ms 量级
  • 超大文件降级:超过 fnlist.maxFileKB 的文件后台跳过并在文件名行右侧提示,点击可查看清单; 当前打开的文件放宽到 10 倍阈值(约 3MB)内始终全量解析,超过硬上限仍降级跳过

隐私

全部处理都在本地完成:只读取工作区内的源文件,不联网、不上传任何代码。

English

FnList is a fast, lightweight function list for VS Code. Open a project and the panel immediately shows the functions, macros, types and globals of the current file — no language server, no dependencies, no network requests. It also gives you per-file / per-workspace pins, search history, cursor follow and smooth virtual scrolling.

The panel UI is in Chinese — this extension is Chinese-only at the moment, and the documentation above is Chinese for that reason. This summary is here so English readers can see what the extension does before installing.

  • Symbols of the current file — functions, macros, types (struct / enum / class / typedef) and global variables. "Current file" means the code file in the active tab: in a comparison view (timeline / git diff) it is the editable side, while a non-code tab or no open file at all leaves the panel empty and tells you why
  • Pins (bookmarks) — pin any line, with two scopes: this file, or this workspace (visible from every file). Stored per workspace, and re-bound by name when code moves
  • Search — substring match, case-insensitive; ↑ ↓ inside the box walks up to 10 recent queries
  • Click / double-click a symbol — single click opens it as a preview tab and keeps focus in the list; double click opens a permanent tab and focuses the editor. When the target file is already the file of the active tab (including the working copy inside a diff view), the cursor is simply moved and you are not pulled out of the comparison
  • Keys — ⌃⌥F search, ⌃⌥B pin in this file, ⌃⌥⇧B pin in this workspace, ⌃⌥L open the panel (Ctrl+Alt+… on Windows / Linux); all of them are rebindable in Keyboard Shortcuts
  • Languages — C / C++ and Python are verified; others can be added through fnlist.includeExtensions (best-effort heuristics). Only top-level symbols are collected: methods inside a class or struct are not listed
  • Privacy — everything runs locally; it only reads source files in your workspace and never uploads code

Settings: fnlist.includeExtensions, fnlist.excludeGlobs, fnlist.maxFileKB, fnlist.maxFiles, fnlist.retainFiles.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft