如何用好 Nimscript

345 阅读2分钟

Nim编程早茶

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

配置文件

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

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

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

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

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

# command-line: --opt:speed
switch("opt", "speed")
# command-line: --hint:off
switch("hints", "off)
# command-line: --forceBuild
switch("forceBuild")

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

--opt:speed
--hints:off
--forceBuild

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

脚本文件

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

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

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

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

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

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"