盒子
盒子
文章目录
  1. Nim编程早茶
    1. 配置文件
    2. 脚本文件

如何用好 Nimscript

Nim编程早茶

NimScript是Nim语言的子集,可以通过Nim的内置虚拟机(VM)解释执行。虚拟机可以使用Nim语言编译时执行的功能。

https://tea.nim-cn.com/archives/

配置文件

NimScript 可以承担配置文件的功能。NimScript 文件后缀为 nims
但我们使用 nim c -r example.nim 执行 nim 程序时,就会提示我们使用了哪些配置文件,在我的 win10 上显示如下

1
used config file 'D:\nim\config\nim.cfg'

如果在当前路径下,我们创建一个 example.nims,那么提示就会多一行

1
used config file 'C:\Users\blue\Documents\test.nims'

首先我们可以设置编译的标志:

1
2
3
4
5
6
# command-line: --opt:speed
switch("opt", "speed")
# command-line: --hint:off
switch("hints", "off)
# command-line: --forceBuild
switch("forceBuild")

NimScript 还定义了 -- 作为 switch 的语法糖,所以说,以上的代码等价于

1
2
3
--opt:speed
--hints:off
--forceBuild

我们执行 nim c -r example.nim,会发现提示大部分都消失了。

脚本文件

使用 NimScript ,我们可以轻松构建跨平台的脚本文件。下面我主要介绍,NimScriptubuntu 系统中的使用。

exec 函数可以执行 shell 命令,下面的指令用于查找进程中 hexo 程序,并强制结束程序。执行 nims 程序,只要 nim example.nims ,也可以加上自定义的参数。

1
2
3
4
try:
exec "kill -s 9 `ps -e|grep hexo|awk '{print $1}'`"
except OSError:
discard

下面是我写的用于生成 hexo 博客,以及向百度爬虫推送连接的脚本文件。

其中 withDir,用于短暂的切换到某个目录,当离开 withDir 就会还原原来的目录。paramCount 用来获取命令行参数个数,paramStr 获取具体参数。readLineFromStdin() 使得我们可以从命令行读取输入。

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
import os except paramCount, paramStr

let
website = "https://tea.nim-cn.com/"
sitemap = "/root/blog/public"
dir = "/root/blog"

withDir dir:
if paramCount() == 3:
discard
elif paramCount() == 2 and (paramStr(2) == "back" or paramStr(2) == "b"):
exec "hexo g"
exec "hexo s &"
elif paramCount() == 2 and (paramStr(2) == "commit"):
echo "输入你的网址: "
let site = readLineFromStdin()
exec "echo '" & site & "' >" & dir / "urls.txt"
let file = splitFile(site)
if file.ext == ".html":
exec """curl -H 'Content-Type:text/plain' --data-binary @urls.txt "你的 baidu api"
exec """curl -H 'Content-Type:text/plain' --data-binary @urls.txt "你的 baidu api
exec "hexo g"
exec "hexo s &"
else:
exec "hexo g"
try:
exec "hexo s"
except OSError:
echo "bye-bye"