还是 Markdown 的预览和编辑

vue3实现markdown预览和编辑 Vditor是一款浏览器端的Markdown编辑器,支持所见即所得(WYSIWYG)、即时渲染(IR)和分屏预览模式。它具有以下特点:支持三种编辑模式:WYSIWYG、IR和SV内置流程图、甘特图、时序图等图表支持数学公式、音视频、代码高亮等丰富功能高度可定制化的主题和工具栏官网Vditor - 一款浏览器端的 Markdown 编辑器,支持所见即所得(富文本)、即时渲染(类似 Typora)和分屏预览模式 (b3log.org)Vditor允许完全自定义工具栏配置。toolbar: [ 阅读详情

前情提要

上一篇文章里面,我把从 Markdown 转换来的 html 字符串,直接写入浏览器。因为还需要加载文章里面引用的图片,以及为了代码高亮而引用的 CSS / JS 而带来一些程序的复杂性。

比如,CSS / JS 就引用了 CDN 的地址,导致文章打开时间比较长。又没办法让浏览器从本地硬盘文件夹里面加载 CSS / JS 文件(现代浏览器因为安全问题,不支持,虽然有 file:/// 协议,也不行)。

解决方法

程序内置 Web Server,程序解析完 Markdown 获得 HTML 字符串后,让浏览器访问本程序内置的网络地址(比如:http://127.0.0.1:8080)使得浏览器可以通过标准的 WEB 方式,获得 Markdown 文件的内容,以及图片,以及 CSS / JS 文件。

代码框架

使用 Delphi 创建一个 Stand Alone 的 Web Server 代码框架。然后要写的程序就不多了。当然,把 CSS / JS 都从 CDN 下载到本地文件夹。

具体代码描述

需求一:代码高亮
需要使用 CSS 和 JS;因此,需要一个 HTML 页面模块框架。最终输出的页面,是把 Markdown 文本转换后的 HTML 内容,嵌入这个页面模板,发送给客户端;

需求二:图片
Markdown 文本里面可能有插入的图片。转换为 html 以后就是一个类似:

<img src="abc.jpg" /> 


的图片引用。浏览器会根据引用的地址去加载图片。

内置的 Web Server

创建一个内置 Web Server 的工程
1. Delphi - New - Other - Web - Web Server Application;
2. 选择 Stand Alone 模式,VCL,Windows;
然后 Delphi IDE 会创建一个内置 Web Server 的 VCL 程序框架。

内置 Web Server 的简单说明
1. 内置的 Web Server 是基于 TIdHTTPServer 的。它在本地电脑上打开一个端口(比如:8080),等待来自浏览器的访问;
2. 内置的 WEB 代码框架是 Delphi 的 Web Broker 框架。响应浏览器的请求,只需要在 Web Broker 的 TWebModule1 里面写代码。

代码需要注意的地方
1. 对于来自浏览器对 CSS/JS 文件,以及图片文件的请求,这里使用了 TWebFileDispatcher;也就是拖一个 TWebFileDispatcher 控件到 TWebModule1 里面。
2. 本软件默认 Markdown 文件里面引用的图片和该文件在同一个文件夹下。
3. 本软件默认 css / js 文件和本软件在同一个文件夹下。

因此,要本程序要根据浏览器请求的文件是什么文件,给 TWebFileDispatcher 设置目录,让它能够找到文件。代码如下:

procedure TWebModule1.WebModuleBeforeDispatch(Sender: TObject; Request:
    TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
  Fext: string;
begin
  Fext := Lowercase(ExtractFileExt(Request.PathInfo));

  if (Fext = '.jpg') or (Fext = '.png') or (Fext = '.bmp')  then
  begin
    WebFileDispatcher1.RootDirectory := FmMain.MarkdownFilePath; //图片路径
  end
  else
  if (Fext = '.css') or (Fext = '.js') then
  begin
    WebFileDispatcher1.RootDirectory := Self.GetTemplatePath;
  end;
end;

关于 Markdown 的处理
这里使用了开源的 Markdown 处理器:https://github.com/EtheaDev/MarkdownProcessor
程序中直接引用它的源代码,创建处理器对象,对 Markdown 文本进行处理,代码如下:

function TWebModule1.LoadMarkdownFileToHTML(const Fn: string): string;
var
  SL: TStringList;
  Processor: TMarkdownProcessor;
  S: string;
  TempFn, TempStr: string;
begin
  if not FileExists(Fn) then Exit;

  SL := TStringList.Create;
  try
    SL.LoadFromFile(Fn, TEncoding.UTF8);
    S := SL.Text;
  finally
    SL.Free;
  end;

  Processor := TMarkdownProcessor.CreateDialect(TMarkdownProcessorDialect.mdCommonMark);
  try
    S := Processor.Process(S);
  finally
    Processor.Free;
  end;

  //加载模板
  TempFn := Self.GetTemplatePath; // ExtractFilePath(ParamStr(0));
  TempFn := TPath.Combine(TempFn, 'Template.html');
  SL := TStringList.Create;
  try
    SL.LoadFromFile(TempFn, TEncoding.UTF8);
    TempStr := SL.Text;
  finally
    SL.Free;
  end;

  Result := TempStr.Replace('#MyContent', S);
end;

完整代码

本程序总共就 2 个单元。完整代码如下:

unit UFmMain;
{---------------------------------------------------------------------------
  markdown 文件编辑器。预览使用浏览器。内置 WebServer。
  默认文件里面的图片和文件在相同目录。因此,加载文件时,要根据文件目录,指定 WEB 的 Root,
  方便浏览器加载图片。

  但是,CSS/JS 这些,应该是在固定位置。因此,需要判断浏览器需要的 CSS/JS 然后去加载。

  pcplayer 2025-11-14
----------------------------------------------------------------------------}
interface

uses
  Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  Vcl.AppEvnts, Vcl.StdCtrls, IdHTTPWebBrokerBridge, IdGlobal, Web.HTTPApp,
  Vcl.ExtCtrls, Vcl.ComCtrls, Winapi.WebView2, Winapi.ActiveX, Vcl.Edge,
  System.Actions, Vcl.ActnList;

type
  TFmMain = class(TForm)
    ButtonStart: TButton;
    ButtonStop: TButton;
    EditPort: TEdit;
    Label1: TLabel;
    ApplicationEvents1: TApplicationEvents;
    ButtonOpenBrowser: TButton;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    Panel1: TPanel;
    RichEdit1: TRichEdit;
    EdgeBrowser1: TEdgeBrowser;
    Button1: TButton;
    ActionList1: TActionList;
    AcOpen: TAction;
    OpenDialog1: TOpenDialog;
    Button2: TButton;
    AcSave: TAction;
    AcNew: TAction;
    SaveDialog1: TSaveDialog;
    Button3: TButton;
    procedure AcNewExecute(Sender: TObject);
    procedure AcOpenExecute(Sender: TObject);
    procedure AcSaveExecute(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
    procedure ButtonStartClick(Sender: TObject);
    procedure ButtonStopClick(Sender: TObject);
    procedure ButtonOpenBrowserClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    FServer: TIdHTTPWebBrokerBridge;

    FMarkdownFileName: string;
    procedure StartServer;
    function GetMarkdownFilePath: string;
    { Private declarations }
  public
    { Public declarations }
    property MarkdownFileName: string read FMarkdownFileName;
    property MarkdownFilePath: string read GetMarkdownFilePath;
  end;

var
  FmMain: TFmMain;

implementation

{$R *.dfm}

uses
{$IFDEF MSWINDOWS}
  WinApi.Windows, Winapi.ShellApi,
{$ENDIF}
  System.Generics.Collections;

procedure TFmMain.AcNewExecute(Sender: TObject);
begin
  Self.FMarkdownFileName := '';
  RichEdit1.Lines.Clear;
end;

procedure TFmMain.AcOpenExecute(Sender: TObject);
var
  SL: TStringList;
begin
  //打开文件
  if OpenDialog1.Execute() then
  begin
    FMarkdownFileName := OpenDialog1.FileName;
    EdgeBrowser1.Navigate('http://localhost:' + EditPort.Text);

    SL := TStringList.Create;
    try
      SL.LoadFromFile(FMarkdownFileName, TEncoding.UTF8);
      RichEdit1.Lines.Text := SL.Text;
    finally
      SL.Free;
    end;
    //RichEdit1.Lines.LoadFromFile(FMarkdownFileName, TEncoding.UTF8);

    AcSave.Enabled := True;
  end;
end;

procedure TFmMain.AcSaveExecute(Sender: TObject);
var
  APreview: Boolean;
begin
  APreview := False;
  if FMarkdownFileName <> '' then
  begin
    RichEdit1.Lines.SaveToFile(Self.FMarkdownFileName, TEncoding.UTF8);
    APreview := True;
  end
  else
  begin
    if SaveDialog1.Execute() then
    begin
      FMarkdownFileName := SaveDialog1.FileName;
      RichEdit1.Lines.SaveToFile(FMarkdownFileName, TEncoding.UTF8);
      APreview := True;
    end;
  end;

  //刷新预览
  if APreview then
  begin
    EdgeBrowser1.Navigate('http://localhost:' + EditPort.Text);
    PageControl1.ActivePageIndex := 1;
  end;
end;

procedure TFmMain.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
begin
  ButtonStart.Enabled := not FServer.Active;
  ButtonStop.Enabled := FServer.Active;
  EditPort.Enabled := not FServer.Active;
end;

procedure TFmMain.ButtonOpenBrowserClick(Sender: TObject);
{$IFDEF MSWINDOWS}
var
  LURL: string;
{$ENDIF}
begin
  StartServer;
{$IFDEF MSWINDOWS}
  LURL := Format('http://localhost:%s', [EditPort.Text]);
  ShellExecute(0,
        nil,
        PChar(LURL), nil, nil, SW_SHOWNOACTIVATE);
{$ENDIF}
end;

procedure TFmMain.ButtonStartClick(Sender: TObject);
begin
  StartServer;
end;

procedure TFmMain.ButtonStopClick(Sender: TObject);
begin
  FServer.Active := False;
  FServer.Bindings.Clear;
end;

procedure TFmMain.FormActivate(Sender: TObject);
begin
  StartServer;
end;

procedure TFmMain.FormCreate(Sender: TObject);
begin
  FServer := TIdHTTPWebBrokerBridge.Create(Self);

  EdgeBrowser1.CreateWebView;
end;

function TFmMain.GetMarkdownFilePath: string;
begin
  Result := ExtractFilePath(Self.FMarkdownFileName);
end;

procedure TFmMain.StartServer;
begin
  if not FServer.Active then
  begin
    FServer.Bindings.Clear;
    FServer.DefaultPort := StrToInt(EditPort.Text);
    FServer.Active := True;
  end;
end;

end.

WebBroker 的代码如下:

unit WebModuleUnit1;

interface

uses
  System.SysUtils, System.Classes, Web.HTTPApp;

type
  TWebModule1 = class(TWebModule)
    WebFileDispatcher1: TWebFileDispatcher;
    procedure WebModule1DefaultHandlerAction(Sender: TObject;
      Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
    procedure WebModuleBeforeDispatch(Sender: TObject; Request: TWebRequest;
        Response: TWebResponse; var Handled: Boolean);
  private
    { Private declarations }
    function GetTemplatePath: string;
    function LoadMarkdownFileToHTML(const Fn: string): string;
  public
    { Public declarations }
  end;

var
  WebModuleClass: TComponentClass = TWebModule1;

implementation

uses System.IOUtils, MarkdownProcessor, MarkdownUtils, UFmMain;

{%CLASSGROUP 'Vcl.Controls.TControl'}

{$R *.dfm}

function TWebModule1.GetTemplatePath: string;
begin
  Result := ExtractFilePath(ParamStr(0));
end;

function TWebModule1.LoadMarkdownFileToHTML(const Fn: string): string;
var
  SL: TStringList;
  Processor: TMarkdownProcessor;
  S: string;
  TempFn, TempStr: string;
begin
  if not FileExists(Fn) then Exit;

  SL := TStringList.Create;
  try
    SL.LoadFromFile(Fn, TEncoding.UTF8);
    S := SL.Text;
  finally
    SL.Free;
  end;

  Processor := TMarkdownProcessor.CreateDialect(TMarkdownProcessorDialect.mdCommonMark);
  try
    S := Processor.Process(S);
  finally
    Processor.Free;
  end;

  //加载模板
  TempFn := Self.GetTemplatePath; // ExtractFilePath(ParamStr(0));
  TempFn := TPath.Combine(TempFn, 'Template.html');
  SL := TStringList.Create;
  try
    SL.LoadFromFile(TempFn, TEncoding.UTF8);
    TempStr := SL.Text;
  finally
    SL.Free;
  end;

  Result := TempStr.Replace('#MyContent', S);
end;

procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
{-----------------------------------------------------------------------
  加载 Markdown 文件,转换为 HTML 输出

------------------------------------------------------------------------}
  if Request.PathInfo = '/' then
  begin
    Response.Content := Self.LoadMarkdownFileToHTML(FmMain.MarkdownFileName);
    Handled := True;
  end;
end;

procedure TWebModule1.WebModuleBeforeDispatch(Sender: TObject; Request:
    TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
  Fext: string;
begin
  Fext := Lowercase(ExtractFileExt(Request.PathInfo));

  if (Fext = '.jpg') or (Fext = '.png') or (Fext = '.bmp')  then
  begin
    WebFileDispatcher1.RootDirectory := FmMain.MarkdownFilePath; //图片路径
  end
  else
  if (Fext = '.css') or (Fext = '.js') then
  begin
    WebFileDispatcher1.RootDirectory := Self.GetTemplatePath;
  end;
end;

end.

结束

本程序可以打开本地文件(*.md),预览和编辑(编辑采用 TRichedit);然后保存为本地文件。

更进一步,可以考虑如何组织文章,形成一个记事本。

delphi 做后端服务让外部可能通过http地址访问图片或文件 delphi 阅读详情

相关推荐

基于 Delphi 的前后端分离:之二

前端套用网页模板,后端用 Delphi 开发,前后端彻底分离解耦。

pcplayer的博客 2053

delphi WebBroker服务器做后端,前端jtable+Html5+javaScript,Web开发利器

delphi WebBroker服务器做后端,前端jtable+Html5+javaScript,Web开发利器 <!doctype html> <!-- <html lang="zh-CN">显示中中文无关 --> <!-- :取决于安装的浏览器是否支持该语言 --> <!-- 本页面由服务器端的主TWebModule下的WebFi...

pulledup的博客 2381

Sublime编辑markdown文件及预览

sublime 支持markdown类型文件编辑及预览 1、先安装Package Control,使用快捷键Ctrl+Shift+P打开命令面板,在命令面板中输入Package Control,然后回车, 等待一会,待提示安装成功后进入下一步操作。 2、使用快捷键Ctrl+Shift+P打开命令面板,并输入Package Install,在下拉菜单中找到Package Control: Install Package 并点击或回车进入,这里可能会要等待几秒钟。 3、待上面弹出命令窗口后,输入Markdown

yhahaha_的博客 4529

REST Datasnap服务端与javascript客户端实现

快速实现一个REST服务端和一个javascript客户端。

A00553344的专栏 5257

高效文档处理:Delphi操作Markdown与Excel自动化报告.pdf

文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 如果你正在寻找一种高效、强大的编程语言来开发跨平台应用,那么Delphi绝对值得考虑!它拥有直观的可视化开发环境,让代码编写变得轻松简单。凭借着快速的编译速度和卓越的性能优化,Delphi能够帮助开发者迅速构建出高质量的应用程序。无论是Windows、macOS、iOS还是Android平台,Delphi都能完美支持,真正实现一次编写,多平台部署。选择Delphi,开启高效开发之旅!

sysbench安装(在线&离线)

sysbench下载、安装、编译和异常处理方法

m0_61066945的博客 8753

VUE工程中使用markdown——引入、编辑、预览

前言 最近想在vue项目中使用markdown编辑器,发现mavon-editor,这个东西挺好的,先记录下来吧!有错的地方希望指出哦 安装 npm install mavon-editor 使用 因为我项目中只有小部分组件要用它,所以用的是局部引入组件的方法,这里以局部注册为例,想要全局注册的可以搜一下,大同小异啦。 组件前加入这两句 import {mavonEditor} from "...

weixin_44000275的博客 2452

3分钟搞定!QQ音乐歌单导出Excel保姆级教程(含歌单ID获取技巧)

本文提供了一份详细的QQ音乐歌单导出Excel保姆级教程,帮助用户轻松备份和管理个人音乐收藏。教程核心在于获取歌单ID,并利用浏览器开发者工具执行脚本提取数据,最后通过Excel导入功能快速生成结构化表格。整个过程无需编程基础,3分钟即可搞定,是个人数据管理的实用技巧。

weixin_29008691的博客 1394

iOS 使用markdown 实现编辑和预览文本

注意要点: 1.在iOS 可以依赖UIWebview 来实现 2.丰富的UI样式依赖 html 的样式, js 调用插入markdown内容呈现出来 3.实现markdown编辑快捷键:参考github 编辑内容的快捷键即可 ⚠️ 实现过程中遇到一个问题,在github上 编辑好的文本,客户端在线预览的时候是空白的。。。调试了好久终于找到问题:一样的文本在pc端可能会生成\r,但是在iO...

weixin_33728268的博客 3760

用 PERFORM ... ON COMMIT / ON ROLLBACK 把收尾工作做干净:从 SAP LUW 到 Update Task 的事务钩子实践

ABAP事务钩子机制解析 本文深入探讨SAP ABAP开发中的事务边界管理问题,重点分析PERFORM ... ON COMMIT/ROLLBACK机制: 事务分层:区分Database LUW(数据库提交)和SAP LUW(业务逻辑单元),后者通过COMMIT WORK触发多种收尾动作 钩子机制:PERFORM...ON COMMIT将子程序注册为事务结束回调,在提交/回滚时执行清理工作而非业务更新 执行顺序:钩子程序先于Update Task执行,仍保留当前会话内存上下文 现代实践:建议将FORM仅作为

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3993

《基于YOLOv5/8/10的足球比赛球员识别系统毕设全指南:从开发到部署的一站式实战》

本文提出了一个基于YOLO系列模型的足球球员识别系统,具备完整的开发流程和技术方案。系统通过YOLOv5/8/10三大框架实现球员检测,平衡精度与速度需求。开发过程包含数据标注与增强、模型训练调优、PyQt5界面开发等关键环节,并提供了模型轻量化、多任务扩展等优化方向。系统可实现单张图像和视频流的实时识别,支持跨设备部署,适用于赛事分析和训练复盘场景。项目特色在于完整的技术实现路径和对不同YOLO框架的性能对比,为计算机视觉在体育领域的应用提供实践参考。

m0_71589036的博客 216

vscode 如何预览markdown_用VS Code打造最佳Markdown编辑器

为什么选择VS Code?在选择Visual Studio Code(以下简称Code)作为markdown主力编辑器之前,我在Mac电脑上尝试了简友们推荐的各种编辑器,有Ulysses、Sublime Text、Atom、Vim、Mou……,不得不承认这些编辑器都很优秀,漂亮,强大,但是最后我还是选择了Code,因为我发现它不仅有完备的功能还有其他编辑器所不具有的优点:不会像Ulysses那样自...

weixin_30301989的博客 811

ansys 求解过程中出现未知错误。检查“求解信息”对象上的“求解器输出”,查找可能的原因。-静力学分析遇到的,这是什么原因——An unknown error occurred ——未找到解决方法

点击“确定”关闭弹窗后,进入Workbench的‌“求解信息”对象‌,查看‌“求解器输出”‌,搜索“Error”“Fatal”“Warning”等关键词,找到具体的错误描述,比如材料未定义、网格质量问题、内存不足等,这是精准解决问题的关键。进入“工具-选项-mechanical APDL”,取消勾选“分布式”,GPU加速器选择“none”。在“求解进程设置-高级”中调整内存分配参数,或切换为迭代求解器(如PCG求解器),它更省内存。尝试简化模型,比如删除非关键细节、合并重复部件,分步验证模型,定位问题源。

qq_15963745的博客 603

Sublime Text3编辑并预览Markdown

安装 打开sublime,打开Package Controller :Install Package 等待打开 重复第一步,输入MarkdownPreview 安装 重复第一步,输入MarkdownLivePreview 安装 重复第一步,输入LiveReload 安装 安装完成,在首选项中PackageSettings可以找到Markdown Editing和Markdown Preview ...

Mediary的博客 1822

YOLO26涨点改进 | 小目标损失函数独家改进篇 | TGRS 2025 | 引入AdaFocalLoss损失函数,改进小目标检测,自适应聚焦小目标与样本分布不平衡,提升检测精度与训练稳定性

目录一、前言:YOLO26原生损失函数在小目标检测中的核心痛点(涨点瓶颈)1.1 小目标权重不足,聚焦能力薄弱1.2 样本分布不平衡适配性差,正负样本权重失衡1.3 训练不稳定,易出现梯度消失/震荡1.4 未区分小目标与背景的冗余干扰,误检率高二、TGRS 2025顶刊灵感解析:自适应聚焦损失的核心逻辑三、全网独家创新:AdaFocalLoss损失函数设计与YOLO26适配(核心重点,可复现)3.1 AdaFocalLoss函数整体设计(独家设计,清晰可复现)3.2 各核心模块详细设计(独家创新,可直接复现

qq_36130719的博客 202

OpenClaw小白使用全攻略

OpenClaw全能技能解锁指南:从基础到进阶 摘要: 本文提供OpenClaw AI智能体的完整使用教程,帮助用户从安装后"不知道如何用"到熟练掌握核心功能。教程包含:1)控制台5大区域详解和3个必做初始化设置;2)文件管理、浏览器自动化、文档生成等5大基础功能实操,每个功能配有详细操作步骤、指令模板和效果演示;3)10+高频场景解决方案,如整理文件、搜集资料、写总结等;4)进阶技巧和常见问题解答。通过清晰的图文指引,即使电脑小白也能快速上手,实现办公自动化、提升工作效率。

通俗易懂学IT 3059

vscode实时预览编辑markdown

vscode实时预览编辑markdown

DATABALL 的博客 1135

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

在Eclipse中使用Markdown编辑及效果预览

       在Eclipse中使用Markdown编辑非常简单,只需要在Eclipse的应用商店里搜索markdown,选择自己喜欢的markdown插件安装后重启即可。         然后右击 .md 文件选择“open with -&gt; other -&gt;markdown editor”即可。需要注意的是,打开md文件后,会发现并没有md文件的效果预览窗口。网上Eclipse m...

woyaoyonghanzizhuce的博客 7118

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

vim-markdown:在gvim(win7)中编辑并预览markdown文件

在gvim中编辑markdown文件,且能够看到编辑效果,需要使用一些插件: vim-markdown tabular chrome插件: markdown preview plus 插件安装 vim-markdown 下载地址 https://github.com/plasticboy/vim-markdown vim-markdown的readme.md中有使用vund

stepup 9445

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

web 实现 markdown 编辑 + 实时预览

思路 使用 showdown 库完成 markdown 到html 的转换,再同步将 html 输出到 预览容器中,最后使用 js 完成左右两边 容器 滚动的同步 js库 showdown github地址: https://github.com/showdownjs/showdown cdn:https://cdnjs.cloudflare.com/ajax/libs/showdown/1.9...

高雷 2104

SublimeText配置Markdown编辑及预览

本文详细介绍了如何配置Sublime Text及相关插件,使之成为Markdown编辑器并且能够在浏览器中实现预览功能。

qq_42397370的博客 2129

探索Marky:一款强大的Markdown预览与编辑器

探索Marky:一款强大的Markdown预览与编辑器 简介 是一个轻量级、高效且高度可定制的Markdown编辑器和实时预览工具,由开发者Andrea Vesperini创建。它提供了一种无缝的工作流程,让你可以专注于内容创作,而不必在编写和查看效果之间来回切换。 技术分析 Marky的核心是基于Web技术构建的,包括HTML、CSS和JavaScript,这使得它能够在任何现代浏览器中运行,无...

gitblog_00033的博客 444

VScode在 Markdown 编辑器中预览

文件中的 Mermaid 代码转换为可视化的 ER 图。是包含 Mermaid 代码的文件,是生成的 ER 图文件名。通过以上方法,你可以将。

susjj663的博客 2954

Markdown(.md)超详细详细贴脸教学,vscode编辑预览Markdown文件

Markdown入门教学

Discowei的博客 2853

Atom编辑器 中预览markdown

Atom编辑器 中预览markdown使用快捷键:Shift + Ctrl + M菜单位置: Packages -> Markdown Preview -> Toggle Preview效果

Abracadabra的专栏 1万+
上一篇: 显示 Markdown 的文件
下一篇: 把图片文件转化为 ICON 文件
pcplayer
博客等级 码龄26年 633粉丝 284原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值