大纲视图默认按代码位置排序,支持手动切换为按名称(字母)排序,仅对当前文件生效,且受语言扩展、符号类型过滤和语法正确性影响。

大纲视图默认按代码位置排序,不支持全局字母排序;但可以按名称排序(即字母顺序),需手动切换,且仅对当前文件生效。
大纲视图右上角的「排序菜单」在哪
打开任意支持语言服务器的文件(如 .ts、.py、.js),确保侧边栏已显示「大纲」面板(图标为书本形状)。右上角有三个点(⋯),点击后出现「Sort by: Position / Name / Kind」选项。选中 Name 即按字母顺序排列所有符号(函数、类、变量等)。
常见错误现象:菜单不可见——可能因文件未被识别为对应语言类型,检查右下角状态栏的语言模式(如显示为“Plain Text”),点击它并选择正确语言(如“TypeScript”);或语言扩展未启用(如 Python 扩展未安装,Outline 就不会解析变量名)。
为什么按 Name 排序后 import 或 private 成员没出现
大纲视图是否显示某类符号,取决于语言扩展的实现和 VSCode 的过滤设置,和排序方式无关:
- 某些扩展(如旧版 Python 扩展)默认不报告局部变量或私有成员,即使勾选了
Name也看不到 - 右上角三点菜单里可取消勾选
Variables或Constants,它们被隐藏后自然不参与排序 - 语法错误(如 JS 中缺少分号导致解析中断)会让语言服务器跳过后续符号,大纲变空或不全
-
import语句本身不是“符号”,一般不会出现在大纲中;想管理导入顺序,请用 ESLint 的sort-imports规则或 Prettier 配置,而非依赖大纲
Cmd+Shift+O 打开的符号列表能按字母排吗
可以,但逻辑不同:Cmd+Shift+O(或 Ctrl+Shift+O)调出的是「转到符号」快速筛选框,输入时自动模糊匹配,结果默认按代码位置排序;但它支持在输入前加 @ 前缀触发符号导航模式,此时按下 Tab 可切换排序方式(Position → Name → Kind),再按方向键浏览即可按字母顺序选择。
注意:这个排序只影响弹窗内的临时列表,不影响侧边栏大纲视图的持久状态;且不支持保存该排序偏好,每次打开都要手动切一次。
按名称排序的实际效果和限制
排序基于符号声明的原始名称,不做标准化处理:
-
getUser和get_user是两个独立字符串,下划线 `_` ASCII 值(95)小于小写字母(97–122),所以get_user会排在getUser前面 -
APIHandler(大写 A)排在apiClient(小写 a)前面,因为 ASCII 中A= 65,a= 97 - 无大小写忽略选项,VSCode 内置不提供
Sort by Name (case-insensitive)这类变体 - 排序不改变代码实际顺序,也不影响折叠行为或代码执行——纯 UI 层展示调整
真正需要稳定、可复现的字母顺序管理(比如配置项列表、枚举常量),别依赖大纲视图排序,直接用 editor.action.sortLines 命令处理文本块更可靠,但得先清理缩进和引号格式。











