Coder Social home page Coder Social logo

vscode-zhihu's Introduction

vscode-zhihu logo

打一颗 ⭐,世界更亮。

👽 Zhihu On VSCode

基于 VSCode 的知乎客户端提供包括阅读,搜索,创作,发布等一站式服务,内容加载速度比 Web 端更快,创新的 Markdown-Latex 混合语法让内容创作者更方便地插入代码块,数学公式,并一键发布至知乎平台。项目由 牛岱 独立设计开发,喜欢的话请献出你的

⚡ Features

📃 Reference


🔑 登录

进入主页面,左侧最上方栏为个人中心,点击登录图标,或使用 Ctrl + Shift + P 打开命令面板,搜索并执行 Zhihu: Login 命令。

选择登录方式:

二维码

选择二维码登陆后,会弹出二维码页面,打开知乎 APP,扫码后点击确认登录:

账号密码

视情况,插件会加载并显示验证码,提示你输入验证码,输入后,再依次根据提示输入手机号和密码即可。

登录成功后会有问候语,推荐栏会自动刷新出你的个性签名和头像:


🎭 个性推荐

登陆成功后,个性推荐板块会自动刷新,提供你的个性推荐内容:

内容可能为答案,问题,或文章,点击条目,就会打开VSCode知乎页面:


💥 热榜

在左侧的中间位置,你会看到热榜栏,内部有六个分类,内容与知乎Web端、移动端同步,助你掌控实时资讯:


🔎 搜索

点击搜索按钮,或搜索命令 Zhihu: Search Items,搜索全站知乎内容:


🖍 内容创作

新建一个后缀名为.md的文件,若不需要数学公式,只需要按照你最熟悉的 Markdown 语法写即可,右键点击 Zhihu: Preview 可预览答案:

Latex 语法支持

为了更好地支持数学公式的写作,知乎定制的 Markdown 转换器提供了 Latex 语法拓展,语法示例:

$$
  |\vec{A}|=\sqrt{A_x^2 + A_y^2 + A_z^2}.
$$

$$ 包围的部分会被当做 latex 语言进行解析,生成知乎的数学公式,比如上方的数学公式发布至知乎会生成如下公式:

行内 latex 也同样支持,语法举例:$\sqrt6$,一个dollar符号包裹公式即可。

代码块:

记得声明语言标签, 这样发布至知乎的答案才能获得正确的语法高亮,示例如下:

```java
public class Apple {
  public Apple() {}
}
```

发布后会提供 java 的语法高亮:

支持mermaid 转化为图片

{
    "zhihu.enableMermaidToPng": true, // 设置开启才能生效
    "zhihu.mermaidTheme": "dark" // 支持设置 mermaid 图片主题,默认值是 "default"
}

支持知乎表格

直接在本地书写 markdown 表格即可,row-style 默认使用"striped",行首,列首是灰色,隔行是灰色 。

知乎表格 row-style 效果
normal 行首是灰色
striped 行首,列首是灰色,隔行是灰色

📩 内容发布

链接扫描 😊

若你想在特定的问题下回答,或想修改自己的某个原有回答,就将问题/答案链接以 #! https://... 的格式放置于答案的第一行,发布时,插件会自动扫描识别,发布至相应的问题下,或修改原有的答案。

比如,你想在 轻功是否真的存在,其在科学上可以解释吗? 该问题下回答问题, 只需将

#! https://www.zhihu.com/question/19602618

若是你已经创作过的答案, 则将答案的链接, 形如:

#! https://www.zhihu.com/question/355223335/answer/1003461264

的链接复制至文件顶部即可。

若是你已经创作过的文章,则将文章的链接,形如:

#! https://zhuanlan.zhihu.com/p/107810342

若插件没有在首行扫描到链接,则会询问创作者接下来的操作,你可以选择发布新文章,或从收藏夹中选取相应问题,发布至相应问题下:

发布文章

选择发布文章后,会继续提示你输入文章标题,输入完成后,按下回车,当前的文档就会以文章的形式发布至你的账号。

文章标题智能识别

文章标题无需手动输入,插件会自动检测文本的第一个一级头标签:

# 这是一个标题(必须只是一个#)

然后将其作为标题,改行的内容也不会进入到正文中,如果没有检测到,还需用户手动输入。

背景图片智能识别

插件会自动扫描文本第一个一级头标签之前的内容,将第一个发现的图片链接作为背景图片:

![Image](https://pic4.zhimg.com/80/v2-157583e100e9e181191d285355332ebf.png)

# 标题在这, 上面的链接会变成背景图片, 不会进入正文

Html 支持

可以在正常的 Markdown 文本中插入 html 文本, 扩展了写作能力。

绝大多数 html 标签为非法标签,包括 table 在内,会被服务端过滤掉,只有 <p>, <div>, <img> 等合法标签才会被服务端存储,具体使用时小伙伴们可以自己尝试。

从收藏夹中选取

关于如何管理收藏夹,请移至 收藏夹

插件会提示选择你收藏过的问题:

选择后,答案就会发布至相应的答案下(若已在该答案下发布过问题,请用顶部链接的方式来发布!)。


🕐 定时发布

所有的答案,文章发布时,均会多一次询问,用户须选择是稍后发布还是马上发布,如果选择稍后发布,需要输入发布的时间,比如 “5:30 pm”,"9:45 am" 等,目前仅支持当天的时间选择,输入后,你就会在个人中心的“安排”处看到你将发布的答案和发布的时间(需要手动点击刷新):

定时发布采用 prelog 技术,中途关闭 VSCode,关机不影响定时发布,只需保证发布时间 VSCode 处于打开状态 && 知乎插件激活状态即可。

时间到了之后,你会收到答案发布的通知,该事件也会从“安排”中移除。

如果想取消发布,则点击 ❌ 按钮即可:

发布事件采用 md5 完整性校验,不允许用户同时预发两篇内容一摸一样的答案或文章。


🎫 收藏夹

➕ 添加收藏

不管是文章,答案,还是问题,在知乎页面顶栏的右侧,都会看到一个粉色的星状图标:

➖ 查看收藏

收藏的内容会在左侧下方显示,插件会自动分类:

✖ 删除收藏

鼠标移至相应的行,会出现叉状图标,点击即可删除:


📊 上传图片

一篇优质的答案,离不开图片,知乎插件提供了三种非常便携的图片上传方式,支持上传 .gif, .png, .jpg 格式,且在图片上传的时候自动在当前 Markdown 光标所在行自动生成图片链接,无需创作者手动管理,Windows,MacOS,Linux 全平台支持。

从粘贴板上传图片

调用 Zhihu: PasteImage 命令,自动将系统粘贴板中的图片上传至知乎图床,并生成相应链接。

快捷键为 ctrl+alt+p,也可以通过打开命令行面板搜索命令。


工作区中右键上传

在当前VSCode打开的文件夹内部,将鼠标放在你想上传的图片上,右键单击即可上传+生成链接:

可以看到,可以将文件的路径复制至剪贴板,再调用 Zhihu: PasteImageFromPath 命令,插件会自动将该路径的文件上传至知乎图床,生成链接。

打开文件浏览器选择图片

在正在编辑的 Markdown 文档下右键,可以看到菜单项 Zhihu: Upload Image From Explorer,点击即可打开文件管理器,选择一张图片点击确定即可。


😀 图标按钮

点击左侧活动栏的知乎按钮,进入知乎插件页面,在推荐的上方可以看到三个按钮,对应的命令分别为 Zhihu: Login(登录),Zhihu: Refresh(刷新), Zhihu: Search(搜素)。

最右侧的更多栏点开,可以看到 Zhihu: Logout (注销) 命令按钮:

在 Markdown 页面内,可以在编辑窗口的右上角看到两个按钮:

左侧的为 Zhihu: Publish(发布答案),右侧的为 Zhihu: Preview (预览答案)。

⌨ 快捷键

表格中未涉及的命令没有默认快捷键,用户可以根据自己需要进行设置,注意快捷键的下按方式是先按住 ctrl+z,松开 ctrl,再按下一个按键。

命令 Windows Mac
Zhihu: Paste Image From Clipboard ctrl+alt+p cmd+alt+p
Zhihu: Upload Image From Path ctrl+alt+q cmd+alt+q
Zhihu: Upload Image From Explorer ctrl+alt+f cmd+alt+f

⚙ 配置项

配置 效果
Zhihu: Use VSTheme 打勾开启知乎默认主题样式
Zhihu: Is Title Image Full Screen 打勾开让文章背景图片变成全屏
zhihu.enableMermaidToPng 启动mermaid图片上传至知乎
zhihu.mermaidTheme 设置mermaid的主题,darkdefault

vscode-zhihu's People

Contributors

niudai avatar zoulamzero avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vscode-zhihu's Issues

vscode 控制台好多错误哦

TypeError: Cannot read property 'statusCode' of null
	at t.PasteService.<anonymous> (c:\Users\Yi-ky\.vscode\extensions\niudai.vscode-zhihu-0.2.3\dist\extension.js:663:3021)
	at Generator.next (<anonymous>)
	at a (c:\Users\Yi-ky\.vscode\extensions\niudai.vscode-zhihu-0.2.3\dist\extension.js:663:1842)
$onExtensionRuntimeError @ mainThreadExtensionService.ts:66
_doInvokeHandler @ rpcProtocol.ts:398
_invokeHandler @ rpcProtocol.ts:383
_receiveRequest @ rpcProtocol.ts:299
_receiveOneMessage @ rpcProtocol.ts:226
(anonymous) @ rpcProtocol.ts:101
fire @ event.ts:582
fire @ ipc.net.ts:453
_receiveMessage @ ipc.net.ts:733
(anonymous) @ ipc.net.ts:592
fire @ event.ts:582
acceptChunk @ ipc.net.ts:239
(anonymous) @ ipc.net.ts:200
t @ ipc.net.ts:28
emit @ events.js:200
addChunk @ _stream_readable.js:294
readableAddChunk @ _stream_readable.js:275
Readable.push @ _stream_readable.js:210
onStreamRead @ internal/stream_base_commons.js:166
6resourceLoader.ts:44 Error: 无法读取文件'c:\Users\Yi-ky\.vscode\extensions\niudai.vscode-zhihu-0.2.3\node_modules\katex\dist\katex.min.css' (EntryNotFound (FileSystemError): Error: ENOENT: no such file or directory, open 'c:\Users\Yi-ky\.vscode\extensions\niudai.vscode-zhihu-0.2.3\node_modules\katex\dist\katex.min.css')
    at _.doReadAsFileStream (fileService.ts:457)

比如
TypeError: Cannot read property 'statusCode' of null

image

markdown文档中元数据的处理

在0.2.3版本中,不能正确的处理注释。例如下面的 markdown 注释中,titletags 都会显示在正文中。

此外,还希望在文档注释中有 title 时,在发布是可以默认将 title 的内容作为文章的标题,不需要额外手动输入了。

感谢!

---
title: vscode研究
tags: 技术
--

关于翻页的建议

@niudai
作者您好:
因为之前开发vscode-gcores发现VSCode中实现翻页功能确实有点麻烦。我想算是找到了个比较 tricky 的解决办法,在 treeItems 里最后再扔进去一个dir,我看了下, vscode-gitlens也是这么解决的。但只能查看更多,没法翻到指定页面,具体实现效果见下图(扔进去一个更多的 dir 然后传不同的 limit 和 offset )。希望对作者有帮助,如果接受 pr 我也可以提个 pr。
简单实现如下图:
image
效果如下图:
image

建议添加专栏管理

希望能够对专栏进行管理,这样就可以
只用VSCode搞定一切!
万分感谢:)

如何修改已发布的文章?

现有功能点中没有发现如何获取自己已发布的文章列表,以及如何对已发布的文件进行修订并重新发布呢?

如果对已发布的md文件进行修改后再提交,是会重新发布一篇新的文章吗?

希望在侧边栏加入`关注`

你好,作者,这款插件的设计非常不错,目前看推送已经不用打开浏览器了。如果,侧边栏能加入关注的部分就更好了,这样就可以有针对性的阅读消息了。

非常感谢!

文章发布失败:400

第一次尝试使用这个extension,确实不错编辑起来很舒服
但是最沮丧的是准备发布的时候告诉我发布失败 error 400!!!

搞个跑代码的功能?

说话岱哥能不能填个功能,在知乎上跑代码,然后结果显示出来。因为看到很多教学网站都有提供类似的功能。这样读者可以快速地看到代码的效果。

收藏有问题

  1. 收藏框里没有我已经收藏的内容
  2. 右边浏览页点收藏之后都放到了收藏框里的“问题”列表下,很多应该是“回答”
  3. 刷新收藏时推荐也一起刷新了,希望不要这样

增加获取问题链接的快捷方式

希望能增加从浏览页面中获取问题链接的快捷方式或者命令,不然在写答案的时候,还得先保存问题,或者还得去网页端找到问题的链接,才能将答案匹配到问题上。

内容发布特定问题的回答失败

若你想在特定的问题下回答,或想修改自己的某个原有回答,就将问题/答案链接以 #! https://... 的格式放置于答案的第一行,发布时,插件会自动扫描识别,发布至相应的问题下,或修改原有的答案。

若插件没有在首行扫描到链接,则会询问创作者接下来的操作,你可以选择发布新文章,或从收藏夹中选取相应问题,发布至相应问题下:

是按照插件文档的操作写的,首行是!#符号+问题链接

!# https://www.zhihu.com/question/298691365

但是无法成功发布特定问题的回答,点击发布按钮后会变成询问创作者接下来的操作,选择发布新文章或从收藏夹中选取相应问题,发布至相应问题下。

不知道是不是我本人哪里的操作失误,如果开发者能做一个简短的教程视频录制操作就直观多了

关于添加图片的问题

利用markdown自带方式引用的本地图片可以直接发表出来。
但是不能调整大小,因此我常常用 HTML的方式,有时还会配合居中的标签。这时候,文章就就会忽略掉这个图片。

代码块和图片显示有问题

你好,我用新版的知乎插件发布文章,本地预览和知乎网站上的结果不一致,图片无法显示,代码块也出问题了,请帮忙看下

can't comment out this part of code in `/node_modules/uglify-js/tools/node.js` to resolve the failure of `Cannot find module '../lib/utils.js'`

the code of /node_modules/uglify-js/tools/node.js is following:

var fs = require("fs");

exports.FILES = [
    require.resolve("../lib/utils.js"),
    require.resolve("../lib/ast.js"),
    require.resolve("../lib/parse.js"),
    require.resolve("../lib/transform.js"),
    require.resolve("../lib/scope.js"),
    require.resolve("../lib/output.js"),
    require.resolve("../lib/compress.js"),
    require.resolve("../lib/sourcemap.js"),
    require.resolve("../lib/mozilla-ast.js"),
    require.resolve("../lib/propmangle.js"),
    require.resolve("../lib/minify.js"),
    require.resolve("./exports.js"),
];

new Function("exports", function() {
    var code = exports.FILES.map(function(file) {
        return fs.readFileSync(file, "utf8");
    });
    code.push("exports.describe_ast = " + describe_ast.toString());
    return code.join("\n\n");
}())(exports);

function describe_ast() {
    var out = OutputStream({ beautify: true });
    function doitem(ctor) {
        out.print("AST_" + ctor.TYPE);
        var props = ctor.SELF_PROPS.filter(function(prop) {
            return !/^\$/.test(prop);
        });
        if (props.length > 0) {
            out.space();
            out.with_parens(function() {
                props.forEach(function(prop, i) {
                    if (i) out.space();
                    out.print(prop);
                });
            });
        }
        if (ctor.documentation) {
            out.space();
            out.print_string(ctor.documentation);
        }
        if (ctor.SUBCLASSES.length > 0) {
            out.space();
            out.with_block(function() {
                ctor.SUBCLASSES.sort(function(a, b) {
                    return a.TYPE < b.TYPE ? -1 : 1;
                }).forEach(function(ctor, i) {
                    out.indent();
                    doitem(ctor);
                    out.newline();
                });
            });
        }
    };
    doitem(AST_Node);
    return out + "\n";
}

function infer_options(options) {
    var result = exports.minify("", options);
    return result.error && result.error.defs;
}

exports.default_options = function() {
    var defs = infer_options({ 0: 0 });
    Object.keys(defs).forEach(function(component) {
        var options = {};
        options[component] = { 0: 0 };
        if (options = infer_options(options)) {
            defs[component] = options;
        }
    });
    return defs;
};

other than the content descripted in your CONTRIBUTING.md:

var FILES = UglifyJS.FILES = [
    "../lib/utils.js",
    "../lib/ast.js",
    "../lib/parse.js",
    "../lib/transform.js",
    "../lib/scope.js",
    "../lib/output.js",
    "../lib/compress.js",
    "../lib/sourcemap.js",
    "../lib/mozilla-ast.js",
    "../lib/propmangle.js",
    "./exports.js",
].map(function(file){
    return require.resolve(file);
});

new Function("MOZ_SourceMap", "exports", FILES.map(function(file){
    return fs.readFileSync(file, "utf8");
}).join("\n\n"))(
    require("source-map"),
    UglifyJS
);

UglifyJS.AST_Node.warn_function = function(txt) {
    console.error("WARN: %s", txt);
};

知乎 0.2 版本 Feature

该 issue 根据用户们征集的意见,对 0.2 版本将加入的新功能做一个草拟, 会随着用户的反馈不断变化, 并在实际的开发中付诸实施。✅ 表示已经实现。

  1. 内容定时发布功能 ✅
  2. 可以从 Webview 中提取问题/答案/文章 的链接。✅
  3. CSS样式跟随VSCode主题。✅
  4. 取消宏刷新,刷新按钮作用到特定的 Treeview 上。✅

我第二次上传时无法自动生成链接哦!

我第二次上传时无法自动生成链接哦! 一开始我以为我插件出现问题,第一张测试图片一直没有自动生成链接。
之后我发现图片问题貌似上传过了导致的。
好像每次一张图片只能自动生成一次链接,这样编写文章不太方便。

登陆不支持邮箱,也不支持国外手机号

这里:
let loginData: ILogin = {
'client_id': 'c3cef7c66a1843f8b3a9e6a1e3160e20',
'grant_type': 'password',
'source': 'com.zhihu.web',
'username': '+86' + phoneNumber,
'password': password,
'lang': 'en',
'ref_source': 'homepage',
'utm_source': '',
'captcha': captcha,
'timestamp': Math.round(new Date().getTime()),
'signature': ''
};

文章发布相关问题

试用了文章发布功能,感觉很便利,但是也发现几个问题。应用工具发表的文章

  • 便利性:
    1. 非常容易迁移markdown 笔记
    2. 预览和发布内容一致
    3. 完美支持数学公式
  • 问题:
    1. 不能选主题。(知乎页面发布文章时,可选主题,比如“人工智能”,方便文章推荐给对相关标签感兴趣的人。)
    2. 图片必须来自知乎域内。(图片链接来自互联网其他网站,比如百度百科,不能加载呈现。hack的方法,将图片提前上传到知乎文章草稿中,复制图片链接,即可呈现。如上述我测试的文章)
    3. 不能添加封面图片。(文章通常可以配一张封面图,没有看到工具的相关功能)
    4. 文章发布后,使用知乎网页重新编辑,间距变大。(上述问题导致文章不完美,需要进入知乎官网编辑文章时,编辑后,重新提交后,段落间距变大。)
    5. 文章发布后,使用知乎手机客户端重新编辑,公式内出现多个
      符号。

虽然有一些问题,使用的便利性依然给了我很大的惊喜。感谢大神@niudai ,希望工具越做越好!我准备持续使用。

不要默认globally启用

感谢大佬的贡献!
提2个小小的建议:

  1. 不要默认globally启用,可以在点击知乎图标后再启用;
  2. 与上一条对应,如果默认是全局启用,可能会占额外网速和性能,并且日常写markdown时,右上角总是会有知乎的2个按钮在,很容易点错。

建议增加自动获取外链图片并上传

大佬好,我有个不知道算不算小众的需求场景:文章之前发在其它平台上或自己博客上,图片在其他平台或图床上,想转移到知乎,可以直接检测下载外链图片并上传到知乎,替换成知乎的图片链接。想问一下大佬或者其他人有没有什么思路?

建议增加视频/gif上传功能

markdown可以通过html tag方式插入视频,在GitHub等在线平台上无法正确播放,但使用typora等浏览工具可以识别并播放。

中文博客推荐的是用iframe标签添加视频/gif,但实测typora不支持。

另一种写法是用video标签,在typora中可正确播放,只是其中的样式属性无法生效,如:

<video autoplay="" muted="" loop=""><source src="https://update.tabnine.com/v/cpp_demo_1.mp4" type="video/mp4"></video>

建议文章上传时,可以检查是否有video标签,若有,则从source.src中提取视频url进行上传。

另外,据说iframe可以用于播放,我没有试过,若typora等编辑器支持的话,可考虑上传时提取图片路径后,按图片上传流程提交。

文章发布 代码块没有换行

Hello, 感谢这个插件~

文章的发布 代码块没有换行,缩成一行。 换行符号LF, CRLF试过都不行。

环境: macOS
VSCode: 1.42.1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.