最近開始學習erlang,一方面出於對其主要語言特徵(高併發)的興趣,另一方面,當前專案的壓力測試希望用tsung(
),但是配起來後,發現儲存檔案的時候有時候不會自動編譯,然後執行一次程式會開乙個新的erlang互動程序,總覺得不太舒服,就放棄了。然後,對vim也挺有興趣的,就開始配置使用vimerl(
為了方便,直接下了個window版的vim,裝好後安裝vim-pathogen(方便管理vim外掛程式的工具,
),按vim-pathogen的說明,在vimfiles(windows下)目錄下新建了個bundle目錄,然後git clone 新建個簡單的erlang檔案,修改,儲存...
呃… windows下的cmd視窗一閃而過,也不知道發生什麼事情,也不太了解vim的外掛程式工作機制,可一有點是好的,就是有vimerl的源**,然後就開始苦逼的開始研究它的**,經過各種除錯(對乙個從沒接觸vim指令碼,也沒寫過erlang程式的苦逼程式設計師來說,這個時間稍微有點長),最後問題定位在儲存檔案後,呼叫外部程式來編譯erlang檔案的命令上,源**如下(vimerl\compiler\erlang.vim):
[1] execute "setlocal makeprg=" . s:erlang_check_file . "\\ \%"
其中s:erlang_check_file=
vimerl\compiler\erlang_check.erl,看了下這個檔案的內容:呼叫erlang的compile:file來編譯乙個erlang源**檔案,並返回編譯結果。上面那條命令的主要作用ms就是想呼叫erlang的編譯器來編譯當前的檔案,並把結果反饋回vim,但是沒有成功。但是,在上條命令的上面有一條類似的命令:
[2] setlocal makeprg=escript\ -s\ %(%代表當前檔案)
先不管其它的,看看這個escript程式是幹什麼的,google後了解到,這個程式提供的功能跟linux下的bash一樣,可以執行乙個標記為erlang script(通過#!/usr/bin/env escript來實現,具體可檢視vimerl\compiler\erlang_check.erl)的檔案。那麼命令[1]的目的就是想通過escript程式來執行erlang_check.erl來編譯程式,但在windows下呼叫沒有成功(在linux下,這個應該不會是問題),問題查明後,修改也就很簡單了:
[3] execute "setlocal makeprg=" . "escript.exe\\ " . s:erlang_check_file . "\\ \%"
修改後,再儲存,有編譯錯誤時,可正確在vim的狀態列提示,ok。
vimerl\autoload\erlang_complete.vim。window下當然沒有grep程式,不過還好有個window下的開源grep實現(
),安裝後,再按上面的思路修改erlang_complete.vim相關實現(**見後面說明),再試,終於ok。
功能是好了,不過進行自動補全時,對同乙個模組,如果重新開啟乙個erlang原始檔,vimerl會重新進行匹配,在linux下問題可能不是很大,但在windows下,那個cmd視窗每次就不停的彈出,一般乙個模組有多少個函式就彈多少次(linux下沒有這個問題,在cmd命令下使用vim也不會有這個問題),多少讓人有點煩惱;而且每次開啟乙個新檔案,都重新查詢同乙個模組的匹配,從速度上來說,也無法忍受。要加快速度,最簡單的辦法就是加快取:乙個模組在第一次匹配後,將匹配結果快取到磁碟,並且在開啟乙個erlang原始檔時,從磁碟載入快取的匹配結果,這樣,在下一次匹配同乙個模組時,就直接從快取裡匹配。
加快匹配速度後,還有乙個問題,就是在沒有erlang模組名做字首的情況下,vimerl會嘗試從當前模組,或者同一目錄下的其它模組匹配函式名(本地函式)。用過eclipse的同學都知道,這時候,我可能想輸入的並不是當前模組(或者同一目錄下的其它模組內)的函式名,可能想輸入乙個內建函式名(erlang的bifs)或者也有可能只是想輸入乙個模組名。
有了這些想法就著手實現,快取放在vimerl\autoload\ erlang_index中,每一行對應乙個模組中的函式列表:模組名為鍵,函式列表為值。在儲存乙個erlang原始檔編譯時,會先載入快取,然後從快取中匹配。在載入快取時,會自動生成乙個以module為鍵,所有已快取的模組名列表為值的物件,在進行本地函式名(不帶模組名的形式)匹配時,先按照預設的方式匹配,再匹配模組名,然後再匹配bifs,最後將三者的結果都加入到匹配結果列表中。
ps:有了這些功能後,編輯小的erlang程式應該夠了,但是如果要管理乙個稍微有點規模的工程,可能就有點不太方便,後續可能會實現這方面的功能。
Windows下的Apache Tomcat連線
win32 apache2.0.49.zip,在壓縮包中的modules可找到mod jk2.so 將mod jk2.so拷到以下兩個目錄 tomcat home conf apache home modules 將apache home conf 下的httpd.conf作以下修改和新增 修改 一...
Windows下PyInstaller的使用教程
直接使用python開發的軟體時有許多不方便的地方,如需要安裝特定的python環境,需要安裝依賴庫。為了便於部署,需要將python源 編譯成可執行檔案,編譯後的可執行檔案就能脫離python環境執行了。目前最新的pyinstaller版本是2.1,最方便的安裝方式是通過pip使用如下命令安裝 p...
windows下的命令
1.檢視埠被占用 1 檢視特定埠占用情況命令 netstat ano findstr 埠 檢視所有埠占用情況命令 netstat ano 2 記下pid值 3 找到該pid對應得程式名稱 tasklist findstr pid的值 或者不使用命令,開啟任務管理器根據pid找到占用該埠對應的程式 4...