V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Daring Fireball: Markdown
CommonMark
MacDown Open Source Markdown Editor
Marked
GitHub Flavored Markdown
windcode
V2EX  ›  Markdown

写了一个 Markdown 格式化命令行工具

  •  
  •   windcode · 2022-02-24 15:46:48 +08:00 · 2131 次点击
    这是一个创建于 764 天前的主题,其中的信息可能已经有所发展或是发生改变。

    简介

    GitHub release Github All Releases license Go Reference Coverage Status

    💡 一款 Markdown 格式化工具,和 gofmt 比较类似,不过格式化的对象是 Markdown 文本

    最近在频繁用 Markdown 写文档,内容一多就不好管理格式,经常看到一坨坨的 Markdown 内容挤在一起,导致有强迫症的我的眉头也经常挤在一起。

    好在发现了强大的结构化的 Markdown 引擎 lute,它对中文语境的支持也很好,于是借助 lute 引擎开发了这款 Markdown 格式化命令行工具 mdfmt,欢迎大家试用 👏🏻

    项目地址:elliotxx/mdfmt

    ✨ 特性

    • 支持多种输入:标准输入、文件、目录、通配符,其中指定目录会递归格式化目录下所有 Markdown 文件
    • 支持重写:将结果写入(源)文件而不是标准输出
    • 支持显示差异:显示 Markdown 格式化前后的差异( diff ),而不是重写文件
    • 支持列出格式化的文件
    • 跨平台:Linux, Windows, Mac
    • 一键安装:支持通过 Homebrewgo install 等方式一键安装 mdfmt

    🛠️ 安装

    二进制安装(跨平台: windows, linux, mac ...)

    从二进制安装,只需从 mdfmt发布页面 下载对应平台的二进制文件,然后将二进制文件放在命令行能访问到的目录中即可。

    Homebrew

    elliotxx/tap 有 MacOS 和 GNU/Linux 的预编译二进制版本可用:

    brew install elliotxx/tap/mdfmt
    

    从源码构建

    使用 Go 1.17+ 版本,你可以通过 go install 直接从源码安装 mdfmt

    go install github.com/elliotxx/mdfmt/cmd/mdfmt@latest
    

    注意: 你将基于代码仓库最新的可用版本安装 mdfmt,尽管主分支的最新提交应该始终是一个稳定和可用的版本,但这不是安装和使用 mdfmt 的推荐方式。通过 go install 安装的 mdfmt 版本输出将显示默认版本号( default-version )。

    Docker

    Docker 用户可以用以下命令拉取 mdfmt 的镜像:

    docker pull elliotxx/mdfmt
    

    验证:

    $ docker run --rm elliotxx/mdfmt:latest mdfmt -h
    ...
    $ docker run --rm elliotxx/mdfmt:latest mdfmt -V
    ...
    $ docker run -v $PWD:$PWD --rm elliotxx/mdfmt:latest mdfmt -d /Users/yym/workspace/mdfmt/pkg/md/testdata/hello-more.md
    diff -u /Users/yym/workspace/mdfmt/pkg/md/testdata/hello-more.md.orig /Users/yym/workspace/mdfmt/pkg/md/testdata/hello-more.md
    --- /Users/yym/workspace/mdfmt/pkg/md/testdata/hello-more.md.orig
    +++ /Users/yym/workspace/mdfmt/pkg/md/testdata/hello-more.md
    @@ -1,6 +1,7 @@
     # hello
    +
     > hello
    
    -|name|age|
    -|--|--|
    -|Mike|18|
    +| name | age |
    +| ---- | --- |
    +| Mike | 18  |
    

    ⚡ 使用

    $ mdfmt -h
    A Markdown formatter that follow the CommonMark. Like gofmt, but for Markdown.
    
    Usage:
      mdfmt [flags] [path ...]
    
    Examples:
      # Format specified Markdown file, and write to stdout
      mdfmt README.md
      
      # Format and rewrite for specified Markdown file
      mdfmt -w README.md
      
      # Display diffs instead of rewriting Markdown files
      mdfmt -d README.md
      
      # List files whose formatting differs from mdfmt's
      mdfmt -l .
      
      # Format, rewrite, and display diffs for specified Markdown file
      mdfmt -d -w README.md
      
      # Format and rewrite all Markdown file in current directory
      mdfmt -w *.md
      
      # Recursive format and rewrite all Markdown file in current directory
      mdfmt -w .
      
      # Format and rewrite the specified Markdown file and directory
      mdfmt -w README.md testdir/
      
      # Format stdin to stdout
      cat README.md | mdfmt
      
      # Show version info
      mdfmt -V
    
    Flags:
      -d, --diff      display diffs instead of rewriting files
      -h, --help      help for mdfmt
      -l, --list      list files whose formatting differs from mdfmt's
      -V, --version   show version info
      -w, --write     write result to (source) file instead of stdout
    

    🙏 感谢

    2 条回复    2022-02-25 12:13:01 +08:00
    qaqLjj
        1
    qaqLjj  
       2022-02-25 09:17:24 +08:00 via Android
    最近在用 md-padding 在格式化我的文档,下回试试你这个
    windcode
        2
    windcode  
    OP
       2022-02-25 12:13:01 +08:00
    @qaqLjj 欢迎试用&提意见~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2932 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 14:09 · PVG 22:09 · LAX 07:09 · JFK 10:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.