<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢(mèng)蝶

    生活、程序、未來(lái)
       :: 首頁(yè) ::  ::  :: 聚合  :: 管理

    Clojure世界:使用rlwrap增強(qiáng)REPL

    Posted on 2012-02-14 19:05 dennis 閱讀(3726) 評(píng)論(1)  編輯  收藏 所屬分類: Clojure
        Clojure的REPL非常方便,可以隨時(shí)隨地試驗(yàn)?zāi)愕南敕ǎ琑EPL是read-eval-print-loop的簡(jiǎn)稱。默認(rèn)clojure.contrib有帶一個(gè)shell腳本來(lái)啟動(dòng)REPL,具體看這里。你也可以用JLine來(lái)增強(qiáng)REPL:
    java -cp "%CLOJURE_DIR%\jline-VERSION.jar;%CLOJURE_JAR%" jline.ConsoleRunner clojure.main

        不過(guò),其實(shí)你還可以用rlwrap這個(gè)GNU庫(kù)來(lái)增強(qiáng)clojure REPL。使用它有如下好處:
    1.Tab completion,使用tab做代碼提示。
    2.括號(hào)匹配
    3.歷史記錄,哪怕你重啟REPL
    4.通過(guò).inputrc來(lái)綁定vi或者emacs

        具體操作步驟如下:

    1.首先,你需要在你的機(jī)器上安裝rlwrap,你可以通過(guò)apt或者port,homebrew等工具安裝或者自己下載安裝:
    sudo port install rlwrap

    2.在你的home目錄下創(chuàng)建一個(gè)clojure目錄作為clojure home,并拷貝clojure.jar進(jìn)去:
    mkdir ~/clojure
    cp .m2
    /repository/org/clojure/clojure/1.3.0/clojure-1.3.0.jar ~/clojure/clojure.jar
    我是從maven的本地倉(cāng)庫(kù)里拷貝了clojure 1.3的jar包過(guò)去,重命名為clojure.jar

    3.創(chuàng)建一個(gè)shell腳本名為clj,并放入你的path變量,腳本內(nèi)容:
    #!/bin/sh
    breakchars
    ="(){}[],^%$#@\"\";:''|\\"
    CLOJURE_DIR
    =~/clojure
    CLOJURE_JAR
    ="$CLOJURE_DIR"/clojure.jar
    JAVA_OPTS
    ="-Xmx512m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:+CMSClassUnloadingEnabled"
    if [ $# -eq 0 ]; then 
        exec rlwrap 
    --remember --"$breakchars" \
       
    -"$HOME"/.clj_completions \
       
    -"Clojure REPL" \
       
    -p red \
       
    -"$CLOJURE_DIR"/.repl_history -1000\
       java 
    "$JAVA_OPTS"  -cp "$CLOJURE_JAR" clojure.main
    else
             exec java 
    -cp "$CLOJURE_JAR" clojure.main $1 "$@"
    fi
    我們將命令歷史輸出到~/clojure/.repl_history文件中,并限制數(shù)目為1000。

    4.clj腳本中通過(guò)-f選項(xiàng)指定了completions文件為~/.clj_completions,執(zhí)行下列clojure程序生成此文件:
    (def completions (keys (ns-publics (find-ns 'clojure.core))))
    ;(def completions (mapcat (comp keys ns
    -publics) (all-ns)))
    (
    with-open [f (java.io.BufferedWriter. (java.io.FileWriter. (str (System/getenv "HOME""/.clj_completions")))]
      (.write f (apply str (interpose \newline completions))))
    這個(gè)程序只生成clojure.core的completions文件,如果你想將所有ns都加入進(jìn)去,注釋掉第一行,使用第二行程序。

    5.最后,配置下~/.inputrc文件:
    set editing-mode emacs
    tab: complete
    set completion
    -query-items 150
    set completion
    -ignore-case on
    set blink
    -matching-paren on
    set bell
    -style visible
    我綁定為emacs,你可以選擇vi。

    6.一切搞定,接下來(lái)你可以敲入命令clj來(lái)使用rlwrap啟動(dòng)clojure REPL了,可以用tab做代碼提示了,可以用Ctrl + r來(lái)搜索歷史命令,運(yùn)行截圖:


    參考:http://en.wikibooks.org/wiki/Clojure_Programming/Getting_Started#Enhancing_Clojure_REPL_with_rlwrap
    轉(zhuǎn)載請(qǐng)注明出處:http://www.tkk7.com/killme2008/archive/2012/02/14/369976.html

    評(píng)論

    # re: Clojure世界:使用rlwrap增強(qiáng)REPL  回復(fù)  更多評(píng)論   

    2012-02-16 09:35 by dennis
    @number23_cn
    嗯,是多了,感謝糾正
    主站蜘蛛池模板: 亚洲AV无码码潮喷在线观看| 亚洲久热无码av中文字幕 | 中文字幕免费播放| 亚洲精品视频在线| 在线免费视频一区二区| 久久精品免费大片国产大片| 亚洲色图古典武侠| 亚洲av无码国产精品色在线看不卡 | 16女性下面无遮挡免费| 国产成人人综合亚洲欧美丁香花| 久久夜色精品国产亚洲av| 1000部拍拍拍18勿入免费视频软件 | 亚洲国产另类久久久精品| 91在线品视觉盛宴免费| 中文字幕免费在线看| 亚洲中文字幕AV在天堂| 亚洲最大激情中文字幕| 毛片高清视频在线看免费观看| 中文字幕免费观看全部电影| 亚洲人成电影网站免费| 亚洲人成网www| 国产午夜亚洲精品理论片不卡 | 最近免费mv在线观看动漫 | 一区二区三区免费电影| 亚洲一卡2卡3卡4卡乱码 在线| 亚洲色欲久久久综合网东京热| 毛片A级毛片免费播放| 免费黄网站在线看| 有码人妻在线免费看片| 亚洲中文字幕无码久久2020| 亚洲第一中文字幕| 亚洲无线码一区二区三区| 免费人成在线观看播放国产| 丁香花免费高清视频完整版| 久久大香伊焦在人线免费| 人妻免费久久久久久久了| 亚洲av无码一区二区三区四区| 亚洲精品视频在线播放| 亚洲AV成人一区二区三区AV| 亚洲夜夜欢A∨一区二区三区 | 综合自拍亚洲综合图不卡区|