Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>Files StudioNew to Visual Studio Code? Get it now.
Files Studio

Files Studio

lupee

|
8 installs
| (0) | Free
Browse the local file system in the VS Code sidebar like Finder / File Explorer; click a file to open it in the current window
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

File Studio

像 macOS Finder / Windows 资源管理器一样,在 VS Code 侧边栏中浏览本机文件系统,与当前工作区无关。

功能

  • 活动栏新增「File Studio」视图,打开即显示本机文件系统:
    • 主目录(默认展开)
    • 系统根目录:macOS 显示为 Macintosh HD,Linux 显示为根目录,Windows 列出所有盘符
    • macOS 外接卷(/Volumes 下的其他磁盘)
  • 侧边栏只有一个视图(工具栏与文件树之间没有可拖拽的分割线),视图标题栏里不放任何按钮:
    • 工具栏一行:最左边是一个路径文本框,占满剩余宽度。粘一个完整路径进去按回车,树里从顶层位置一路展开到那个文件 / 文件夹、选中并滚过去,焦点随之移到那一行上(文件夹滚到顶上,好看见它里面的东西)。粘来的路径首尾带引号、终端里拖文件进去带的反斜杠转义空格、浏览器拖来的 file:// 前缀、~ 开头、末尾多一个分隔符都认;不是完整路径、路径不存在、不在树的任何顶层位置下面时提示。Esc 清空文本框。新建文件夹 / 新建文件不占工具栏,在目录的右键菜单里(见下文)
    • 右边五个只有图标的按钮:定位当前文件(图标是靶心,在树里从顶层位置一路展开到编辑区当前打开的文件所在的目录、选中该文件并滚过去。看的是编辑区激活的那个标签页:文本、图片、笔记本都认,差异编辑器取右边修改后的那份;激活的是图片预览、文本比对这类面板时取最近的文本编辑器。一个文件都没开、开着的是未保存的新文件或远程文件时会提示;文件藏在隐藏目录下而「显示隐藏文件」没开时只能展开到看得见的那一级)、刷新(重新读取磁盘内容并重新探测盘符 / 外接卷;平时磁盘上的变化会自动跟进,见下文「自动刷新」,这个按钮是兜底)、全部折叠、折叠其它(只留选中的条目从顶层位置一路下来的那几级展开着,别的展开着的目录全收起;选中的是展开着的目录,它本身保持展开,它里面再往下展开的也收;多选就都留;一个都没选就等于全部折叠)、设置(齿轮),悬停显示名称
    • 齿轮菜单:切换「显示隐藏文件」、「紧凑文件夹」、「Git 状态着色」;「行尾按钮」是二级菜单,行尾显示开了几个(如 3/6),展开后列出行尾的六个动作按钮,每个单独打勾开关,点一项菜单不收、勾随即更新,可以接着点下一项;「目录字体」是二级菜单,行尾显示当前设置,展开后是「跟随系统」(默认,用 VS Code 的界面字体)与「等宽字体」(macOS 上是系统的 SF Mono,Windows 退回 Consolas;名字一列列对齐,目录看着整齐),当前的那项打勾,点选即切换;「界面语言」是二级菜单,行尾显示当前语言,展开后列出「跟随 VS Code」与六种语言,当前设置打勾,点选即切换;「设置水印…」弹出输入框输入水印文字(预填当前的),行尾显示当前的水印文字,清空即移除;「设置提交信息…」弹出输入框输入「Git 提交」用的提交信息(预填当前的;行尾按钮直接用它提交,右键菜单的提交窗口拿它预填),行尾显示当前的提交信息,清空即移除
    • 工具栏第二排是收藏的文件夹与文件:在任意行(文件、文件夹,主目录、磁盘、卷也行)上右键选「添加收藏」把它收藏,已收藏的条目右键菜单里显示的是「取消收藏」(收藏不常用,所以放在右键菜单里,不占行尾按钮的位置),每个收藏是一个彩色按钮,与上一排灰色的工具栏按钮区分:收藏的文件夹是蓝色(取主题的主按钮色),收藏的文件是紫色(取状态栏没打开文件夹时的底色,默认 #68217A),图标也区分文件夹与文件(文件按扩展名画类型图标),按钮名默认为文件夹名 / 文件名,放不下时换行。单击文件夹按钮在下面的树里展开到它、选中并滚到顶上;单击文件按钮在当前窗口打开该文件,同时在树里展开到它并选中。右键按钮可重命名(只改按钮名,路径不变;名字在视图里弹出的小窗口里改,下面灰字是它指着的路径)或移除收藏。条目已不存在时单击会提示,并可顺手移除。收藏记录在配置文件里(见下文),没有收藏时这一排不显示
  • 树的最下面是状态栏:选中一条时显示它所在目录里直接有多少个文件夹、多少个文件(只数这一层,不递归子文件夹)。选中的是文件时数它所在的目录,左边显示的目录名即统计对象(顶层位置显示其名称,悬停显示完整路径)。数的是树里列出来的条目,隐藏文件算不算跟着「显示隐藏文件」的设置走;新建、删除后自动更新
  • 界面语言支持中文、English、Deutsch、Français、日本語、한국어,默认跟随 VS Code 的显示语言,选择记录在配置文件里(见下文)。命令面板中的命令标题由 VS Code 按其显示语言渲染,不受此设置影响
  • 紧凑文件夹(默认开启,齿轮菜单里可关):只含一个子文件夹、别的什么都没有的文件夹,与那个子文件夹并成一行显示,一直并到某一级不止一个条目为止,各级之间用 . 隔开——a/b/c/d 显示为 a.b.c.d,与 IntelliJ 的紧凑包显示一致,Java 那样一路 cn/x/module/ocr/openai 的目录一屏就看得下。并起来的这一行就是最里面那一级:展开它列的是 d 的内容,收藏、重命名、删除、复制路径、新建也都落在 d 上(悬停显示的完整路径即为它)。隐藏项算不算跟着「显示隐藏文件」的设置走(显示隐藏文件后条目多了,原本并起来的行可能散开);符号链接不往里并,避免绕出环来;顶层位置(主目录、磁盘、外接卷)不参与并行
  • 文件树由插件自己绘制,图标为统一的线条图标(不跟随 VS Code 的文件图标主题)。主目录下的「下载」文件夹显示为红色图标、「桌面」文件夹显示为蓝色图标,便于快速定位(macOS / Windows 通用,Windows 上 OneDrive 备份后的桌面同样识别)
  • 文件按扩展名显示易于辨认的类型图标并着色:网页 < >(橙)、XML(蓝)、JSON { }(黄)、CSS { }(蓝)、YAML 列表(紫)、Markdown M↓(蓝)、PDF(红)、Word W(蓝)、PowerPoint P(橙)、Excel / CSV 表格(绿)、图片(紫)、音频(绿)、视频(红)、压缩包(黄)、代码 </>(按语言着色)、配置文件、字体;.mt(Markdown 模板)用它专属的那张图标——方框里一个蓝色 M 加一个橙色 T,与 markdown-template-plugin 的 icons/mt-light.svg / mt-dark.svg 一致,浅色、深色主题各一套配色;.vsix(VS Code 扩展包)同样是方框加字母,蓝色的 V 配橙色的 S(它的头两个字母)。README.md(摊开的书,中缝是橙的)与 CLAUDE.md(一只橙红色的像素机器人:窄头、两侧支棱出的耳朵、两条短腿,两只眼睛挖空透出行的底色)按整个文件名认(优先于扩展名,大小写不论)。README.md 那张的画法与 .mt、.vsix 同一族:都是圆角方框加里面的图形,摆在一起看着是一套;CLAUDE.md 那张不套框,机器人铺满整格,摆在树上比套了框的显眼;未识别的扩展名用普通文件图标
  • 鼠标放到任意行(目录或文件)上时,行尾出现六个按钮(默认都显示,齿轮菜单的「行尾按钮」子菜单里每个都能单独关掉,关掉的不再出现;其中「在 Finder 中打开」「在终端中打开」「Git 提交」在右键菜单里也有,关掉行尾按钮后照样能用(右键菜单的「Git 提交」先弹出提交窗口,见下文),其余三个在右键菜单里没有重复项):在 Finder 中打开(Windows 为在资源管理器中打开,Linux 为系统文件管理器;在文件上是在系统文件管理器中显示,即定位到该文件)、在终端中打开(macOS 打开「终端」,Windows 打开命令提示符 cmd,Linux 用 VS Code 的 terminal.external.linuxExec 设置;系统终端起不来时退回集成终端。在文件上开在其所在目录)、复制路径(按钮上是字母 P;复制成功后该行整行闪一下,表示复制的是这一行;系统开了「减弱动态效果」就只亮不淡)、复制名称(字母 N,只复制这一行的名字:文件带扩展名,文件夹就是文件夹名,并成一行的目录复制的是最里面那一级;成功后同样整行闪一下)、插入路径到光标处(图标是几行文本加一个 I 形光标,把完整路径插到编辑区当前光标处、末尾带一个换行,插完焦点交回编辑器;多光标时每处都插,选中了文本就替换掉;换行符用该文档自己的 LF / CRLF。当前激活的是图片预览、文本比对这类面板时,插到最近编辑的那个文本编辑器里并切回它;一个文件都没开、或编辑器只读时会提示。成功后同样整行闪一下)、Git 提交(图标是方框里一个对号,只在受 Git 管理的行上出现:在某个 Git 仓库里、不被 .gitignore 忽略、不是 .git 目录本身,主目录、磁盘、卷这些顶层位置上也没有。点了把这一行提交进它所在的仓库:没跟踪的新文件、改过的、删掉的先 git add -A 再 git commit,只提交这一行(文件夹连同其下所有内容),暂存区里用户自己 add 的别的文件不带进去;点在选中的一批里就是整批一起提交,同一仓库的合成一次提交,不同仓库各提交一次。提交信息用齿轮菜单「设置提交信息…」设好的那条(记在配置文件里,见下文),不再询问,还没设置时先弹输入框设、设好了接着提交;想先看看要提交哪些文件、另写提交信息或者提交完顺手推送,用右键菜单的「Git 提交」。提交可能要跑 hook,过程中显示进度;完成后提示提交成功(带短哈希)并让那几行闪一下,没改动的、不在仓库里的、被忽略的、出错的(如 user.name 没配置、hook 失败)各提示一句。文件名的 Git 着色随后自动刷新。即使「Git 状态着色」关着也会算 Git 状态(页面靠它判断哪些行受 Git 管理,只是不着色)。数据由插件自己跑 git,不经过 VS Code 内置的 Git 扩展,所以整块磁盘上任何仓库里的文件都能提交,不限于当前工作区)
  • 目录内容按需读取,展开时才加载;收展状态、选中项和滚动位置在视图折叠再展开后保持
  • 展开的目录下面有一条竖线贯穿它的子项(缩进参考线),按层级着色:最外一层是主题的灰线,往里依次红、橙、黄、绿、蓝、紫(取主题的 charts.* 色),七色循环,第 8 层又从灰开始。鼠标悬停在某一行上时,行的底色取它父目录下面那条线的颜色(线色 22% 透明度叠在侧栏底色上,文字颜色不动),一眼看出这行归哪条线;父线是灰线的、顶层位置的、选中的行仍用主题默认的悬停 / 选中色
  • 自动刷新:树上正展开着的目录由插件盯着,在终端里新建、别的程序写入、Finder / 资源管理器里删除或改名之后,半秒内那个目录自动换上新内容,不闪「加载中」,没了的条目连同其下的收展状态与选中一并清掉,其余一动不动。做法参考 VS Code 资源管理器:变化先攒 500ms 再处理(npm install、git checkout 这类一下子改几百个文件的,一个目录只重读一遍),只重读涉及的目录,重读出来与原先一样就不动;自己在树里新建、删除、复制、移动之后不会再刷第二次。与 VS Code 不同的是监听范围——它递归监听整个工作区,本插件浏览的是整块磁盘,只非递归地盯展开着的目录,折叠了就不盯,折叠过又展开时先重读一次补上这期间的变化。「紧凑文件夹」并起来的一行 a.b.c 的各级也一并盯着:中间某级多了东西那一行自动拆开,最里一级只剩一个子文件夹时再并进去;没并起来的普通子文件夹里面不盯(那得把每个子文件夹都监听上,node_modules 一展开就是上千个),它在外面变成只剩一个子文件夹时,父目录里那一行要到父目录下次重读、或它被展开时才并起来。文件内容改了树不动(树上只有名字和类型),隐藏文件的变化在「显示隐藏文件」关着时也不动。macOS 上外接卷插拔后顶层位置自动更新;Windows 的盘符没有目录可监听,插拔后仍需点刷新。最多同时盯 256 个展开着的目录,再多的不盯,靠手动刷新
  • Git 状态着色(默认开启,齿轮菜单里可关):文件所在目录是 Git 仓库时,文件名按 git status 着色,名字后面跟一个同色的小字母,与 VS Code 资源管理器的 Git 装饰同一套颜色(取主题的 gitDecoration.* 色,深浅主题自动适配):改过的橙黄 M、已暂存的新文件绿 A、还没跟踪的新文件绿 U、改了名的绿 R、有冲突的红 !;被 .gitignore 忽略的(node_modules、out、.idea 这些)变灰、不带字母。含有变化的文件夹一路到仓库根都染成里面最重的那种颜色(冲突 > 修改 > 改名 > 新增 > 未跟踪),字母是 ●——顺着颜色展开就能找到改了的文件;仓库根那一行也着色,在上一级目录里一眼看出哪些项目有没提交的改动。没跟踪、被忽略的目录 git 只报目录本身,它下面的东西都算同一状态。选中行仍用选中的前景色。数据由插件自己跑 git --no-optional-locks status -z --porcelain=v2 --untracked-files=normal --ignored=matching 取得(VS Code 内置 Git 扩展的 API 只认它打开了的仓库,管不到整块磁盘),只算树上正展开着的目录所在的仓库,展开时先问 git rev-parse 它在哪个仓库里(结果按目录缓存),仓库里的目录都折叠了就放掉。什么时候重算:展开着的目录里有动静(含文件内容改动)、在 VS Code 里保存了文件、以及 .git 里的 HEAD / index / logs/HEAD 变了(commit、checkout、reset、stash 都会动它们);一个仓库 1 秒内最多算一次,结果没变不重画。一个仓库的变化条目超过 10000 条(没写 .gitignore 的大仓库)就不着色,与 VS Code 的 git.statusLimit 默认值一致。本机没装 git(或 VS Code 的 git.path 设置指的不对)时静默不着色。不影响水印着色:两者同时存在时水印着色优先
  • 单击任意文件即在当前 VS Code 窗口中打开;单击目录只是选中它,展开 / 折叠交给它前面的箭头,或者在这一行上双击(点行与收展分开,挑一批文件夹去复制时不会一路把它们都展开;箭头看着是 16px,实际可点的是一行高的 28px 见方。按着 ⌘/Ctrl、⇧ 的双击不收展——那两下是在挑条目)。键盘上仍是右键展开、左键折叠,Enter 收展
  • 多选:⌘(Windows / Linux 为 Ctrl)点击加选或减选一条,⇧ 点击选中起点到这一行之间的所有行(⇧ + 上下键同样),按的是树上看得见的行序,跨目录、跨层级都能选一段,与 Finder / 资源管理器一致。这两下只管选,不会收展目录、也不会打开文件;普通单击回到只选一条。选中多条时状态栏左边写「已选 N 项」,右边的两个计数变成这批里的文件夹数与文件数(悬停列出全部路径);右键菜单只留对一批条目说得通的「复制到…」「移动到…」「删除」,这批里有受 Git 管理的行时还有「Git 提交」(整批弹出一个提交窗口一起提交,不在仓库里的、被忽略的在窗口里单独提示),Delete 键同样删整批。右键点在没选中的行上,动作只对那一行
  • 键盘:上下键移动(按着 ⇧ 是选一段),右键展开、左键折叠或跳到父目录,Enter 打开文件或切换目录,Home / End 跳到首尾,F2 重命名,Delete(macOS 也可 ⌘⌫)删除
  • 右键菜单:在目录上新建文件夹 / 新建文件(建在这个目录下,名称在视图里弹出的小窗口里填,名称框下面灰字写明建在哪个目录下;重名、名称不合法或建不成时原因写在窗口里,填的名字保留,改了接着提交;Esc、点窗口外面或「取消」关掉。新建后展开到新条目并选中,新建文件后立即打开;命令面板里调这两个命令时建在当前选中的目录下,选中文件时取其所在目录,未选中时为主目录);任意条目(含主目录、磁盘、卷)上都有在 Finder 中打开(Windows 为在资源管理器中打开,Linux 为在系统文件管理器中打开;目录是打开它本身,文件是在文件管理器里定位到它)与在终端中打开(Windows 为在命令提示符中打开;目录开在它里面,文件开在其所在目录),与行尾那两个按钮是同一套动作,行尾按钮关掉了这里照样有;受 Git 管理的行(在某个 Git 仓库里、不被 .gitignore 忽略、不是 .git 目录本身,顶层位置除外)上还有Git 提交,单独一段,行尾按钮关掉了这里照样有。与行尾按钮直接提交不同,它先弹出一个单独的提交窗口(560×520 的紧凑小窗口,出现在 VS Code 主窗口正中,不显示标签栏、面包屑与状态栏,不在编辑区里开标签页;VS Code 自己的「编辑器移到新窗口」那一套,旧版 VS Code 不支持时退成开在旁边一栏):上面列出会提交的文件,按仓库分组,组头是仓库名、当前分支(有上游时写成 main → origin/main)与仓库路径,每个文件带与树上 Git 着色同色的状态字母(M 修改、A 新增、D 删除、R 改名、U 未跟踪、! 冲突),没跟踪的文件夹逐个文件列出来,一个仓库最多列 1000 个;不在仓库里的、被 .gitignore 忽略的在清单下面提示一句;点「刷新」或切回这个窗口时重新列一遍。下面是提交信息的文本框,预填齿轮菜单「设置提交信息…」设好的那条(没设就空着),整段选中,可以改写、也可以多行;底下是提交、提交并推送与取消,没有可提交的文件或提交信息为空时两个提交按钮是灰的,⌘Enter(Windows / Linux 为 Ctrl+Enter)等于点「提交」。提交方式与行尾按钮一样(git add -A 再只提交这些路径),窗口里写的提交信息只用这一次,不改设好的那条。提交成功窗口自动关掉,提示与闪行同行尾按钮;提交失败(如 hook 不通过)窗口留着、原因写在按钮下面,写的提交信息不丢。「提交并推送」在提交成功后接着推送提交了的仓库:当前分支有上游就 git push,没有就推到远程的同名分支并设好上游(git push -u origin HEAD;没有 origin 但只有一个远程时用那个),推送过程显示进度,推成功提示推到了哪个上游,推不上去(没有远程、游离 HEAD、被拒、认证失败)提示原因,已经做好的提交不回滚。推送不能在终端里问密码,需要 SSH agent 或系统的凭据管理器(如 macOS 钥匙串)已经存好凭据;打开文件就是单击这一行,复制路径由行尾的按钮承担,不在右键菜单里重复;在主目录、磁盘、卷之外的任意条目上「重命名」(与新建同一种视图内小窗口:预填当前的名字,文件只选中主名、不含扩展名,名称框下面灰字写明它在哪个目录下;重名、名称不合法或改不成时原因写在窗口里,填的名字保留,改了接着提交;名字没动就直接关掉,F2 同样弹它)「复制到…」「移动到…」与「删除」,其中文件上还有「添加比对左侧」「添加比对右侧」,目录以及图片、视频文件上还有「添加水印」「校验水印」;任意条目(含主目录、磁盘、卷)上都有「添加收藏」,已收藏的则是「取消收藏」,排在「删除」前面单独一段
  • 删除前先弹出确认框,确认后移到废纸篓 / 回收站而不是直接抹掉;移不进去(外接卷、网络盘常见)时再确认一次才永久删除。命令面板里的「删除」对当前选中项生效

复制与移动

  • 在文件夹或文件上右键选「复制到…」「移动到…」,弹出系统的文件夹选择框(按钮写着「复制到这里」「移动到这里」,默认停在源条目所在的目录),选定后立即执行。文件夹连同其下的所有内容一起复制 / 移动
  • 选中多条时一起搬:只选一次目标文件夹,同名的逐条问(替换 / 两个都留 / 取消,取消则整批都不动),问完一次搬完,进度提示写着共几个条目。同一批里两条同名(来自不同目录)时后一条自动改名让开,不会互相覆盖;搬不动的那几条不打断其余的,最后一并报出来
  • 目标文件夹里已经有同名条目时先问一句:替换(覆盖,无法撤销)、两个都留(新的自动改名为「名字 2」,再重名就 3、4……,文件夹不拆扩展名)或取消。复制到它本来就在的目录不问,直接按「两个都留」生成副本——那里没有「替换」可选,那是拿自己覆盖自己
  • 拦掉不成立的操作:主目录、磁盘、卷这些顶层位置不给动;文件夹不能复制或移动到它自己或它下面;移动到它本来就在的目录会提示一句并放弃;路径已经不在了(在外面删了、卷拔了)也会提示
  • 移动优先用改名(同一磁盘上瞬间完成);跨磁盘、跨卷改不了名时退回「复制过去再删源」。过程中显示进度提示,失败会报错,源条目原样保留
  • 完成后树里自动定位到新条目:目标目录重读、从顶层位置一路展开到它并选中;移动时源目录也重读,源条目连同其下的收展状态一并丢掉
  • 命令面板里的「复制到…」「移动到…」「Git 提交」对当前选中项生效

水印

  • 齿轮菜单的「设置水印…」设定水印文字,记在配置文件的 watermark 键里
  • 右键菜单的「添加水印」(目录,以及图片、视频文件上有)打开一个任务面板:先显示目标、水印文字与说明,点「开始」才动文件,进行中可「停止」,关掉面板也等于停止。面板上有五个计数(已遍历 / 已添加 / 已有水印 / 非图片视频 / 失败)和执行日志,每处理完一个文件一条,只保留最新 50 条
  • 右键菜单的「校验水印」(同样在目录,以及图片、视频文件上有)打开同一个任务面板,只读不写:检查每个图片、视频文件的末尾是不是水印文字。计数为已遍历 / 有水印 / 无水印 / 非图片视频 / 失败,其余与「添加水印」一样。校验也需要先设置水印文字
  • 处理方式:把水印文字(UTF-8 字节)追加到文件末尾;文件夹则递归其下(含子文件夹)的所有文件。只处理图片和视频(按扩展名,见 src/watermark.ts 的 IMAGE_EXTENSIONS / VIDEO_EXTENSIONS;SVG 这类文本格式追加会损坏,不在内;.ts / .mts 更常见的是 TypeScript 源码,也不在内),其他类型的文件计入「非图片视频」跳过。文件末尾已经是这段水印的跳过,不重复追加。隐藏文件与文件夹按「显示隐藏文件」的设置决定是否包括,符号链接一律跳过
  • 性能:目录用 opendir 一批一批地读条目、边遍历边处理,从不先把所有文件列出来,再大的目录内存也是平的;8 个文件并发处理;「已有水印」只读文件末尾几十字节,不读全文,大文件一样快。发给面板的进度最多每 100ms 一次,日志在扩展与页面两侧都只留最新 50 条,处理得再快界面也不会被消息淹没
  • 结果着色:「添加水印」后,本次追加了水印的文件名在文件树里显示为绿色,已有水印跳过的显示为蓝色;「校验水印」后,有水印的显示为绿色,没有水印的显示为红色。非图片视频跳过的、读不了的文件颜色不变。着色只来自这两个操作的结果,不在每次列目录时检测文件——那要打开每个文件读末尾,网络盘和大目录上会明显拖慢,树的展示效率放第一位
  • 着色的保留:与收展状态一样存在视图状态里,视图折叠、切换面板、重载窗口后仍在;在本插件里删除了该文件即丢掉;最多记 5000 个文件,超过丢最早的。文件在外部被改动时着色不会自动失效,再执行一次「添加水印」或「校验水印」会重新检测并刷新

文本比对

  • 在文件上右键选「添加比对左侧」或「添加比对右侧」,打开比对面板并把这个文件放进对应的一侧(VS Code 自带的资源管理器里右键同样有这两项)。只放了一边时面板照样开着、等另一边,两边都有了立刻比对。同一时间只有一个比对面板,再选文件就是换掉那一侧
  • 面板上方是两个文件槽位:显示文件名、所在目录、行数与行尾风格(LF / CRLF / 混合),点文件名在编辑器里打开它,行尾两个按钮是「选择文件…」(系统文件选择框)与「清空」,中间的按钮把左右对调
  • 比对结果的看法与 VS Code 的差异编辑器一致:
    • 并排两栏,删除侧红、新增侧绿,另一侧没有对应行的地方画斜纹占位,两栏一行对一行;纵向滚动两栏同步,横向各滚各的,行号钉在左边不跑
    • 内联一栏,一行删一行增,两个行号并排,行首 − / + 标出加删(不靠颜色也认得出)
    • 同一行里只高亮真正变了的那几段字符(词级比对,中文按字),一眼看得出改了哪个词
    • 没变的一大段默认折叠成一行(上下各留 3 行),点它展开;工具栏可以整个关掉折叠
    • 上一处 / 下一处差异(工具栏按钮或 F7 / Shift+F7),跳到的那一块左边有一条竖线标出来
    • 右侧概览条画出整份比对里差异的分布(增绿、删红、改蓝)与当前看到的位置,点一下跳过去
    • 忽略空白:行首行尾的空白与行内连续空白的多少不算差异(显示的仍是原文)
    • 工具栏还有刷新(文件在外面改过了重读一遍)与在差异编辑器中打开(把同样两个文件交给 VS Code 自带的差异编辑器)
  • 统计显示在工具栏左边:差异处数(连续的一片改动算一处)与新增 / 删除 / 修改的行数;两个文件一模一样时直接说明
  • 比对算法(src/textDiff.ts,不含任何界面代码):行级用 patience diff——先剥掉公共的开头结尾,再拿「两边各只出现一次、内容又相同」的行当锚点分段递归,小段用 LCS 动态规划,比经典 Myers 更贴近人的读法,分治也不会把内存吃爆;一处改动内部再按相似度把左右两行配对(保持先后顺序取最优配法),所以「加了一行日志、又改了下面那句」不会错位成「日志那行改了、下面那行是新增」;配好对的两行做词级比对得到行内高亮
  • 限制与性能:单个文件上限 5 MiB / 5 万行,超了或含 NUL 字节(当作二进制)会在对应槽位显示原因;两万行的文件比对只要几十毫秒。页面只画看得见的那几十行(等高的绝对定位行 + 撑高的画布),几万行滚起来也不卡

配置文件

插件不使用 VS Code 的设置项,所有偏好记录在用户目录的 ~/.x1/file-studio/conf.yaml 里(与 SSH Studio 的 ~/.x1/ssh-studio/conf.yaml 同一套做法)。齿轮菜单里的操作会直接写入该文件,文件里的其他键原样保留;也可以手工编辑,重启 VS Code 后生效。

键 默认值 说明
language auto 界面语言:auto(跟随 VS Code)、zh-cn、en、de、fr、ja、ko
flagHidden false 是否显示以 . 开头的隐藏文件和文件夹
flagCompact true 是否把只含一个子文件夹的文件夹与那个子文件夹并成一行显示(a/b/c/d 显示为 a.b.c.d)。由齿轮菜单的「紧凑文件夹」维护
flagGit true 是否按 Git 状态给文件名着色并带字母角标。由齿轮菜单的「Git 状态着色」维护
rowActions 全部 鼠标放到行上时行尾显示哪几个动作按钮,取值为列表,可选 openInOS(在 Finder 中打开)、openInTerminal(在终端中打开)、copyPath(复制路径)、copyName(复制名称)、insertPath(插入路径到光标处)、gitCommit(Git 提交),显示顺序固定为此顺序、与列表里的先后无关;空列表 [] 是一个都不显示。由齿轮菜单的「行尾按钮」子菜单或命令面板的「行尾按钮…」维护;六个都勾上(回到默认)时该键被删掉
treeFont system 树上的名字(以及顶层位置行尾的路径、状态栏上的目录名)用什么字体:system 跟随系统(VS Code 的界面字体),mono 等宽字体(macOS 上是系统的 SF Mono,Windows 退回 Consolas,其他退回编辑器的等宽字体)。由齿轮菜单的「目录字体」维护;选回默认的 system 时该键被删掉
favorites 无 收藏的文件夹与文件列表,每项 path(绝对路径)、name(按钮上显示的名字,缺省为文件夹名 / 文件名)、isDir(是文件夹还是文件,手工写时省略即按文件夹算)。由右键菜单的「添加收藏 / 取消收藏」维护,也可手工编辑;一个都不剩时该键被删掉
watermark 无 水印文字。由齿轮菜单的「设置水印…」维护,也可手工编辑;清空时该键被删掉,全是空白视为没设置
commitMessage 无 「Git 提交」用的提交信息:行尾按钮每次提交都直接用它,右键菜单的提交窗口拿它预填文本框。由齿轮菜单的「设置提交信息…」或命令面板的「设置 Git 提交信息…」维护,也可手工编辑;清空时该键被删掉,全是空白视为没设置

目录结构

  • src/:扩展代码。sidebarView.ts 是侧边栏唯一的 webview 视图(下发文案、根列表与目录内容,执行页面交回的动作),localFs.ts 负责探测顶层位置和读取目录,systemApps.ts 负责调起系统的文件管理器与终端,i18n.ts 负责运行时文案的翻译与语言切换,confFile.ts 负责读写配置文件 ~/.x1/file-studio/conf.yaml,gitStatus.ts 负责算树上展开着的目录所在仓库的 Git 状态(也提供跑 git 命令的 runGit),gitCommit.ts 负责「Git 提交」的 add + commit,以及提交窗口用的列出待提交文件与推送,commitPanel.ts 是右键菜单「Git 提交」打开的提交窗口,watermark.ts 负责遍历、追加与校验水印,watermarkPanel.ts 是「添加水印」「校验水印」共用的任务面板,textDiff.ts 是文本比对的算法(读文件、行级 patience diff、行配对与行内词级比对),comparePanel.ts 是文本比对面板,webviewHtml.ts 给几个 webview 渲染 HTML 模板
  • media/main/:侧边栏页面(HTML / CSS / JS),工具栏、文件树、右键菜单、齿轮菜单都在这里绘制;media/watermark/ 是「添加水印」「校验水印」共用的任务面板页面;media/compare/ 是文本比对面板页面(两个文件槽位、并排 / 内联的比对结果、折叠、差异导航与概览条)
  • l10n/:运行时文案的翻译包,英文原文为 key
  • package.nls.*.json:命令标题、视图名等静态文案,由 VS Code 按显示语言选用
  • scripts/check-l10n.js:校验 t() 用到的每条文案在各语言包里都有译文、没有多余 key,以及 package.nls.*.json 的 key 一一对应
  • resources/:图标资源。icon.png 是插件市场 / 扩展列表里显示的图标(256×256,由 icon.svg 导出,深色圆角六边形 + 金橙粉渐变描边,内居中写渐变文字 File,等宽笔画画出的正体字母),icon-folder-badge-f.svg 是活动栏里的单色图标(圆角六边形描边 + 居中正体 F,与 logo 同一造型)
  • release/:打包产物存放处,npm run package 生成的 .vsix 都放在这里

开发与调试

npm install
npm run compile      # 编译到 out/
npm run watch        # 监听源码变化自动编译
npm run check-l10n   # 校验翻译文件
  • 按 F5 启动「Run Extension」在扩展开发宿主中调试。
  • 或将本目录符号链接到 ~/.vscode/extensions/lupee.file-studio-1.0.0,编译后执行 Developer: Reload Window 即可在日常使用的 VS Code 中加载。

打包与安装

npm run package      # 编译后打包,产物为 release/file-studio-<version>.vsix

打包产物统一放在 release/ 目录下,当前版本为 release/file-studio-1.0.0.vsix。安装方式二选一:

code --install-extension release/file-studio-1.0.0.vsix

或在 VS Code 中打开命令面板,执行 Extensions: Install from VSIX...,选择 release/ 下的 .vsix 文件,安装后重载窗口。

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