V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
skywind3000
V2EX  ›  Linux

命令行创建和发布 MarkDown 到 WordPress

  •  
  •   skywind3000 ·
    skywind3000 · 2019-05-13 17:21:57 +08:00 · 3582 次点击
    这是一个创建于 2025 天前的主题,其中的信息可能已经有所发展或是发生改变。

    全球有 10% 的网站是用 WordPress 搭建的,虽然有很多 Hugo/Hexo 这类静态页面生成工具,但是功能比起 WordPress 弱太多了。之前用 WordPress 唯一的不爽就是没法离线在编辑器里用 MarkDown 写文章,然后一键发布,所以我写了一个小工具:

    https://github.com/skywind3000/markpress

    是用很简单,先创建一个 ~/.config/markpress/config.ini 文件:

    [default]
    tabsize=4
    
    [0]
    url=http://your-wordpress.com/
    user=USERNAME
    passwd=PASSWORD
    

    然后用 markpress 命令创建一篇新文章:

    markpress -n mypost.md
    

    markpress 会链接 wordpress 服务器,请求一个唯一的文章编号 uuid,并且为你生成文件头部内容,比如:

    ---
    uuid: 1234
    title:
    status: draft
    categories:
    tags:
    ---
    

    然后用你喜欢的编辑器编辑 mypost.md 文件,比如填充一些内容:

    ---
    uuid: 1234
    title: How to use asyncio in python ?
    status: publish
    categories: Development
    tags: python, server
    ---
    # Why you need asyncio ?
    
    - reason 1
    - reason 2
    - reason 3
    
    # Principle behind the asyncio
    
    ...
    

    现在上面信息栏填写了标题,分类和标签,然后把 status 从 draft 改为 publish,然后填写 markdown 的正文,当您编辑好了以后,一行命令就可以更新到 wordpress:

    markpress -u mypost.md
    

    成功的话,你会看到输出:

    post uuid=1234 updated: mypost.md
    https://www.xxxx.com/blog/?p=1234
    

    用最后一行的 url 就可以访问你的日志了。

    那么 markpress + wordpress 写日志比 hugo/hexo 强在哪里呢?

    漂亮的语法高亮:

    使用 highlight.js 插件,支持 185 种语言的高亮,可以选择 89 种主题,是目前最强的代码高亮解决方案。

    页面细节基本尊崇 Github 规范:

    • 连接会被自动识别,只需要直写 URL,就会自动识别出来加上 <a> 标签。
    • 比如双波浪线包围的内容 ~~测试~~ 会被划掉显示为:测试(有一条删除横线,此处没法显示)。
    • 比如 Github Emoji,直接写 :smile: 的 shortcode,就会变成 😄

    此外还有很多比 Github 规范强的功能:

    支持内嵌公式:

    被 $ 符号包围的文字会被按照 latex 公式解析,输入:

    $z=\sqrt{x^2 + \sqrt{y^2}}$
    

    得到:

    支持内嵌 GraphViz 图表:

    使用三个反引号和 ```viz-{引擎名称} 开头的代码块,能够被提前渲染成 SVG,并将 SVG 的 XML 内容直接嵌入到 Markdown 生成的 html 里面,无需额外保存图片,也没有中间文件,比如,Markdown 里面的代码块:

    ```viz-dot 
    digraph G {
       A -> B
       B -> C
       B -> D
    }
    ```
    

    会被解析成 SVG 适量:

    Viz 后面的 dot 对应的是 GraphViz 的 dot 引擎,还有其他好几个可用引擎,比如 circo:

    ```viz-circo
    digraph st2 {
     rankdir=TB;
     node [fontname = "Verdana", fontsize = 10, color="skyblue", shape="record"];
     edge [fontname = "Verdana", fontsize = 10, color="crimson", style="solid"];
     st_hash_type [label="{<head>st_hash_type|(*compare)|(*hash)}"];
     st_table_entry [label="{<head>st_table_entry|hash|key|record|<next>next}"];
     st_table [label="{st_table|<type>type|num_bins|num_entries|<bins>bins}"];
     st_table:bins -> st_table_entry:head;
     st_table:type -> st_hash_type:head;
     st_table_entry:next -> st_table_entry:head [style="dashed", color="forestgreen"];
    }
    ```
    

    上面代码块使用了 circo 引擎,得到图形如下:

    GraphViz 是非常流行的描述语言绘制矢量图的工具,它有很多例子:Gallery

    实际效果演示见我的博客文章: ​ www.skywind.me

    ---

    有了这个命令行工具,可以配置在 Vim/VSCode 里面,比如 vscode tasks.json 里面配置下 markpress,就可以在编辑 markdown 的时候按 CTRL+SHIFT+B 一键调用 markpress 发布到 wordpress 上了,十分顺手。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1120 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 22:53 · PVG 06:53 · LAX 14:53 · JFK 17:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.