在 Neovim 里面使用 vim-fugitive 的工作流

最近在使用 Git + Neovim 的时候,发现我的工作流还是有一些不那么顺畅的地方。我习惯性退出 Neovim,然后在命令行写 Git 相关的命令,并且在提交代码变更前我习惯用 delta 查看 diff 信息。为了减少要打的字符,我还开启了 Oh My Zshgit 插件,这样我就可以用一堆缩写了,比如 ga = git addgcmsg = git commit -m

Tree-sitter 以及它的 Query 功能

Tree-sitter 是一个 Parse Generator,也就是用来生成 Parser 的。除此之外,它还提供了一些额外的功能,比如今天要聊到的 Tree-sitter Query ,Query 提供了一套基于 S 表达式的 DSL(Domain Specific Language),可以查询 AST,获得你想要的信息,在正式学习如何使用 Query 前,我们先讲一些相关的背景知识,好让这个文章尽量是 Self-contained 的

@dataclass 简明教程(Python3.7)

Python 的 tuple 很好用,它可以让我们快速地将不同类型的值封装在一起,作为一个整体进行管理,自带的排序规则也十分直观,简单易用。但实际用下来我发现,一旦 tuple 的字段比较多,我就被迫要自己写一下注释注明一下不同位置的字段的具体含义是啥,比如

使用 GitHub Actions 自动化 Hugo 博客部署

最近在学习 GitHub Actions,GitHub Actions 是 GitHub 提供的一个特性,可以用来自动化执行一些步骤。在软件开发中,最常见的需要自动化的场景可能就是构建了。对于编译型的编程语言(比如 C/C++)编写的软件,通常需要编写对应的构建的脚本,软件构建的过程涉及到:环境准备、依赖下载、启动构建等。不过,利用 GitHub Actions 来自动化软件构建过程并不是本文的主题。在我思考我可以将 GitHub Actions 用于何处的时候,我想到了:利用 GitHub Actions 来自动化 Hugo 博客的部署。因为 Hugo 博客的部署也涉及到不少一系列固定的步骤 :)

学习使用 Vim&Neovim 的 text-object

你可能不知道什么是 text-object,但我相信你可能已经在使用了只是你自己没有意识到。比如,在写代码的时候,我们经常想要修改函数调用的入参。比如我们在下面这段代码中,想要修改成 bar(3, 2, 1),而你的光标停留在 () 里面