说说原因

我已经换过无数次的博客主题了。反反复复还是觉得hugo才是最快最具go范儿的,所以又换回来了。下面把搭建步骤记录一下。

步骤

刚开始安装的步骤

brew install hugo
# 或者更新brew upgrade hugo

# 创建站点
hugo new site blog

cd blog
git clone https://github.com/rujews/maupassant-hugo themes/maupassant

# 然后按github上面的做修改 config.yml

# 最后启动:
# -D, --buildDrafts            include content marked as draft
hugo server -D

修改的内容: 在theme的staic/css/prims.css里面修改字体与字体大小:

/* font-family: Monaco, Consolas, 'Andale Mono', 'Ubuntu Mono', monospace; */
font-family: Menlo,Monaco,Consolas,"Andale Mono","lucida console","Courier New",monospace;
/* font-size: 1em; */

自建迁移工具

我之前的markdown文件Front Matter格式不一样。而且我的习惯是md文件名称是什么,那么title就是什么,并没有按年月日这种反人类的格式来。另外还有一个字段很重要就是slug(偷懶)这个字段标识了文件的路径。很重要。

所以我用go写了一个迁移工具。大概的内容是这样:

  1. 并文件名称放到md的title里面
  2. 将以前错误的category修改了categories格式

go工具的代码如下:

package main

import (
	"flag"
	"fmt"
	"io/ioutil"
	"os"
	"path/filepath"
	"regexp"
	"strings"
)

var (
	dirPath string
)

func init() {
	// 处理的目录 -p 参数 如果不加则默认处理当前目录
	flag.StringVar(&dirPath, "p", ".", "dir path")
}

func main() {
	// 读取json配置文件
	flag.Parse()
	fmt.Println("will to direcotry:", dirPath)

	// 替换目录下面的内容
	work(dirPath)
}

func work(dir string) {
	// 遍历目录 读取每一个文件
	filepath.Walk(dir, walkFunc)
}

func walkFunc(path string, info os.FileInfo, err error) error {
	var (
		ok bool
		content []byte
		pat string
		reg *regexp.Regexp
		fileName string
		reWriteFlg bool
	)
	// 如果不是.md结尾的文件则不进行处理
	if ok = strings.HasSuffix(info.Name(), ".md"); !ok {
		return nil
	}

	fileName = strings.SplitN(info.Name(), ".md", -1)[0]
	if fileName == "" {
		return nil
	}

	if content, err = ioutil.ReadFile(path); err != nil {
		return err
	}

	// 处理title:
	// 将文件名称替换为title
	// 如果原先有title则不处理
	pat = `title:\s+(.*)\n`
	reg = regexp.MustCompile(pat)
	if ok = reg.Match(content); !ok {
		// 找不到title 则在slug前面增加title:文件名称
		pat = `slug:.*\n`
		reg = regexp.MustCompile(pat)
		content = reg.ReplaceAll(content, []byte("title: \""+fileName+"\"\n$0"))
		reWriteFlg = true
	}

	// 处理category的格式错误
	// category: "go" 改为:
	// categories:
	// - go
	// - VIM
	pat = `category:\s+"(.*)"\n`
	reg = regexp.MustCompile(pat)
	if ok = reg.Match(content); ok {
		// 找到category内容
		content = reg.ReplaceAll(content, []byte("categories:\n    - $1\n"))
		reWriteFlg = true
	}

	if reWriteFlg {
		fmt.Println("已处理文件:", info.Name())
		return ioutil.WriteFile(path, content, info.Mode().Perm())
	}

	return nil
}

插入图片

将图片放static/images/目录下,比如xxx.jpg

![图片说明](/images/xxx.jpg)

新模板

如果新建立md博文的话,利用t.md的新格式即可:

---
title: etcd 有关的内容 这只是一个示例 内容随便写
slug: spf13-vim-3-0-release-and-new-website
date: "2019-03-13"
description: ectd 用于分布式系统服务的 and ...  for Vim. 还可以多行写
categories:
- go
tags:
- go
- etcd
---

## 概念

## 参考文献
- [切片的本质](https://blog.go-zh.org/go-slices-usage-and-internals)
- [数组和切片](http://www.cnblogs.com/hustcat/p/4002707.html)
- [slice](http://blog.wuxu92.com/array-and-slice-in-golang/)
- [go array](https://golang.org/doc/effective_go.html#arrays)
- [slices](https://gobyexample.com/slices)
- [array and slice](https://golang.org/doc/effective_go.html#arrays)

prismjs支持的语言标签

常用的支持的语言有:

go,js,python,makefile,markdown,toml,docker,dockerfile,yaml,bash,shell

内容摘要

Hugo会自动提取文章的前70个字符作为摘要。(注意:该功能在中文环境下需要在config.toml中添加hasCJKLanguage = true才能发挥更好的效果。)

当然你也可以在文章内使用<!--more-->针对文章手动进行摘要提取,在<!--more-->之前出现的内容都会作为摘要使用,且能够保持渲染后的结构而不是纯文字版本。

增加section

增加了一个travel的目录

layouts/index.html复制到layouts/travel/list.html目录。将layouts/_default/single.html复制到layouts/travel/single.html

并且修改layouts/_default/taxonomy.html之中的目录,将travel增加进行,这样就有分类的显示了。例如下面的修改:

{{ range $index,$data := (where .Paginator.Pages "Type" "in" (slice "post" "posts" "travel")) }}

参考文献