Julia 有一個(gè)全功能的交互式命令行 REPL (read-eval-print 循環(huán))內(nèi)置在可執(zhí)行的 julia
內(nèi)。除了允許快速并且簡(jiǎn)易的評(píng)定 Julia 語(yǔ)句,他還有一個(gè)可搜索歷史的功能,tab 補(bǔ)齊功能,以及更多有用的快捷鍵,和專門的幫助,并且還有 shell 模式。REPL 能夠通過(guò)簡(jiǎn)單的無(wú)參數(shù)調(diào)用或雙擊執(zhí)行來(lái)進(jìn)行啟動(dòng):
$ julia
_
_ _ _(_)_ | A fresh approach to technical computing
(_) | (_) (_) | Documentation: http://docs.julialang.org
_ _ _| |_ __ _ | Type "help()" to list help topics
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 0.3.0-prerelease+2834 (2014-04-30 03:13 UTC)
_/ |\__'_|_|_|\__'_| | Commit 64f437b (0 days old master)
|__/ | x86_64-apple-darwin13.1.0
julia>
如果要退出互動(dòng)會(huì)話,敲擊 ^D
即 control 鍵加上 d 鍵 - 或者是編輯 quit()
,然后在敲擊回車鍵。REPL 會(huì)給你 julia>
提示。
REPL 有四種主要的操作模式。第一種并且最常見(jiàn)的一種是 Julian 提示。它是默認(rèn)的操作模式;每一行的開(kāi)始都會(huì)是 julia>
。在這里,你可以輸入 Julia 表達(dá)式。在一個(gè)完整的表達(dá)式已經(jīng)輸入好之后敲打回車將會(huì)評(píng)估該條目并且顯示最后一個(gè)表達(dá)式的結(jié)果。
julia> string(1 + 2)
"3"
這里有許多獨(dú)特的特點(diǎn)可以來(lái)進(jìn)行交互工作。除了顯示結(jié)果外,REPL 同樣將結(jié)果綁定到變量 ans
。 在該行尾部的分號(hào)可以用作一個(gè)標(biāo)志來(lái)抑制顯示結(jié)果。
julia> string(3 * 4);
julia> ans
"12"
當(dāng)指針在一行的開(kāi)始位置時(shí),敲擊 ?
提示將會(huì)變?yōu)閹椭J?。Julia 將會(huì)嘗試打印在幫助模式中的幫助或是文檔:
julia> ? # upon typing ?, the prompt changes (in place) to: help>
help> string
Base.string(xs...)
Create a string from any values using the "print" function.
除了方法名,完成方法調(diào)用可以看到哪一個(gè)方法被指定的參數(shù)調(diào)用了。宏,類型和變量也可以查詢。
help> string(1)
string(x::Union(Int16,Int128,Int8,Int32,Int64)) at string.jl:1553
help> @printf
Base.@printf([io::IOStream], "%Fmt", args...)
Print arg(s) using C "printf()" style format specification
string. Optionally, an IOStream may be passed as the first argument
to redirect output.
help> String
DataType : String
supertype: Any
subtypes : {DirectIndexString,GenericString,RepString,RevString{T<:String},RopeString,SubString{T<:String},UTF16String,UTF8String}
想要退出幫助模式可以在一行的開(kāi)始按下退格鍵。
幫助模式適用于快速訪問(wèn)文檔,另一個(gè)常見(jiàn)任務(wù)是使用系統(tǒng) Shell 來(lái)執(zhí)行系統(tǒng)命令。就像當(dāng)光標(biāo)在一行的開(kāi)始位置時(shí) ?
來(lái)進(jìn)入幫助模式,使用分號(hào) (;)
可以進(jìn)入 shell 模式。并且想要退出模式時(shí)可以在一行的開(kāi)始按下退格鍵。
julia> ; # upon typing ;, the prompt changes (in place) to: shell>
shell> echo hello
hello
在所有以上的方法中,所有執(zhí)行行會(huì)被保存到歷史文件當(dāng)中,并且能夠被查找。為了初始化一個(gè)對(duì)先前歷史的增量搜索,敲擊 ^R
- control 鍵加上鍵盤上的 r
鍵。提示會(huì)被更改為 (reverse-i-search)':
,并且隨著你敲擊,查詢請(qǐng)求將會(huì)出現(xiàn)在引用中。達(dá)到匹配要求的最近一次的結(jié)果將會(huì)被動(dòng)態(tài)更新在右面的控制臺(tái)中。想要找到更老的結(jié)果就使用相同查詢,然后再敲擊一次 ^R
。
^R
是反向查詢,而 ^S
是正向查詢,提示為 (i-search)':
。這兩個(gè)可以相互結(jié)合使用來(lái)相對(duì)的移動(dòng)到前一個(gè)或是后一個(gè)匹配結(jié)果。
Julia REPL 很好的使用了鍵綁定功能。上面已經(jīng)介紹了很多種控制鍵綁定(^D
用來(lái)退出, ^R
和 ^S
用來(lái)查詢),但是這里還有更多的鍵綁定。除了控制鍵,這里還有很多 meta - 鍵綁定。這些鍵綁定因平臺(tái)的不同而不同,但是大部分終端默認(rèn)使用 alt - 或 option - 選一個(gè)鍵來(lái)發(fā)送 meta - 鍵(或是通過(guò)配置)。
Program control | |
---|---|
^D | 退出(當(dāng)緩沖區(qū)為空) |
^C | 中斷或是取消 |
Return/Enter, ^J | 新的一行并且如果上一行已經(jīng)完成則執(zhí)行上一行 |
meta-Return/Enter | 新的一行并且不執(zhí)行 |
? or ; | 進(jìn)入幫助或是 Shell 模式(在一行的起始位置) |
^R, ^S | 增量歷史搜索 |
Cursor movement | |
Right arrow, ^F | 向右移動(dòng)一個(gè)字符 |
Left arrow, ^B | 向左移動(dòng)一個(gè)字符 |
Home, ^A | 移動(dòng)到該行的起始 |
End, ^E | 移動(dòng)到該行的末尾 |
^P | 改變先前或下一個(gè)歷史條目 |
^N | 改變到下一個(gè)歷史條目 |
Up arrow | 移動(dòng)到上面一行(或是先前的歷史條目) |
Down arrow | 移動(dòng)到下面一行(或是之后的歷史條目) |
Page-up | 切換到上一條光標(biāo)前的文本匹配的歷史條目 |
Page-down | 切換到下一條光標(biāo)前的文本匹配的歷史條目 |
meta-F | 向右移動(dòng)一個(gè)詞 |
meta-B | 向左移動(dòng)一個(gè)詞 |
Editing | |
Backspace, ^H | 刪除前一個(gè)字符 |
Delete, ^D | 向后刪除一個(gè)字符(當(dāng)緩沖區(qū)有文本時(shí)) |
meta-Backspace | 刪除前一個(gè)詞 |
meta-D | 向后刪除一個(gè)詞 |
^W | 刪除先前的直到最近的空白的所有文本 |
^K | "殺死"到行的末尾,將文本放至緩沖區(qū) |
^Y | 從 kill 緩沖區(qū)插入文本 |
^T | 根據(jù)光標(biāo)調(diào)換字符 |
Delete, ^D | 向后刪除一個(gè)字符(當(dāng)緩沖區(qū)內(nèi)有文本) |
Julia REPL 的快捷鍵可以通過(guò)向 REPL.setup_interface()
傳入字典類型的數(shù)據(jù)來(lái)實(shí)現(xiàn)自定義. 字典的關(guān)鍵字可以是字符, 也可以是字符串. 字符 *
代表默認(rèn)默認(rèn)操作. ^x
代表快捷鍵 Control 鍵加 x
鍵. Meta 鍵加 x
鍵可以寫(xiě)作 "\\Mx"
. 字典的數(shù)據(jù)必須是 nothing
(代表忽略該操作), 或者參數(shù)為 (PromptState, AbstractREPL, Char
的函數(shù). 例如, 為了實(shí)現(xiàn)綁定上下鍵到搜索歷史記錄, 可以把下面的代碼加入到 .juliarc.jl
:
import Base: LineEdit, REPL
const mykeys = {
# Up Arrow
"\e[A" => (s,o...)->(LineEdit.edit_move_up(s) || LineEdit.history_prev(s, LineEdit.mode(s).hist)),
# Down Arrow
"\e[B" => (s,o...)->(LineEdit.edit_move_up(s) || LineEdit.history_next(s, LineEdit.mode(s).hist))
}
Base.active_repl.interface = REPL.setup_interface(Base.active_repl; extra_repl_keymap = mykeys)
可供使用的按鍵和操作請(qǐng)參閱 base/LineEdit.jl
.
在 Julia REPL (或者幫助模式下的 REPL), 可以輸入函數(shù)或者類型名的前幾個(gè)字符, 然后按 Tab 鍵來(lái)顯示可能的選項(xiàng)::
julia> stri
stride strides string stringmime strip
julia> Stri
StridedArray StridedVecOrMat String
StridedMatrix StridedVector
Tab 鍵也可以使 LaTeX 數(shù)學(xué)字符替換成 Unicode 并且顯示可能的選項(xiàng)::
julia> \pi[TAB]
julia> π
π = 3.1415926535897...
julia> e\_1[TAB] = [1,0]
julia> e? = [1,0]
2-element Array{Int64,1}:
1
0
julia> e\^1[TAB] = [1 0]
julia> e1 = [1 0]
1x2 Array{Int64,2}:
1 0
julia> \sqrt[TAB]2 # √ is equivalent to the sqrt() function
julia> √2
1.4142135623730951
julia> \hbar[TAB](h) = h / 2\pi[TAB]
julia> ?(h) = h / 2π
? (generic function with 1 method)
julia> \h[TAB]
\hat \heartsuit \hksearow \hookleftarrow \hslash
\hbar \hermitconjmatrix \hkswarow \hookrightarrow \hspace
更多建議: