Typora--终于找到一个能够解决将csdn文章同步到hexo的完美编辑器(解决csdn图片防盗链导致无法直接复制文章的问题)。
个人博客:https://mmmmmm.me
源码:https://github.com/dataiyangu/dataiyangu.github.io
需求
- 能够将csdn的文章同步到自己的hexo博客(csdn有图片防盗链)
- 图片保存到本地文件夹(上传到云空间容易丢失)
- 最简便的操作
背景
之前用过hexo-admin,代码区和预览不同步,而且因为csdn的防盗链,所以只能从csdn复制,然后粘贴过去;hexoEditor(github)文件的名字必须和文章的名字一样,因为我的gitalk是根据文件名字创建issus的,中文会导致报错;mweb(用的最久)相对方便多了,直接将csdn文章粘贴过去,可是图片有外链,通过从csdn拖动图片到指定位置,方便了一点点。
新宠
告诉我,我的名字叫什么?大声点我听不见~
Typora
页面
我的是mac版:

具体相关下载安装以及操作的说明略。
神奇之处
看得见的优点
用md的语法写完回车,实时预览,而不是像其他一样左右分开的。
如何设置项目根目录
注意上图最上面
typora-root-url: ../../source
这个的意思是设置根目录,不然下面的图片是看不到的。
设置方法:编辑–》图片设置–》设置图片根目录
文章发布的时候这行要去掉,否则格式有问题
如何显示图片?
快捷键command+,打开设置–》编辑器–》复制到指定路径–》填写路径为images–》设置:
对本地位置的图片应用上述规则
对网络位置的图片应用上述规则
优先使用相对路径
这三项打上勾

这里能够将csdn中的图片直接粘贴过去就是图中红圈中能够完美实现这个功能。
然后由于优先使用相对路径,即这里将source作为根路径,所以相对路径就是/images/xxxxx.png
2019-03-12更正:这里一定要设置相对路径
于是最终操作流程
option+command+3 选择打开文件-》打开_posts文件-》新建一个文件
- 编辑–》图片设置–》设置图片根目录(source)(因为需要根据根目录自动写出来下载图片到哪个路径)
出现
---
typora-root-url: ../../source
---
当然直接将这句话添加在头部应该也可以
2019-03-12更正:第一点的上面这部分不需要,因为上面图中设置优先使用相对路径,这句话已经没有用了
然后粘贴hexo文章头部信息(作者、分类、时间等 注意在粘贴的时候一定要切换成源代码模式,快捷键command+/ )因为其中有“-”符号,导致自己的data和catagory会自动table,具体报错信息文章末尾给出
- 直接将csdn文章粘贴过去(不用处理图片哦, 一定不要是源代码模式,否则无法自动下载图片 )
- 将根目录那句话删掉(否则hexo无法将md解析为html,格式错误), 当然,删除这句话,在Typora中图片无法显示可是在浏览器中打开是正常的,希望在Typora中阅读,当然可以载把这句话加上即可
---
typora-root-url: ../../source
---
2019-03-12更正:不加这句话也可以,因为上面图中设置优先使用相对路径,这句话已经没有用了,把图片全部设置成相对路径就可以载这个软件中看自己的文章了。
4. 在编辑器的上面修改文件名称和路径(_posts)
5. 完成
如果在粘贴hexo头部的时候不切换成源代码模式会报错如下:
ERROR Process failed: _posts/2019-03-03-1.md
YAMLException: bad indentation of a sequence entry at line 7, column 13:
categories:
^
at generateError (/Users/leesin/Desktop/blog/node_modules/js-yaml/lib/js-yaml/loader.js:165:10)
at throwError (/Users/leesin/Desktop/blog/node_modules/js-yaml/lib/js-yaml/loader.js:171:9)
at readBlockSequence (/Users/leesin/Desktop/blog/node_modules/js-yaml/lib/js-yaml/loader.js:935:7)
at composeNode (/Users/leesin/Desktop/blog/node_modules/js-yaml/lib/js-yaml/loader.js:1363:45)
at readBlockMapping (/Users/leesin/Desktop/blog/node_modules/js-yaml/lib/js-yaml/loader.js:1062:11)
at composeNode (/Users/leesin/Desktop/blog/node_modules/js-yaml/lib/js-yaml/loader.js:1332:12)
at readDocument (/Users/leesin/Desktop/blog/node_modules/js-yaml/lib/js-yaml/loader.js:1492:3)
at loadDocuments (/Users/leesin/Desktop/blog/node_modules/js-yaml/lib/js-yaml/loader.js:1548:5)
at Object.load (/Users/leesin/Desktop/blog/node_modules/js-yaml/lib/js-yaml/loader.js:1569:19)
at parseYAML (/Users/leesin/Desktop/blog/node_modules/hexo-front-matter/lib/front_matter.js:80:21)
at parse (/Users/leesin/Desktop/blog/node_modules/hexo-front-matter/lib/front_matter.js:56:12)
at Promise.all.spread (/Users/leesin/Desktop/blog/node_modules/hexo/lib/plugins/processor/post.js:52:20)
at tryCatcher (/Users/leesin/Desktop/blog/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/Users/leesin/Desktop/blog/node_modules/bluebird/js/release/promise.js:509:35)
at Promise._settlePromise (/Users/leesin/Desktop/blog/node_modules/bluebird/js/release/promise.js:569:18)
at Promise._settlePromise0 (/Users/leesin/Desktop/blog/node_modules/bluebird/js/release/promise.js:614:10)
at Promise._settlePromises (/Users/leesin/Desktop/blog/node_modules/bluebird/js/release/promise.js:694:18)
at Promise._fulfill (/Users/leesin/Desktop/blog/node_modules/bluebird/js/release/promise.js:638:18)
at PromiseArray._resolve (/Users/leesin/Desktop/blog/node_modules/bluebird/js/release/promise_array.js:126:19)
at PromiseArray._promiseFulfilled (/Users/leesin/Desktop/blog/node_modules/bluebird/js/release/promise_array.js:144:14)
at PromiseArray._iterate (/Users/leesin/Desktop/blog/node_modules/bluebird/js/release/promise_array.js:114:31)
at PromiseArray.init [as _init] (/Users/leesin/Desktop/blog/node_modules/bluebird/js/release/promise_array.js:78:10)
ERROR Process failed: _posts/2019-03-03-1.md
YAMLException: bad indentation of a sequence entry at line 7, column 13:
categories:
^
at generateError (/Users/leesin/Desktop/blog/node_modules/js-yaml/lib/js-yaml/loader.js:165:10)
at throwError (/Users/leesin/Desktop/blog/node_modules/js-yaml/lib/js-yaml/loader.js:171:9)
at readBlockSequence (/Users/leesin/Desktop/blog/node_modules/js-yaml/lib/js-yaml/loader.js:935:7)
at composeNode (/Users/leesin/Desktop/blog/node_modules/js-yaml/lib/js-yaml/loader.js:1363:45)
at readBlockMapping (/Users/leesin/Desktop/blog/node_modules/js-yaml/lib/js-yaml/loader.js:1062:11)
at composeNode (/Users/leesin/Desktop/blog/node_modules/js-yaml/lib/js-yaml/loader.js:1332:12)
at readDocument (/Users/leesin/Desktop/blog/node_modules/js-yaml/lib/js-yaml/loader.js:1492:3)
at loadDocuments (/Users/leesin/Desktop/blog/node_modules/js-yaml/lib/js-yaml/loader.js:1548:5)
at Object.load (/Users/leesin/Desktop/blog/node_modules/js-yaml/lib/js-yaml/loader.js:1569:19)
at parseYAML (/Users/leesin/Desktop/blog/node_modules/hexo-front-matter/lib/front_matter.js:80:21)
at parse (/Users/leesin/Desktop/blog/node_modules/hexo-front-matter/lib/front_matter.js:56:12)
at Promise.all.spread (/Users/leesin/Desktop/blog/node_modules/hexo/lib/plugins/processor/post.js:52:20)
at tryCatcher (/Users/leesin/Desktop/blog/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/Users/leesin/Desktop/blog/node_modules/bluebird/js/release/promise.js:509:35)
at Promise._settlePromise (/Users/leesin/Desktop/blog/node_modules/bluebird/js/release/promise.js:569:18)
at Promise._settlePromise0 (/Users/leesin/Desktop/blog/node_modules/bluebird/js/release/promise.js:614:10)
at Promise._settlePromises (/Users/leesin/Desktop/blog/node_modules/bluebird/js/release/promise.js:694:18)
at Promise._fulfill (/Users/leesin/Desktop/blog/node_modules/bluebird/js/release/promise.js:638:18)
at PromiseArray._resolve (/Users/leesin/Desktop/blog/node_modules/bluebird/js/release/promise_array.js:126:19)
at PromiseArray._promiseFulfilled (/Users/leesin/Desktop/blog/node_modules/bluebird/js/release/promise_array.js:144:14)
at PromiseArray._iterate (/Users/leesin/Desktop/blog/node_modules/bluebird/js/release/promise_array.js:114:31)
at PromiseArray.init [as _init] (/Users/leesin/Desktop/blog/node_modules/bluebird/js/release/promise_array.js:78:10)
Typora--终于找到一个能够解决将csdn文章同步到hexo的完美编辑器(解决csdn图片防盗链导致无法直接复制文章的问题)。的更多相关文章
- php解决微信文章图片防盗链
解决微信文章图片防盗链 function actionWechatImg() { header('Content-type: image/jpg'); $url = $_GET['url']; $re ...
- Python爬取mn52网站美女图片以及图片防盗链的解决方法
防盗链原理 http标准协议中有专门的字段记录referer 一来可以追溯上一个入站地址是什么 二来对于资源文件,可以跟踪到包含显示他的网页地址是什么 因此所有防盗链方法都是基于这个Referer字段 ...
- ASCII,Unicode和UTF-8终于找到一个能完全搞清楚的文章了
前言 平时喜欢写东西,看博客,一直对编码有些懵,今天下午也不知道看到了什么,突然想了解下,就找到了这个文章,看完真的豁然开朗,这个必须留下来做纪念. 点击打开链接 1.ASCII 我们知道,计算机内部 ...
- (6)妈的终于找到能用的nehe sdk了
在网上下载了有十多个,终于找到一个能用的了 下面是下载地址: http://download.csdn.net/detail/jason_bourn/681620#comment 泪奔啊~
- Java:终于找到了在alloy中的JFileChooser中的弹出式菜单不显示文字的解决办法
alloy界面可以说是我写过的最漂亮的一种JAVA界面. 可惜不知为什么,至从几年前推出1.4版后,就再也没有更新了. 随着java版本的升级,一直很担心alloy有一天不再适用于java的最新版. ...
- 【转载】“error LNK1169: 找到一个或多个多重定义的符号”的解决方法
c++的小细节的地方 原文地址:https://blog.csdn.net/xiaosu123/article/details/5665729 问题描述如下: 有 三个源文件,A.h.B.cpp.C. ...
- “error LNK1169: 找到一个或多个多重定义的符号”的解决方法(转载)
解决方案: “error LNK1169: 找到一个或多个多重定义的符号”的解决方法(转载) 遇到的问题: 在.h头文件中采用namespace 命名空间报错 test.h namespace LMR ...
- error LNK1169 找到一个或多个多重定义的符号的解决方法
问题描述如下: 有 三个源文件,A.h.B.cpp.C.cpp. A.h是头文件,其中声明了三个变量a1.a2. a3. B.cpp是A.h中所声明的类的实现源代码,C.cpp是主程序文件.B.cpp ...
- 转载:“error LNK1169: 找到一个或多个多重定义的符号”的解决方法
转载来自:http://www.cnblogs.com/A-Song/archive/2012/03/23/2413782.html 问题描述如下: 有 三个源文件,A.h.B.cpp.C.cpp. ...
随机推荐
- luoguP1288 取数游戏II [博弈论]
题目描述 有一个取数的游戏.初始时,给出一个环,环上的每条边上都有一个非负整数.这些整数中至少有一个0.然后,将一枚硬币放在环上的一个节点上.两个玩家就是以这个放硬币的节点为起点开始这个游戏,两人轮流 ...
- Android中.9图片的了解和制作过程
个部分(九宫格),分别为4个角,4条边,以及一个中间区域,4个角是不做拉升的,所以还能一直保持圆角的清晰状态,而2条水平边和垂直边分别只做水平和垂直拉伸,所以不会出现边会被拉粗的情况,只有中间用黑线指 ...
- vue2 开发环境部署 及 打包配置
一.脚手架工具(vue2 的脚手架工具是 vue-cli) 1.脚手架工具的安装 参考 : https://blog.csdn.net/wulala_hei/article/details/804 ...
- 兼容ie8的多维数组——深拷贝
浅拷贝只是把对象的内存位置指针给拷贝了,若修改拷贝对象,则原对象也会跟踪修改. var a = {a : 'old', b : { c : 'old'}} var b = Object.assign( ...
- [NOIP模拟测试9]题(Problem) 题解 (组合数全家桶+dp)
达哥送分给我我都不要,感觉自己挺牛批. $type=0:$ 跟visit那题类似,枚举横向移动的步数直接推公式: $ans=\sum C_n^i \times C_i^{\frac{i}{2}} \t ...
- (转)OpenFire源码学习之四:openfire的启动流程
转:http://blog.csdn.net/huwenfeng_2011/article/details/43413233 openfire启动 ServerStarter 启动流程图: 启动的总入 ...
- 用java打开一个本地文件
以下有三种方式打开 /** * 借助java.awt.Desktop打开 * @see 打开的目录或文件名中允许包含空格 */ private static void useAWTDesktop() ...
- jeecg 实现lhgDialog窗口传值
需要在jeecg中的dialog弹框往调用的窗口赋值. 定义内容页调用窗体实例对象接口 var windowapi = frameElement.api ; var W = windowapi.ope ...
- JUC源码分析-集合篇(九)SynchronousQueue
JUC源码分析-集合篇(九)SynchronousQueue SynchronousQueue 是一个同步阻塞队列,它的每个插入操作都要等待其他线程相应的移除操作,反之亦然.SynchronousQu ...
- nginx基本配置各个参数说明
#运行用户user nobody;#启动进程,通常设置成和cpu的数量相等worker_processes 1; #全局错误日志及PID文件#error_log logs/error.log;#err ...