根据当前日期的年月日生成语义化的版本号

如果今天是2022年5月2日,那么希望生成22.5.2这种版本号,并且包装成一个package.json中的script命令。

首先要生成日期的年份:

1
2
echo $(date +"%Y")
" 2022

为了截取日期年份字符串的后两位,我们用到cut命令,第一个字符的序号是1

1
2
echo $(cut -c 3-4 <<< $(date +"%Y"))
" 22

然后是获取当前日期的月份

1
2
echo $(date +"%m")
" 05

为了成为版本号,需要将前置的0去掉,这里用sed来做一个正则表达式替换:

1
2
echo $(date +"%m") | sed "s/^0*//"
" 5

最后是获取日期是第几天,当然也需要把前置0去掉:

1
2
echo $(date +"%d") | sed "s/^0*//"
" 2

组合起来,需要将"转换成\",最后的结果就是22.5.2

1
2
3
"scripts": {
"version:date": "npm version $(cut -c 3-4 <<< $(date +\"%Y\")).$(echo $(date +\"%m\") | sed \"s/^0*//\").$(echo $(date +\"%d\") | sed \"s/^0*//\")"
},

References

在Neovim中配置markdown书写环境

安装服务端

1
npm install -g remark-language-server

配置客户端

增加一个配置文件lua/servers/remark_ls.lua

1
require 'lspconfig'.remark_ls.setup {}

init.lua中增加引用

1
require('servers.remark_ls')

项目配置文件

在每一个项目中,都要增加对应的一个配置

1
npm install remark-preset-lint-markdown-style-guide

并且在根目录增加一个.remarkrc.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"plugins": [
"remark-preset-lint-markdown-style-guide",
["remark-lint-list-item-indent", "space"],
["remark-lint-unordered-list-marker-style", "*"],
["remark-lint-heading-style", false],
["remark-lint-maximum-line-length", false],
["remark-lint-maximum-heading-length", false],
["remark-lint-fenced-code-marker", "consistent"]
],
"settings": {
"rule": "-",
"ruleRepetition": 3,
"listItemIndent": 1,
"bullet": "*"
}
}

References

如何修改Lua Language Server运行时的根目录

打开lua文件的时候,提示了一个错误,大意就是工作目录被设置到了用户根目录,Lua LS拒绝加载此目录,让用户检查配置,还给出了官网的说明页面

nvim-lspconfig的配置页面,找到了summeko_lua的默认配置:

1
root_pattern(".luarc.json", ".luacheckrc", ".stylua.toml", "selene.toml", ".git")

我在项目目录确实使用了ln -s,前面几个没有匹配到,但原则上应该可以匹配到.git,既然没有匹配到,让我们收到修改为根据package.json来匹配根目录:

1
root_dir = root_pattern("package.json"),

这里使用了root_pattern函数,记得要引用进来

1
local root_pattern = require('lspconfig.util').root_pattern

References

在Neovim中配置Lua开发环境

安装LSP服务端:

1
brew install lua-language-server

创建一个配置目录:

1
mkdir -p lua/lspconfig/sumneko_lua && cd $_

创建init.lua配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
require 'lspconfig'.sumneko_lua.setup {
cmd = { "lua-language-server", "--locale=zh-CN" },
settings = {
Lua = {
format = {
defaultConfig = {
indent_style = "space",
indent_size = "2",
tab_width = "2",
continuation_indent_size = "2"
}
},
diagnostics = {
globals = { "vim" }
}
}
}
}

init.lua增加配置文件的引用:

1
require('lspconfig.sumneko_lua')

References

用packer.nvim来管理Neovim的插件

第一步是安装

1
2
git clone --depth 1 https://github.com/wbthomason/packer.nvim \
~/.local/share/nvim/site/pack/packer/start/packer.nvim

然后在Neovim配置目录,创建lua子目录,并且增加一个plugins.lua

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
local fn = vim.fn
local install_path = fn.stdpath('data') .. '/site/pack/packer/start/packer.nvim'
local packer_compiled_path = fn.stdpath('config') .. '/plugin/packer_compiled.lua'

local is_directory_exists = function(dir)
return fn.empty(fn.glob(dir)) == 0
end

local file_exists = function(name)
local file = io.open(name, "r")
if file ~= nil then
io.close(file)
return true
else
return false
end
end

local packer_startup = function(use)
use "wbthomason/packer.nvim"
use 'neovim/nvim-lspconfig'

if not file_exists(packer_compiled_path) then
require('packer').sync()
end
end

if not is_directory_exists(install_path) then
print('Installing packer plugin...')
fn.system({ 'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path })
print('All done, please restart Neovim.')
do return end
end

local require_packer_succeed, packer = pcall(require, "packer")
if require_packer_succeed then
return packer.startup(packer_startup)
end

最后在init.lua中增加引用:

1
require('plugins')

References

如何在Lua中处理require依赖不存在的问题

如果像下面这样引入packer,并且packer还没有安装,那是会报错的

1
local packer = require('packer')

这时可以借助pcall函数,这样就可以区分是否require成功了,返回结果有两个值,第一个是Boolean,后面一个如果成功返回对象,如果失败返回nil

1
2
3
4
5
local require_packer_succeed, packer = pcall(require, "packer")

if require_packer_succeed then
return packer.startup(packer_startup)
end

References