VisiData DirSheet 完全指南:把终端目录变成可浏览、可编辑的数据表
数据分析CLI数据可视化【免费下载链接】visidataA terminal spreadsheet multitool for discovering and arranging data项目地址https://gitcode.com/gh_mirrors/vi/visidata点击查看免费下载导读DirSheet 是 VisiData 内置的目录数据表打开任意目录后文件系统会以行列形式呈现在终端里你可以像操作普通表格一样浏览文件、按扩展名过滤、预览内容、重命名移动删除甚至把 shell 命令变成新列。读完本文你将掌握 DirSheet 的全部默认列、文件打开与预览、延迟提交deferred编辑模型、复制与 shell 集成以及dir_depth、dir_hidden等关键选项的底层行为。什么是 DirSheetDirSheet 是一个特殊的 VisiData 数据表它的每一行对应文件系统中的一个文件或目录每一列对应文件的一项元数据。与普通表格不同DirSheet 上的编辑不会立即作用于文件系统而是先暂存在内存中直到执行提交命令才会真正落地源码 visidata/shell.py 中的class DirSheet(Sheet)其类注释明确写着 Edited fields are applied to the filesystem。打开任意目录即获得一个 DirSheetvd . vd /path/to/directory在 VisiData 内部可以使用open-dir-current命令打开当前工作目录。其实现是vd.push(vd.currentDirSheet)见 visidata/shell.py 中BaseSheet.addCommand(, open-dir-current, ...)currentDirSheet是DirSheet(Path(.).absolute().name, sourcePath(.))定义于 visidata/shell.py。默认列与隐藏列DirSheet 默认展示以下五列源码列定义见 visidata/shell.py列说明directory父目录路径filename文件名键列ext文件扩展名目录显示为/size文件大小字节modtime最后修改时间源码中nKeys 2visidata/shell.py意味着directory与filename两列共同作为键列可用于唯一标识一行。ext列的取值逻辑是目录一律显示/row.is_dir() and / or row.ext这也是在文件列表中快速区分目录的方式。以下列默认隐藏宽度为 0按-取消隐藏即可显示列说明abspath文件绝对路径owner文件所有者Unix依赖pwd模块group文件所属组Unix依赖grp模块mode文件权限八进制filetypefile --brief命令输出异步计算其中filetype列的 getter 是vd.popen([file, --brief, row], ...)并在列定义上标注cacheasync——每个文件都通过子进程调用系统file命令识别类型因此是异步缓存、后台计算不会阻塞界面滚动。默认排序文件默认按修改时间倒序排列最新在前再按文件名升序。源码 visidata/shell.py 中的_ordering [(modtime, True), (filename, False)]印证了这一点。打开文件在 DirSheet 中按Enter即可把光标处的文件打开为新的数据表。VisiData 会根据扩展名自动选择加载器csv、tsv、json 等目录则打开为嵌套的 DirSheet。按键命令动作Enteropen-row-file打开光标处文件为新数据表g Enteropen-rows打开所有选中文件为新数据表z Enteropen-row-filetype打开光标处文件并提示输入 filetypeopen-dir-parent打开父目录对应绑定与实现visidata/shell.pyopen-row-filevd.push(openSource(cursorRow, filetypedir if cursorRow.is_dir() else LazyComputeRow(sheet, cursorRow).ext))——目录强制按dir打开文件则取其扩展名交给openSource。open-row-filetype交互式input(filetype: , typefiletype, ...)让你手动指定打开方式适合扩展名不标准或内容与后缀不符的文件。open-dir-parentvd.push(openSource(source.parent ...))快速回到上一级目录。openSource是 VisiData 打开任何来源的统一入口visidata/_open.py接收 Path 或字符串文件名、URL 或-表示 stdin返回未加载的数据表对象并支持通过 kwargs 覆盖选项。文件预览open-preview命令会在右侧分栏pane 2打开光标处文件的预览随着你上下移动光标预览会自动刷新为当前文件。其行为由 visidata/shell.py 中的previewFile与checkCursor钩子实现预览内容来自preview列cacheTrue该列 getter 调用_openPreview(row)内部同样是vd.openSource(...)ensureLoaded()并给预览表打上_dirpreview标记checkCursor在光标移动时触发previewFile(p)并把当前屏幕可见行的预览逐个预加载for row in sheet.rows[sheet.topRowIndex:sheet.topRowIndex sheet.nScreenRows]: previewCol.getValue(row)保证滚动时预览即时出现打开预览时会把disp_splitwin_pct设为 50%若无显式设置即左右各占一半。预览内容规则表格类文件csv、tsv、json 等显示为完整的数据表文本文件显示为 TextSheet目录显示为嵌套的 DirSheet。open-preview默认没有绑定按键需要在.visidatarc中自行添加DirSheet.addCommand(p, open-preview, sheet.previewFile(cursorRow))关闭预览用g ShiftZ关闭分栏。也可通过菜单View Preview file触发见 visidata/shell.py 的菜单注册。外部编辑器按键命令动作CtrlOsysopen-row用$EDITOR打开光标处文件g CtrlOsysopen-rows用$EDITOR打开所有选中文件绑定为launchEditor(cursorRow)与launchEditor(*selectedRows)visidata/shell.py。编辑器由环境变量$EDITOR指定测试 visidata/tests/test_editor.py 也专门提到 DirSheet 的sysopen-row说明该命令是受测试覆盖的正式功能。编辑文件系统延迟提交模型DirSheet 采用延迟提交deferred模式所有编辑先暂存按z CtrlS一次性应用到文件系统。提交流程putChanges依次执行commitAdds()、commitMods()、commitDeletes()清空待删除集合后自动reload()visidata/shell.py。通用提交逻辑定义于 visidata/modify.py。重命名与移动文件编辑filename列e即可重命名文件。setter 调用renameFilerow.with_name(val)row.rename(...)随后restat()刷新缓存visidata/shell.py。编辑directory列即可把文件移动到其他目录。setter 调用moveFile若目标目录不存在会自动os.makedirs(parent)创建若目标存在但不是目录则报错destination %s not a directoryvisidata/shell.py。删除文件用d标记待删除行z CtrlS提交后执行removeFilevisidata/shell.py目录受options.safety_first控制。开启时用os.rmdir目录非空即失败安全模式关闭时用shutil.rmtree递归删除#1965 引入该行为。普通文件path.unlink()。编辑元数据size、modtime、owner、group、mode列的 setter 分别对应os.truncate、os.utime、os.chown、os.chmodvisidata/shell.py。也就是说你可以在表格里直接改文件大小、修改时间、属主属组和权限位提交后生效——filetype列由系统file命令计算不可修改。另有两个与元数据显示相关的细节owner/group/mode三个 setter 均依赖 Unix 的pwd/grp模块Windows 平台会因ImportError自动降级visidata/shell.pycolorOwner会按文件权限位给 owner/group 列着色如组可写显示绿色、组可读显示黄色visidata/shell.py。复制文件按键命令动作ycopy-row把光标处文件复制到目标目录gycopy-selected把选中文件复制到目标目录复制目标通过inputPath(copy to dest: )交互输入。copy_filesvisidata/shell.py会校验目标必须是目录随后目录用shutil.copytree普通文件用shutil.copyfile并以Progress进度条逐项执行单文件复制出错只记异常不影响后续条目。Shell 集成用命令生成新列按z;触发addcol-shell输入一条 shell 命令其中用$columnName引用当前行的列值VisiData 会为每一行执行一次该命令并把stdout 和 stderr 分别捕获为两个新列visidata/shell.py。Sheet.addCommand(z;, addcol-shell, cmdinputShell(); addShellColumns(cmd, sheet, curcolcursorCol), create new column from bash expression, with $columnNames as variables)实现要点ColumnShell.calcValue引用识别正则SHELL_COLREF_RE r\$\{([^}])\}|\$(\w)既支持$colname裸引用也支持${col with spaces}、${user.home}等花括号转义写法visidata/shell.py插值时每个列值都会经过shlex.quote避免文件名含空格或特殊字符时破坏命令语义——这一点由单元测试 visidata/tests/test_shell.py 完整覆盖如ls $filename对filename with space.txt会展开为ls filename with space.txt命令通过$SHELL缺省bash的-c执行stdin/stdout/stderr 均通过管道通信输入命令时inputShell会校验命令中若没有$column引用则警告引用了不存在的列名则直接报错no such columns: ...visidata/shell.py。新增的三列命名规则{cmd}_stdout、{cmd}_stderr以及承载原命令的 shell 列本身。菜单路径为Column Add column shell。相关选项选项默认值说明dir_depth0目录递归深度0 仅列出直接子项dir_hiddenFalse是否显示隐藏文件点开头的文件这两个选项在 visidata/shell.py 中注册且必须在加载前设置修改后需要重新加载reload数据表才能生效。命令行也可用-r/--recursive标志一次性启用全子目录递归等价于深度递归展示所有子文件夹文件见交互指南 visidata/guides/DirSheet.md。底层遍历由iterload中的_walkfiles生成器实现visidata/shell.py用os.walk递归根据dir_depth控制是否下钻子目录dir_hidden关闭时跳过所有以.开头的目录和文件。此外还有一个相关选项active_procs默认 10控制 DirSheet 上并发子进程数量visidata/shell.py。加载前后还有个性能细节preloadHook会Path.stat.cache_clear()编辑后restat()会vstat.cache_clear()保证修改文件系统后行列数据能及时刷新visidata/shell.py。FileListSheet从文件清单生成 DirSheet打开一个.fdir文件每行一个文件路径会创建FileListSheet——它继承自 DirSheet但行内容不是目录遍历结果而是清单里的路径列表。实现visidata/shell.pyclass FileListSheet(DirSheet): _ordering [] def iterload(self): for fn in self.source.open(): yield Path(fn.rstrip())注意_ordering []覆盖了父类的按 modtime 排序——文件清单保持原文件中的顺序。入口是open_fdirAPIvisidata/shell.py因此 FileListSheet 拥有 DirSheet 的全部能力预览、外部编辑器、延迟提交编辑、复制、shell 列等。从源码理解 DirSheet 的设计综合 visidata/shell.py 的类定义可以看到 DirSheet 的核心设计决策行即 Pathrowtype files每行就是一个Path对象列 getter/setter 全部围绕Path/os模块操作这是表格 文件系统映射的直接体现defer True整个表的编辑进入延迟提交通道配合putChanges实现一次性落地隐藏列宽度为 0abspath、owner、group、mode、filetype等列以width0声明为默认隐藏随时可用-显示newRow直接失败vd.fail(new file not supported)明确 DirSheet 不支持新建行只能编辑已有文件。交互指南 visidata/guides/DirSheet.md 还总结了三条使用路径用 DirSheet 查找并打开文件open-row-file、open-rows、open-dir-parent、sysopen-row、把它当文件管理器copy-row、copy-selected、d删除、e改元数据以及记得所有修改都要commit-sheetz CtrlS才会真正生效。快速参考按键命令作用Enter/g Enter/z Enteropen-row-file/open-rows/open-row-filetype打开文件open-dir-parent返回父目录p需自行绑定open-preview分栏预览随光标自动刷新CtrlO/g CtrlOsysopen-row/sysopen-rows用$EDITOR打开eedit-cell编辑 filename/directory/元数据列dz CtrlSdelete-rowcommit-sheet标记并提交删除y/gycopy-row/copy-selected复制文件z;addcol-shell用 shell 命令生成新列-hide-column取反即显示显示隐藏元数据列g ShiftZ关闭分栏退出预览赞分享数据分析CLI数据可视化【免费下载链接】visidataA terminal spreadsheet multitool for discovering and arranging data项目地址https://gitcode.com/gh_mirrors/vi/visidata点击查看免费下载相关推荐OpenCLI LinkedIn Adapter 实战指南用已登录浏览器把 LinkedIn 变成可编程 CLIOpenCLI LinkedIn Adapter 实战指南用已登录浏览器把 LinkedIn 变成可编程 CLI LinkedIn 是全站强登录、强反爬的封闭开发工具CLI人工智能AI 应用浏览器控制GUI 自动化OpenCLI 1688 适配器实战指南用已登录浏览器把 1688.com 变成可编程 CLIOpenCLI 1688 适配器实战指南用已登录浏览器把 1688.com 变成可编程 CLI 1688 是国内重要的 B2B 货源平台而 OpenCLI开发工具CLI人工智能AI 应用浏览器控制GUI 自动化OpenCLI Facebook 浏览器适配器实战用已登录 Chrome 把 facebook.com 变成可编程 CLIOpenCLI Facebook 浏览器适配器实战用已登录 Chrome 把 facebook.com 变成可编程 CLI 导读 OpenCLI 的 Face开发工具CLI人工智能AI 应用浏览器控制GUI 自动化上一篇多平台部署Sleepy Discord机器人Linux、Windows与WebAssembly终极方案下一篇3分钟搞定手把手教你用这款神器实现VV星球直播自动录制创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

农作物病害数据集与迁移学习实战:从数据切分到田间推理的完整链路

农作物病害数据集与迁移学习实战:从数据切分到田间推理的完整链路

简介:这份农作物病害数据集面向从事农业AI、目标检测与图像分类的开发者与科研人员,覆盖10种作物的健康样本及27类病害样本,其中24类附带病害程度分析,可用于病害识别、健康检测与监测项目建模。资源包共2000个文件,以…

2026/9/25 2:08:55 阅读更多 →
使用 AWS SDK for JavaScript (v3) 操作 Amazon SNS:主题、订阅与消息发布的实战指南

使用 AWS SDK for JavaScript (v3) 操作 Amazon SNS:主题、订阅与消息发布的实战指南

示例工程教程后端 【免费下载链接】aws-doc-sdk-examples Welcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below. 项目地…

2026/9/25 2:08:55 阅读更多 →
【Dify】mysql-mcp结合AI大模型智能查询数据库

【Dify】mysql-mcp结合AI大模型智能查询数据库

数据库驱动的智能问答应用需求不断增长,基于Dify集成MCP Server驱动MySQL实现流式查询,为数据库内容实时问答提供了可行的全新方式。此流程适用于需要自动调用数据库、实时返回结构化结果的AI场景。 本文梳理了完整的部署流程,包括环境配置、关键插件选择与工作流设计,适合…

2026/9/25 2:08:55 阅读更多 →

最新新闻

从2024年APT报告提炼威胁情报基线:组织画像、检测规则与行业防御实践

从2024年APT报告提炼威胁情报基线:组织画像、检测规则与行业防御实践

简介:《2024年全球高级持续性威胁(APT)研究报告》由360高级威胁研究院发布,基于360安全大模型与全网安全大数据视野,系统梳理2024年全球APT攻击态势、活跃组织与攻击手法,为政企机构、安全运营人员和威胁情…

2026/9/25 6:45:16 阅读更多 →
C#实现企业微信主动消息推送:鉴权、重试与队列全链路

C#实现企业微信主动消息推送:鉴权、重试与队列全链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 6:45:16 阅读更多 →
IDA 5.0反汇编工具:32位PE样本静态分析与IDC脚本应用

IDA 5.0反汇编工具:32位PE样本静态分析与IDC脚本应用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 6:45:16 阅读更多 →
STM32F4 USB CDC大数据传输优化:双缓冲与FIFO分配实战

STM32F4 USB CDC大数据传输优化:双缓冲与FIFO分配实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 6:45:16 阅读更多 →
VB6老项目迁移SQLite:litex_sqlite封装库实战指南

VB6老项目迁移SQLite:litex_sqlite封装库实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 6:45:16 阅读更多 →
Word表格自动上浮与跨页断行问题的根源与解决

Word表格自动上浮与跨页断行问题的根源与解决

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 6:44:15 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →