porridgechen890的笔记

梦里不知身是客

hexo官方文档里的做法

官方文档

引用文章 这里有写: {% post_link filename [title] [escape] %}

比方说我要引用 使用Hexo建立博客.md 这篇文章,我就得这样子写

{% post_link 从_posts下边的目录开始/可能有中间的目录/使用hexo建立博客 %}

还有需要说明的就是,“使用hexo建立博客”是文件名,不是文件里写的title。你也可以指定显示出来的标题,像下面这样:

{% post_link 从_posts下边的目录开始/可能有中间的目录/使用hexo建立博客 这是我指定的标题 %}

PS:escape 这个参数是用来指定是否转义的。

使用Hexo建立博客

Markdown 图片语法

![图片替代文本](图片链接 "图片title")

要添加图像,请使用感叹号 (!), 然后在方括号增加替代文本,图片链接放在圆括号里,括号里的链接后可以增加一个可选的图片标题文本。

图片链接可以是网络上的某张图片的地址,也可以是本地的图片路径。

本地图片路径可以是绝对路径,也可以是相对路径,相对路径就是以该md文件为起点。

Hexo 图片添加方法一:资源文件夹

  • 可以把图片放在全局资源文件夹 source/images 里,然后通过 ![](/images/image.jpg) 这种写法去引用图片。

  • 也可以给每篇文章建一个对应文章资源文件夹,需要将 config.yml 文件里的 post_asset_folder 置为 true 。当这个开关打开后,Hexo 将会在你每一次通过 hexo new [layout] <title> 命令创建新文章时自动创建一个文件夹。然后通过标签 {% asset_img example.jpg %} 去引用图片。

上面提到的全局资源文件夹和文章资源文件夹这两种方式,都只是 Hexo 的“方言”,如果把这样的md文件单独放进某个markdown编辑器里预览,是看不到图片的。

Hexo 图片添加方法二:Hexo 插件

hexo-asset-img

xxx
├── a.jpg
├── b.png
└── c.jpg
xxx.md

安装好这个插件后,可以通过 ![](xxx/a.jpg) 来引用图片。这样的话 Hexo 和 Markdown 编辑器都能正确预览图片了。

可以通过输入 npm search 插件名 来查看有哪些插件,然后再选择一个安装。

Hexo 图片添加方法三:图床

利用图床工具,上传图片,获取链接,然后填入链接。但是图床大多收费,有的就算现在不收费,你用一段时间就收你的费了。

Hexo 图片添加方法四:图片转文本

可以把图片转成base64编码,以文本的形式放进md文件里。但是base64编码会增大了三分之一的体积,而且同一个md文件里,如果图片太多的话,加载也慢。还有就是md文件会变得臃肿,不便于编辑。

  • 有现成的网站,比方说图片转base64

  • 也可以利用python,源码如下

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    import os
    import pyperclip
    import base64
    
    # 图片文件名
    g_pic_name = 'IMG_2649'
    
    # 图片后缀名
    g_pic_ext = 'webp'
    
    # 图片所在目录,从py文件所在的目录开始算,要跟斜杠
    g_folder_name = '2022LaborDay/'
    
    if __name__ == '__main__':
    
        # 拼接完整的路径
        fullpath = g_folder_name + g_pic_name + '.' + g_pic_ext
        fullpath = os.path.join(os.path.abspath('.'), fullpath)
    
        # 校验图片是否存在
        is_file_exists = os.path.exists(fullpath)
        assert(is_file_exists)
    
        f=open(fullpath, 'rb')
        str1=base64.b64encode(f.read())
        f.close()
        str2=str(str1, 'utf-8')
        str3='[' + g_pic_name + ']:data:image/' + g_pic_ext + ';base64,' + str2
        pyperclip.copy(str3)

    我这里用的Python3。这个脚本执行完之后,就可以粘贴字符串了。

  • 再提供一个图形化界面程序:

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    from tkinter import *
    from tkinter import filedialog
    from tkinter import messagebox
    from PIL import Image, ImageTk
    import base64
    import pyperclip
    import os
    
    class App:
        def __init__(self, master):
            self.master = master
            self.master.title('图片转Base64编码')
            self.master.geometry('400x400')
    
            self.label = Label(self.master, text='请点击按钮选择图片文件')
            self.label.pack(pady=20)
    
            self.button = Button(self.master, text='选择文件', command=self.select_file)
            self.button.pack(pady=10)
    
            self.image_label = Label(self.master)
            self.image_label.pack(pady=20)
    
            self.convert_button = Button(self.master, text='转换成Base64编码', command=self.convert)
            self.convert_button.pack(pady=10)
    
        def select_file(self):
            filetypes = (
                ('所有文件', '*.*'),
                ('PNG 文件', '*.png'),
                ('JPEG 文件', '*.jpg'),
                ('WEBP 文件', '*.webp')
            )
    
            filename = filedialog.askopenfilename(
                title='选择图片文件',
                initialdir='./',
                filetypes=filetypes
            )
    
            if filename:
                self.filename = filename
                self.label.config(text=f'已选择文件:{self.filename}')
    
                image = Image.open(self.filename)
                image = image.resize((200, 200))
                photo = ImageTk.PhotoImage(image)
    
                self.image_label.config(image=photo)
                self.image_label.image = photo
    
        def convert(self):
            if not hasattr(self, 'filename'):
                messagebox.showerror('错误', '请先选择图片文件')
                return
    
            with open(self.filename, 'rb') as f:
                data = f.read()
                base64_data = base64.b64encode(data)
                base64_str = base64_data.decode('utf-8')
                file_name_with_ext = os.path.basename(self.filename)
                file_name_without_ext, file_extension = os.path.splitext(file_name_with_ext)
                file_extension = file_extension[1:]
                final_str='[' + file_name_without_ext + ']:data:image/' + file_extension + ';base64,' + base64_str
                pyperclip.copy(final_str)
                # messagebox.showinfo('提示', '已复制Base64编码到剪贴板')
                self.label.config(text=f'已复制')
    
    root = Tk()
    app = App(root)
    root.mainloop()
  • 为了美观再做一点改动

    插入的这一长串字符串会把整个文章分割开,非常影响编写文章时的体验。

    如果能够把大段的base64字符串放在文章末尾,然后在文章中通过一个id来调用,文章就不会被分割的这么乱了。

    在要引用图片的地方这么写 ![][str1]

    这个 str1 是一个你自己指定的字符串,可以理解成是一个变量,用来寻找这个图片对应的base64字符串。

    在文章的末尾写 [str1]:data:image/这里写图片的格式如png;base64,这里写图片转出来的base64串 就可以了。

    测试

查看手册

如:git help log或者git log --help

创建仓库的两种方式

  1. 本地初始化

    cd到目标文件夹下,执行git init

    跟远程建立连接git remote add <name> <url>name一般是取origin。

  2. 克隆远程仓库到本地

    git clone <url>

git clone默认会把远程仓库整个给clone下来,
但只会在本地默认创建一个master分支,
如果远程还有其他的分支,此时用git branch -a查看所有分支。
可以用git checkout -t origin/<branch_name>来拉取某个分支。

查看仓库状态

git status

Untracked files指未受控的文件。

Changes to be committed指受控文件发生了改变,还没commit。

添加文件到暂存区

git add

git add FileNameadd文件。

git add FolderName/add文件夹。

提交

git commit -m "add readme.txt"

提交修改分为两步,先把修改的文件add到暂存区,然后commit到仓库。如果有远程仓库的话,还要push到远程仓库。

查看提交记录

git log要输入一个q才能退出log的状态。

git log --pretty=oneline单行显示,简写git log --oneline

git log -p a.txt查看a.txt的log。

git log --author=Tom查看提交人Tom的提交记录。

撤销修改

git checkout readme.txt

checkout是指还没有commit的修改想要撤销掉。而如果commit了的修改想要撤销就要用reset了。

checkout某个文件是让那个文件回到仓库里HEAD的状态。

如果是用惯了svn的同学可能会想着先把那个文件删掉,再从仓库里拉取最新代码就行。在git里是不适用的哦。

回退版本

git reset --hard HEAD^回退到上个版本。

git reset --hard HEAD~n回退到前n次提交之前。

git reset --hard commit_id退到/进到 指定commit的sha码。

推送本地修改到远程仓库

git push,某些情况下你需要指定远程仓库的名字和分支,如git push origin master

拉取远程的最新代码

git pull

拉取特定分支的代码

git branch -a 可列出所有分支,包括远程的。现假设远程有一个叫 dev 的分支。

  1. 直接克隆某个分支

    git clone -b dev 仓库地址

  2. 先克隆了主分支,在拉取其他分支

    git checkout -b dev1 origin/dev

    注:dev1 的这个名字你可以随便改。

配置账户

git config --system --list

git config --global --list

git config --local --list

git config --local user.name "xxx"

git config --local user.email "xxx"

git clean

删除未受控的文件:git clean -f

删除未受控的文件和目录:git clean -fd

查看将要删除哪些文件:git clean -nf

查看将要删除哪些文件和目录:git clean -nfd

公钥管理

ssh-keygen -t rsa -C "yourEmail@xxx.com"

然后会让你选择存放路径和输入密码,可以直接按回车。

然后就会生成两个文件,一个id_rsa,一个id_rsa.pub。

拷贝id_rsa.pub里面的内容,粘贴到github或者gitee里。

添加成功后,输入ssh -T git@gitee.com来测试是否可以正常连接。

rebase配合merge使用

多人协作的话需要分支,分支上开发一个功能完成后需要合并到主干上,但是主干上不想要多余的提交记录。此时,可以使用变基。过程大概是这个样子。
git branch dev
git switch dev
//modify sth
git commit -m ‘dev 1’
//modify sth
git commit -m ‘dev 2’
git rebase -i startpoint endpoint//不写endpoint的话就是HEAD
//select pick reword fixup and so on
git switch master
git merge dev

  • 祖逖
    东晋时期杰出的军事家。
    北伐。
    闻鸡起舞。

  • 桓温
    东晋时期军事家、政治家、权臣。
    晋明帝司马绍女婿(司马绍父司马睿)。
    一个人若不能流芳百世,那就应该遗臭万年。

  • 谢安
    东晋时期政治家、名士。
    东山再起。

    隐居于会稽郡山阴县之东山。
    永和九年,岁在癸丑,暮春之初,会于会稽山阴之兰亭。
    常和王羲之等游山玩水。

简介

朱由检,明朝第十六位皇帝。登基时宦官专权(魏忠贤)。

他前面的皇帝

  • 万历皇帝是他的祖父,嗜酒好色。
  • 朱常洛是他的父亲,吃错了泻药,在位一个月就死了。
  • 天启皇帝朱由校是他同父异母的哥哥。喜欢木工。落水生病后吃错药死了,在位七年。

谥号:有地位的人(皇帝、诸侯、文人等)死后别人给取的,评价生平。褒贬都有。拓跋宏的谥号是孝文皇帝,常称他为北魏孝文帝。
庙号:皇帝死后,太庙供奉的称号。唐朝到元朝的皇帝多称庙号。如李世民的庙号是太宗,常称他为唐太宗。
年号:纪年用的。明清两朝皇帝多称年号。如爱新觉罗·玄烨的年号是康熙,常称他为康熙帝。
尊号:活着的时候别人给起的尊称。

最早的是年号是汉武帝的“建元”,最后的年号是溥仪的“宣统”。
年号最多的是武则天,用了17个。
年号用的最久的是康熙,用了61年。
年号最短的是金末帝的“盛昌”,用了一天。

注:写给自己看的,所以写得比较简单。

远程准备工作

注册 GitHub(或者 Gitee)账号,建立远程仓库,格式是 xxx/xxx.github.io。

生成 SSH 公钥,添加公钥,测试连接

本地准备工作-配置环境

  1. 安装 Git,检查 Git 环境 git --version

  2. 安装 Node.js,检查 Node.js 环境 node -v

    注:npm 是 Node.js 的包管理工具,在安装 Node.js 时就已经包含了 npm 工具。

    检查 npm 版本 npm -v。更新 npm 版本 npm install npm@latest -g

  3. 安装 Hexo npm install -g hexo-cli

    注:Hexo 是用 Node.js 编写的一个模块,可以通过 npm 来安装。

本地准备工作-初始化博客目录

  1. 新建文件夹,执行 hexo init(Mac 系统下是 npx hexo init)来初始化该目录 。

  2. 执行完 hexo init 后,可以选择执行 npm install

本地准备工作-安装插件

  1. 安装主题插件NexT

    npm install hexo-theme-next

    其他比较推荐的主题有:Oranges、Chic、3-hexo、Cactus-white、yinwang。

  2. 安装部署插件

    npm install hexo-deployer-git
  3. 安装盘古插件

    npm install pangu
  4. 安装加密插件

    npm install hexo-blog-encrypt
  5. 安装懒加载图片插件

    npm install hexo-lazyload-image

    注:npm 安装模块时,跟了 -g 的就是全局安装,没跟就是本地安装。跟了 --save 的会被写入到生产环境里。

    注:可以通过 npm list(项目级别) 和 npm list -g(全局) 来查看模块到安装信息。

本地准备工作-拷贝旧文章并添加版本控制

  1. 初始化成Git仓库

    git init
  2. 关联远程仓库

    git remote add origin 仓库地址
  3. 删除source文件夹、.gitignore文件和_config.yml文件。避免下一步拉取起冲突。

  4. 拉取

    git pull origin master

开始使用

  1. 生成:hexo g

  2. 本地预览:hexo s

    注:如果启动服务后,无法通过Ctrl+C来终止服务,可以试试输入taskkill /F /IM node.exe

  3. 发布到线上:hexo d

  4. 清理缓存:hexo clean

如何让终端使用代理

  1. MacOS 在终端里输入:

    export all_proxy=socks5://127.0.0.1:1081
  2. Windows 在命令提示符里输入:

    set all_proxy=socks5://127.0.0.1:1081

如何测试终端是否有使用代理

输入 curl www.google.com

如果返回类似 curl: (7) Failed to connect to www.google.com port 80: Timed out 说明没有走代理。

如果返回一个以 <!doctype html> 开头的 html 源码的话,说明有走代理。

说明

  1. 上边例子的 Socks5 端口是 1081,不是固定的,根据你所使用的代理软件来设置。

  2. all_proxy 就表示 http 和 https 的合集,你也可以分开来指定。

0%