网易首页 > 网易号 > 正文 申请入驻

这个程序员把less用了10年,第11年终于忍不了自己造了一个

0
分享至


终端用户每天要在命令行里处理多少文本?Git提交记录、Kubernetes日志、系统手册——这些动辄几千行的输出,90%的人靠less硬撑。但一个写了8年终端工具(TUI,文本用户界面)的开发者发现:现有分页器对现代工作流的适配,像极了用算盘处理Excel。

他最终用Go写了一个叫lore的分页器,现在已经是日常主力。这篇文章是他做技术决策的完整复盘——不是造轮子的浪漫,而是被现实逼到墙角的务实选择。

传统分页器的核心假设是:用户只想"看"和"搜"。但现代终端工作流早就变了味。开发者现在要在日志里跳转到特定时间戳,在配置文件中折叠YAML层级,在错误堆栈里高亮特定关键词——这些动作在less里需要组合键打到手抽筋。

更隐蔽的问题是视觉反馈。less的搜索高亮是全局替换式的,一旦匹配项密集,屏幕会变成红绿灯现场。而终端本身的网格特性(固定行列、等宽字体)本可以支撑更精细的排版控制,却被 legacy 工具白白浪费。

作者之前做过两个TUI工具:kl用于Kubernetes日志,wander用于Nomad调度。两者都需要处理大段文本的交互导航,于是他抽离出一个可复用的viewport组件。这个组件成了lore的骨架——不是从零开始,而是从已有战场沉淀下来的武器。

终端分页器的隐形战场


要理解lore的设计选择,得先看清终端环境的特殊约束。

终端是网格系统:行列固定,字体等宽。文本填充这个网格时,ANSI转义码负责着色和样式——比如\x1b[31m开启红色前景,\x1b[0m重置。这意味着分页器不能简单地把文本当字符串处理,必须解析这些转义码,否则计算行宽时会错位,红色文字可能突然换行到下一屏。

另一个被忽视的变量是PAGER环境变量。Git、man等工具会检查它,如果设置就把输出管道进去。但这里有个微妙判断:如果stdout不是TTY(比如git diff | grep),就跳过分页器直接输出。很多自定义分页器没处理好这个逻辑,导致在脚本里卡住等用户输入。

lore的viewport组件选择直接处理这些脏活:维护一个虚拟缓冲区,跟踪ANSI状态机,在滚动时重新渲染可见区域。这比把转义码丢给终端模拟器自己解释要重,但换来了精确的像素级控制——比如知道某个关键词在第几行第几列,才能做局部高亮而不是全屏染色。

功能清单背后的取舍

作者列出的需求清单很短,但每个都对应具体的使用场景:

鼠标支持不是锦上添花。在iTerm2或Alacritty里,用户已经习惯用滚轮翻页、用cmd+F搜索。如果分页器接管了屏幕却不响应鼠标事件,体验是断裂的。lore的做法是分层:鼠标滚轮触发viewport滚动,同时把点击事件暴露给上层应用——这样kl可以让用户点击某行日志直接跳转到相关Pod详情。


搜索需要上下文感知less/pattern是全局遍历,但日志场景里用户往往想"从当前位置向下找"或"只在这个折叠区块内匹配"。lore的搜索接口接受范围参数,让调用方决定搜索边界。这个设计牺牲了通用性,换来了场景适配的灵活性。

性能底线是16ms。60fps对应每帧16.6毫秒,这是交互工具的生死线。处理万行日志时, naive 的字符串分割和重新渲染会直接击穿这个预算。lore的优化策略是:只渲染可见区域,用环形缓冲区管理历史内容,ANSI解析结果缓存避免重复计算。这些不是炫技,是终端工具的基本礼仪。

从组件到产品的距离

viewport组件解决的是"怎么画",但lore作为独立工具还需要回答"怎么用"。

作者的选择是兼容less的核心按键绑定:j/k滚动,/搜索,q退出。这不是保守,是尊重肌肉记忆。但在这个基底上,lore加了几个现代快捷键:g跳转到行号(配合kl的"跳转到第N条日志"),zc折叠当前区块(针对JSON/YAML)。

一个有趣的细节是颜色主题。lore不强制配色方案,而是读取终端模拟器的调色板——在支持true color的终端里用24位色,在老终端里回退到256色或16色。这个适配逻辑写了将近200行,占代码量的15%,但作者认为值得:"终端工具的美学不是皮肤,是不要刺眼。"

现在lore已经是作者的默认PAGER。他用了一个很产品经理的验证标准:有没有某天忘记自己换过工具,自然地按了lore特有的快捷键?答案是第三周开始的某个下午,他试图在less里按g跳转行号,才意识到肌肉记忆已经完成了迁移。

这个工具没有GitHub星数截图,没有性能基准测试对比图。作者在最后留了一个开放的问题:当你每天重复某个操作超过20次,而现有工具让你感到"有点别扭"时,这个别扭的阈值是多少才值得动手造一个?他的答案是10年——但Git的历史只有19年,less已经38岁了。新一代开发者会等这么久吗,还是会在第3年就掀桌?

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
鲁山舅舅娶亡姐大结局!新华社通报调查结果,这次终于真相大白了

鲁山舅舅娶亡姐大结局!新华社通报调查结果,这次终于真相大白了

离离言几许
2026-03-30 22:39:30
人不会无缘无故得带状疱疹!提醒:患带状疱疹,多半有4个共性

人不会无缘无故得带状疱疹!提醒:患带状疱疹,多半有4个共性

DrX说
2026-04-01 12:09:22
演技太假!骑士惨败湖人暗藏玄机,刻意摆烂只为季后赛排位!

演技太假!骑士惨败湖人暗藏玄机,刻意摆烂只为季后赛排位!

田先生篮球
2026-04-01 15:35:56
3-0横扫法国名将!国乒19岁1米86新星大闪耀:追赶王楚钦林诗栋

3-0横扫法国名将!国乒19岁1米86新星大闪耀:追赶王楚钦林诗栋

李喜林篮球绝杀
2026-04-01 16:22:33
突发!2026 房价迎来报复性反弹,市场彻底炸锅

突发!2026 房价迎来报复性反弹,市场彻底炸锅

新浪财经
2026-04-01 12:01:30
太扎心!93岁老人安详离世,65岁女儿当日火化,被亲戚指责冷血

太扎心!93岁老人安详离世,65岁女儿当日火化,被亲戚指责冷血

火山詩话
2026-03-31 10:40:03
战快船遭弃用!杨瀚森将飞3个半小时去墨西哥城 率混音出战季后赛

战快船遭弃用!杨瀚森将飞3个半小时去墨西哥城 率混音出战季后赛

醉卧浮生
2026-04-01 17:35:05
德黑兰传出巨大爆炸声

德黑兰传出巨大爆炸声

新华社
2026-04-01 10:58:05
A股:收盘后,传来两个重要信息,明天,周四或要这样走了!

A股:收盘后,传来两个重要信息,明天,周四或要这样走了!

明心
2026-04-01 16:19:39
业绩创新高,股价却逆市大跌!千亿光伏龙头盘中跌超13%

业绩创新高,股价却逆市大跌!千亿光伏龙头盘中跌超13%

21世纪经济报道
2026-04-01 12:11:05
王建军被逮捕!

王建军被逮捕!

农民日报
2026-03-31 10:28:33
CBA正式恢复升降级!倒数后四名或被淘汰,中国篮协终于出手了

CBA正式恢复升降级!倒数后四名或被淘汰,中国篮协终于出手了

老叶评球
2026-03-31 21:34:15
买牛肉,建议:少买牛腱子和牛腩,多买这3种,不贵还好吃

买牛肉,建议:少买牛腱子和牛腩,多买这3种,不贵还好吃

复转这些年
2026-03-29 19:01:45
北约多国拒绝美国飞机飞越领空,跨大西洋联盟滑向深渊

北约多国拒绝美国飞机飞越领空,跨大西洋联盟滑向深渊

史政先锋
2026-04-01 14:54:31
尼泊尔的“一妻多夫”有多尴尬?看完她们的生活后,满满的辛酸

尼泊尔的“一妻多夫”有多尴尬?看完她们的生活后,满满的辛酸

芳芳历史烩
2026-03-31 20:27:45
40岁保姆:拿着雇主的高工资提供特殊服务,老公得知后和我离婚了

40岁保姆:拿着雇主的高工资提供特殊服务,老公得知后和我离婚了

孢木情感
2026-04-01 14:43:20
“澳洲进口保健品”实为国产,销冠优思益被多部门调查、平台紧急下架

“澳洲进口保健品”实为国产,销冠优思益被多部门调查、平台紧急下架

界面新闻
2026-04-01 16:34:31
杭州一工厂起火,无人员伤亡,目击者:“一公里外都能看到冒起的黑烟”

杭州一工厂起火,无人员伤亡,目击者:“一公里外都能看到冒起的黑烟”

都市快报橙柿互动
2026-04-01 17:27:49
特朗普刚表态认输,不到24小时,美债遭遇大规模抛售,美国失算了

特朗普刚表态认输,不到24小时,美债遭遇大规模抛售,美国失算了

霁寒飘雪
2026-04-01 11:39:40
最深刻的教训!昨天大跌73%,今天大跌14%,股东却增长了53%!

最深刻的教训!昨天大跌73%,今天大跌14%,股东却增长了53%!

丁丁鲤史纪
2026-04-01 13:32:40
2026-04-01 18:12:50
摸鱼算法
摸鱼算法
致力于用最前沿的AI技术,换取更多发呆时间的三十岁青年。
598文章数 4关注度
往期回顾 全部

科技要闻

甲骨文血洗3万人,47人团队仅留3人

头条要闻

男子开酒店装修花1200多万 刚过两三年就被拆成毛坯房

头条要闻

男子开酒店装修花1200多万 刚过两三年就被拆成毛坯房

体育要闻

NBA扩军,和篮球无关?

娱乐要闻

宋宁峰人设崩塌!带娃偷情+反向索赔

财经要闻

电商售械三水光针 机构倒货or假货猖獗?

汽车要闻

2026年3月小米汽车交付超2万台 新SU7上市即交付

态度原创

艺术
本地
数码
游戏
公开课

艺术要闻

Alexandra Manukyan油画选刊(二)

本地新闻

从学徒到世界冠军,为什么说张雪的底气在重庆?

数码要闻

799元!小米智能摄像机4 Max AI变焦版发布:12倍变焦、支持老人/孩子/宠物看护

IGN 10分大作新版本出炉!主机玩家有福了

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版