如何让编辑器行号以十六进制格式显示?无现成扩展时的开发方案咨询
嘿,这个需求确实挺贴合你的副业场景的——手动转十六进制行号确实太磨人了!我来帮你拆解一下解决方案,分两种情况说:
先查现有编辑器的快速方案
首先得说,主流编辑器比如VS Code,默认确实没开放十六进制行号的设置,而且小众扩展可能藏得比较深。如果你还没试过,可以在VS Code扩展商店搜「hex line numbers」「hex line numbering」这类关键词,说不定有开发者已经做了轻量插件(我印象里有几个冷门但能用的)。要是真找不到现成的,自己写个小扩展其实也不难,下面给你讲具体步骤:
自己动手开发扩展(以VS Code为例,生态最成熟)
VS Code的扩展开发门槛很低,用TypeScript就能快速实现,核心思路是隐藏原十进制行号,用自定义装饰渲染十六进制行号:
准备开发环境
先装Node.js和VS Code,然后打开终端装扩展生成工具:npm install -g yo generator-code接着运行
yo code,选「New Extension (TypeScript)」,跟着提示填项目信息,就能生成一个基础扩展框架。写核心逻辑
打开项目里的extension.ts,替换成下面的代码(我给你加了注释,好懂):import * as vscode from 'vscode'; export function activate(context: vscode.ExtensionContext) { // 定义装饰类型:隐藏原行号,用before文本显示十六进制行号 const hexLineDecoration = vscode.window.createTextEditorDecorationType({ lineNumber: { display: 'none' }, // 藏起默认十进制行号 before: { color: '#858585', // 和默认行号颜色对齐,看着不突兀 margin: '0 4px 0 0', // 和代码保持合适间距 contentText: '' // 后面动态填充十六进制值 } }); // 生成并更新所有行的十六进制行号 function updateHexLines(editor: vscode.TextEditor | undefined) { if (!editor) return; const decorations: vscode.DecorationOptions[] = []; const totalLines = editor.document.lineCount; for (let lineIdx = 0; lineIdx < totalLines; lineIdx++) { // 行号从1开始,转十六进制、补前导零、转小写(比如42→2a) const hexNum = (lineIdx + 1).toString(16).padStart(2, '0').toLowerCase(); decorations.push({ range: new vscode.Range(lineIdx, 0, lineIdx, 0), renderOptions: { before: { contentText: hexNum } } }); } editor.setDecorations(hexLineDecoration, decorations); } // 监听编辑器切换、文档变化,实时更新行号 const disposable1 = vscode.window.onDidChangeActiveTextEditor(editor => { updateHexLines(editor); }); const disposable2 = vscode.workspace.onDidChangeTextDocument(event => { const activeEditor = vscode.window.activeTextEditor; if (activeEditor && event.document === activeEditor.document) { updateHexLines(activeEditor); } }); // 初始化时更新当前打开的编辑器行号 updateHexLines(vscode.window.activeTextEditor); context.subscriptions.push(disposable1, disposable2, hexLineDecoration); } export function deactivate() {}测试和使用
按F5启动「扩展开发宿主」窗口,随便打开一个文件,就能看到行号变成十六进制了(比如第1行是01,第42行是2a)。要是觉得好用,还可以用vsce package命令打包成.vsix文件,自己安装或者分享给其他人。
其他编辑器的思路
如果用的是Sublime Text、Atom这类编辑器,核心逻辑是一样的:找到编辑器的插件API,拦截行号渲染逻辑,把十进制数转成带前导零的十六进制数就行,只是API细节会有差异。
备注:内容来源于stack exchange,提问作者jo arans

