nim的IDE指南

IDE工具的安裝

雖然nim語言的語法簡介明快,各種特性也很強大号杠。但是如果沒有一個強大的IDE工具蚪腋,估計也會累得要死。比如筆者一開始就上手的時候就傻乎乎的在vim里面敲代碼姨蟋。問題是屉凯,nim語言不像其他語言是基于類開發(fā)的,很多方法沒有綁定到對象上芬探,要使用對應的方法神得,要先import對應的lib厘惦,對lib不熟悉偷仿,也沒有自動補全的情況下,只能靠文檔去看宵蕉。就算是inim酝静,目前也沒有自動補全和自動提示的功能。

所以官方在項目wiki里就提供了IDE工具的指引羡玛。

官方原來首推的工具是Aporia别智。但是這個項目在2018年就開始逐漸被遺棄,而且也不支持windows稼稿,后面官方強烈推薦全部轉到了vscode上薄榛。

首先安裝vscode,筆者由于之前只用pycharm和idea让歼,也是第一次用vscode敞恋。。谋右。

安裝完后需要安裝對應的插件硬猫。打開vscode。按Ctrl+P,在命令框里輸入:

ext install kosz78.nim

等待安裝完成就可以啸蜜,這里也可以點擊左側菜單欄的extensions按鈕坑雅,查看安裝情況。

官方也推薦了其他的輔助工具:

ext install oderwat.indent-rainbow
ext install mattn.Runner
ext install webfreak.debug
ext install vscodevim.vim

oderwat.indent-rainbow是輔助顯示縮進的工具衬横,作為唯二的縮進語言裹粤,這個功能很好很強大; mattn.Runner用于執(zhí)行代碼里的腳本片段; webfreak.debug用來debug代碼; vscodevim.vim是筆者自己的喜好。

安裝完成后重啟vscode蜂林。

nim項目的創(chuàng)建

雖然在VSCODE里安裝了nim插件蛹尝,但是要像模像樣的創(chuàng)建一個nim項目,筆者也沒找到方法悉尾。最后只能借助nimble來實現(xiàn)突那。有人會問:什么?nimble不就是一個包管理工具么构眯?的確愕难,nimble除了支持安裝卸載包,也支持創(chuàng)建并發(fā)布包惫霸。

首先創(chuàng)建一個空文件夾猫缭,比如說nimLearn,在命令行里運行:

cd nimLearn
nimble init

然后會有三個選項:library, binary, hybrid壹店。這里按tab鍵選擇binary猜丹。然后輸入版本號,package描述硅卢,開放協(xié)議射窒,后端語言和nim語言半本。我這里一路按Enter将塑。

整個項目的結構如下:

.
├── nimLearn.nimble
└── src
    └── nimLearn.nim

項目會自動生成一個后綴為nimble的文件脉顿,一個src文件夾,里面包含了一個同名的nim文件点寥。

nimLearn.nim自動生成的內容很簡單艾疟,就是一個hello world:

# This is just an example to get you started. A typical binary package
# uses this file as the main entry point of the application.

when isMainModule:
  echo("Hello, World!")

然后我們看一下nimLearn.nimble文件:

# Package

version       = "0.1.0"
author        = "howardyan93"
description   = "A new awesome nimble package"
license       = "MIT"
srcDir        = "src"
bin           = @["nimLearn"]



# Dependencies

requires "nim >= 1.0.2"

其中的信息大部分信息就是我們init項目時候填入的信息。這里要注意bin的配置敢辩,里面指定了編譯生成binary的名稱蔽莱。nimble在build的時候會根據(jù)srcDir去尋找同名的代碼文件,然后生成對應的binary戚长。

這個時候運行:

nimble build

文件夾下就會生成一個nimLearn的可執(zhí)行文件盗冷。

然后運行這個可執(zhí)行文件:

nimble run nimLearn

當然也可以直接運行:

./nimLearn

但是會少顯示一些額外的信息。

創(chuàng)建完項目后历葛,直接用vscode打開文件夾正塌,就可以對代碼進行編輯嘀略。這個時候自動提示和代碼高亮等等功能都開啟了,寫起來會舒服很多乓诽。

實際使用nim插件的過程中帜羊,還是會發(fā)現(xiàn)有很多不盡如人意的地方。比如要查看某個函數(shù)的定義鸠天。直接點擊Go to Definition有時候沒啥響應讼育。只有先點擊Find All References,再點擊Go to Definition才能跳轉到函數(shù)定義稠集。nim默認就引入的包奶段,有時候也沒有高亮的效果。只能指望插件作者以后改善了剥纷。

DEBUG代碼的方法

官網文章里介紹了DEBUG的三種方法:

  • 用echo打印出來
  • 用writeStackTrace
  • 用GDB/LLDB

前面兩種方法無需多言痹籍。第三種方法如果在命令行里搞,除非是高手晦鞋,否則也會覺得蛋疼無比(反正筆者已經習慣了pyCharm和Idea里直接debug的方便了蹲缠。。)悠垛。論壇里也有人請教nim插件作者是否支持debug功能线定,回答是肯定的。

我們給代碼多添加點內容:

import strutils
import strformat

when isMainModule:
    let myName = " howardyan93 "
    let pureName = myName.strip()
    var counter = 0
    while counter < 100:
        inc(counter)
        echo $counter
    echo(fmt"Hello, {pureName}!")

編譯時添加額外的選項:

nimble build --debuginfo --linedir:on

當然也可以用:

nimble build --debugger:native

兩者功能都一樣确买,區(qū)別在與后者是新最新版nim才有的功能斤讥。

在vscode里點擊左邊的debug按鈕,這個時候顯示沒有配置文件湾趾,選擇add configuration芭商,默認選擇GDB。這個時候會在.vscode文件夾生成一個launch.json的文件撑帖。

打開launch.json文件蓉坎。內容如下:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Debug",
            "type": "gdb",
            "request": "launch",
            "target": "./bin/executable",
            "cwd": "${workspaceRoot}",
            "valuesFormatting": "parseText"
        }
    ]
}

這里要把target修改為剛才生成了nimLearn可執(zhí)行文件:

"target": "./nimLearn",

在代碼里添加斷點,然后點擊Start Debugging胡嘿。

這個時候就可以對代碼進行debug了,debug操作跟debug其他語言差別不大钳踊。困難的是由于后端都是c衷敌,所以茫茫多的各種地址,看得頭疼拓瞪。我覺得我還是用前面兩種方法比較好缴罗。gdb什么的,臣妾做不到啊祭埂。

后記

vscode的特色在于通過各種tasks來實現(xiàn)操作的自動化面氓。

在終端菜單里點擊Run Build Task, 這個時候會顯示沒有tasks文件兵钮,是否要創(chuàng)建一個,選擇others舌界,一路確定掘譬,就會在.vscode里生成一個tasks.json:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "echo",
            "type": "shell",
            "command": "echo Hello"
        }
    ]
}

這個時候,我們可以修改為一個編譯debug文件的task:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build debug nim c",
            "type": "shell",
            "command": "nimble",
            "args": [
                "build",
                "--debugger:native",
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "reveal": "silent"
            },
            "problemMatcher": "$msCompile"
        }
    ]
}

保存后刪除原來的nimLearn可執(zhí)行文件呻拌,然后在終端菜單里點擊Run Task葱轩。之后會有一個菜單讓你選擇要運行的命令。由于我們只配置了一個task藐握,所有會顯示label為build debug nim c的選項靴拱,直接點擊,就可以看到新生成的可執(zhí)行文件猾普。

結合vscode的task,很多操作就無需在命令行里進行了初家。但是nimble本身也支持task妇蛀,同樣的功能也能通過編輯nimLearn.nimble來實現(xiàn):

task GenerateDebugCode, "Compile debug file":
    exec "nimble build --debugger:native"

在命令行里運行:

nimble tasks

就會顯示出自定義的task以及描述笤成。

然后運行:

nimble GenerateDebugCode

就能生成同樣的debug可執(zhí)行文件。

雖然vscode的task很好很強大炕泳。但是筆者更喜歡使用nimble的task纵诞,因為task的語法就是nim語法(這讓我想到了kotlin和gradle)培遵,寫起來也很簡單,配和一些語句可以實現(xiàn)很多666的玩法籽腕。當然兩者搭配起來用也沒啥問題嗡呼。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末皇耗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子郎楼,更是在濱河造成了極大的恐慌万伤,老刑警劉巖呜袁,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件敌买,死亡現(xiàn)場離奇詭異,居然都是意外死亡阶界,警方通過查閱死者的電腦和手機虹钮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門聋庵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人芙粱,你說我怎么就攤上這事祭玉。” “怎么了宅倒?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵攘宙,是天一觀的道長。 經常有香客問我拐迁,道長蹭劈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任线召,我火速辦了婚禮铺韧,結果婚禮上,老公的妹妹穿的比我還像新娘缓淹。我一直安慰自己哈打,他們只是感情好,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布讯壶。 她就那樣靜靜地躺著料仗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪伏蚊。 梳的紋絲不亂的頭發(fā)上立轧,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天,我揣著相機與錄音躏吊,去河邊找鬼氛改。 笑死,一個胖子當著我的面吹牛比伏,可吹牛的內容都是我干的胜卤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼赁项,長吁一口氣:“原來是場噩夢啊……” “哼葛躏!你這毒婦竟也來了?” 一聲冷哼從身側響起肤舞,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤紫新,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后李剖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡囤耳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年篙顺,在試婚紗的時候發(fā)現(xiàn)自己被綠了偶芍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡德玫,死狀恐怖匪蟀,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情宰僧,我是刑警寧澤材彪,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站段化,受9級特大地震影響,放射性物質發(fā)生泄漏显熏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一喘蟆、第九天 我趴在偏房一處隱蔽的房頂上張望鼓鲁。 院中可真熱鬧,春花似錦骇吭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碾局。三九已至,卻和暖如春净当,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背像啼。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留真朗,地道東北人。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓遮婶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親旗扑。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355