REPL交互环境 #

一、REPL概述 #

REPL(Read-Eval-Print Loop)是Julia的交互式命令行环境,是学习和开发Julia的强大工具。

1.1 启动REPL #

bash
julia

1.2 REPL界面 #

text
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |   Type "?" for help, "]?" for Pkg help.
  _ _   _| |  __ _     |
 | | | | | | |/ _` |    |
 | | |_| | | | (_| |    |  Version 1.10.0 (2023-12-25)
 _/ |\__'_|_|_|\__'_|   |
|__/                   |

julia>

1.3 退出REPL #

  • 输入 exit()exit
  • Ctrl+D

二、REPL模式 #

2.1 Julian模式(默认) #

默认的Julian模式用于执行Julia代码:

julia
julia> 1 + 2
3

julia> x = 10
10

julia> println("Hello")
Hello

2.2 Help模式 #

?进入Help模式,用于查看帮助文档:

julia
julia> ?

help?> println
search: println printstyled print sprint isprint

  println([io::IO], xs...)

  Print xs to io followed by a newline.

查看函数文档:

julia
help?> sum
help?> map
help?> push!

查看类型文档:

julia
help?> Int
help?> String
help?> Array

查看宏文档:

julia
help?> @time
help?> @show

搜索文档:

julia
help?> "sort"

2.3 Pkg模式 #

]进入Pkg模式,用于包管理:

julia
julia> ]

pkg> status
pkg> add DataFrames
pkg> update
pkg> remove DataFrames
pkg> precompile

常用Pkg命令:

命令 功能
status / st 显示已安装包
add Package 安装包
remove Package / rm 卸载包
update / up 更新包
instantiate 安装项目依赖
activate path 激活项目环境
precompile 预编译包
gc 清理未使用的包

2.4 Shell模式 #

;进入Shell模式,用于执行系统命令:

julia
julia> ;

shell> ls
hello.jl  data.csv

shell> pwd
/Users/username

shell> echo "Hello"
Hello

2.5 模式切换 #

  • BackspaceCtrl+C返回Julian模式
  • 从任何模式按?];切换到对应模式

三、快捷键 #

3.1 导航快捷键 #

快捷键 功能
Ctrl+A 移动到行首
Ctrl+E 移动到行尾
Ctrl+B 向左移动一个字符
Ctrl+F 向右移动一个字符
Alt+B 向左移动一个单词
Alt+F 向右移动一个单词

3.2 编辑快捷键 #

快捷键 功能
Ctrl+U 删除从光标到行首
Ctrl+K 删除从光标到行尾
Ctrl+W 删除光标前的单词
Ctrl+Y 粘贴删除的内容
Ctrl+_ 撤销
Tab 自动补全
Shift+Tab 反向补全

3.3 历史命令 #

快捷键 功能
上一条命令
下一条命令
Ctrl+R 搜索历史
Ctrl+P 上一条命令
Ctrl+N 下一条命令

3.4 其他快捷键 #

快捷键 功能
Ctrl+C 取消当前输入/中断执行
Ctrl+D 退出REPL
Ctrl+L 清屏
Ctrl+T 交换光标前后字符

四、自动补全 #

4.1 Tab补全 #

Tab键自动补全:

julia
julia> prin<Tab>
print    println    printstyled

julia> pri<Tab><Tab>
print    println    printstyled

4.2 函数参数补全 #

显示函数参数:

julia
julia> sum(<Tab>
sum(f, itr)
sum(itr)
sum(f, itr; init)

4.3 字典键补全 #

julia
julia> d = Dict(:a => 1, :b => 2)
julia> d[:<Tab>
:a  :b

4.4 路径补全 #

julia
julia> cd("/Users/<Tab>
/Users/user1/  /Users/user2/

4.5 Unicode补全 #

输入LaTeX风格的代码后按Tab:

julia
julia> \alpha<Tab>
α

julia> \sqrt<Tab>
√

julia> \sum<Tab>
∑

五、历史记录 #

5.1 浏览历史 #

使用浏览历史命令。

5.2 搜索历史 #

Ctrl+R搜索历史:

julia
(reverse-i-search)`pri': println("Hello")

5.3 历史文件 #

历史记录保存在 ~/.julia/logs/repl_history.jl

5.4 清除历史 #

julia
using REPL
REPL.clear_history()

六、特殊变量 #

6.1 ans #

ans存储上一个表达式的结果:

julia
julia> 1 + 2
3

julia> ans
3

julia> ans * 2
6

6.2 In 和 Out #

在IJulia等环境中,InOut存储输入输出历史。

七、多行编辑 #

7.1 基本多行输入 #

julia
julia> function greet(name)
           println("Hello, $name")
       end
greet (generic function with 1 method)

7.2 使用begin-end #

julia
julia> begin
           x = 1
           y = 2
           x + y
       end
3

7.3 复制粘贴 #

REPL支持直接粘贴多行代码:

julia
julia> function foo()
           x = 1
           y = 2
           return x + y
       end

八、REPL配置 #

8.1 启动文件 #

创建 ~/.julia/config/startup.jl 自定义REPL:

julia
println("Welcome to Julia!")

using REPL
REPL.REPLCompletions.set_latex_completions(true)

atreplinit() do repl
    try
        @eval using OhMyREPL
    catch
    end
end

8.2 OhMyREPL.jl #

OhMyREPL提供语法高亮和更好的REPL体验:

julia
using Pkg
Pkg.add("OhMyREPL")

startup.jl 中添加:

julia
using OhMyREPL

8.3 Revise.jl #

Revise可以在修改代码后自动重新加载:

julia
using Pkg
Pkg.add("Revise")

startup.jl 中添加:

julia
using Revise

8.4 REPL显示选项 #

julia
ENV["JULIA_REPL_SOFTSCOPE"] = "true"

九、性能分析 #

9.1 @time #

测量执行时间和内存分配:

julia
julia> @time sum(rand(10^6))
  0.001198 seconds (2 allocations: 7.629 MiB)
500000.5

9.2 @timed #

返回详细的计时信息:

julia
julia> result = @timed sum(rand(10^6))
(value = 500000.5, time = 0.001, bytes = 8000000, gctime = 0.0, ...)

9.3 @btime (BenchmarkTools) #

更精确的基准测试:

julia
using Pkg
Pkg.add("BenchmarkTools")

using BenchmarkTools

@btime sum(rand(10^6))

9.4 @profile #

性能分析:

julia
using Profile

function slow_function(n)
    total = 0.0
    for i in 1:n
        total += sqrt(i)
    end
    return total
end

@profile slow_function(10^6)
Profile.print()

十、调试功能 #

10.1 @show #

显示表达式和值:

julia
julia> x = 10; y = 20;

julia> @show x + y
x + y = 30
30

10.2 dump #

显示对象结构:

julia
julia> dump([1, 2, 3])
Array{Int64}((3,))
  1: Int64 1
  2: Int64 2
  3: Int64 3

10.3 @which #

查看方法定义:

julia
julia> @which 1 + 2
+(x::T, y::T) where T<:Union{Int128, Int16, Int32, Int64, Int8, UInt128, UInt16, UInt32, UInt64, UInt8}
     in Base at int.jl:87

10.4 methods #

查看所有方法:

julia
julia> methods(+)

10.5 @less #

查看源代码:

julia
julia> @less sum([1, 2, 3])

10.6 @edit #

在编辑器中打开源代码:

julia
julia> @edit sum([1, 2, 3])

十一、实用技巧 #

11.1 快速测试 #

REPL非常适合快速测试代码片段:

julia
julia> x = [1, 2, 3, 4, 5]
julia> sum(x)
julia> mean(x)

11.2 探索API #

使用Tab补全探索对象的可用方法:

julia
julia> str = "hello"
julia> str.<Tab>

11.3 计算器模式 #

REPL可以作为强大的计算器:

julia
julia> 2^10
1024

julia> sqrt(2)
1.4142135623730951

julia> sin(π/4)
0.7071067811865475

11.4 数学常量 #

julia
julia> π
π = 3.1415926535897...

julia> ℯ
ℯ = 2.7182818284590...

julia> im
im

11.5 复数运算 #

julia
julia> 1 + 2im
1 + 2im

julia> (1 + 2im) * (3 + 4im)
-5 + 10im

julia> abs(3 + 4im)
5.0

十二、实践练习 #

12.1 练习1:探索帮助系统 #

julia
?println
?sum
?Array

12.2 练习2:包管理 #

julia
]
add DataFrames
status
precompile
rm DataFrames

12.3 练习3:性能测试 #

julia
function fibonacci(n)
    n <= 1 ? n : fibonacci(n-1) + fibonacci(n-2)
end

@time fibonacci(30)
@time fibonacci(35)
@time fibonacci(40)

12.4 练习4:调试代码 #

julia
function buggy_function(x)
    y = x * 2
    @show y
    z = y + 1
    @show z
    return z / 0
end

buggy_function(10)

十三、总结 #

本章我们学习了:

  1. REPL模式:Julian、Help、Pkg、Shell四种模式
  2. 快捷键:导航、编辑、历史命令快捷键
  3. 自动补全:Tab补全、Unicode补全
  4. 历史记录:浏览和搜索历史命令
  5. 配置:startup.jl、OhMyREPL、Revise
  6. 性能分析:@time、@btime、@profile
  7. 调试功能:@show、dump、@which、@edit

掌握REPL的高效使用技巧,将大大提升你的Julia开发效率!

最后更新:2026-03-27