# REPL

`ptool repl` 会启动一个交互式 Lua 会话，并预先加载标准 `ptool` API。

## 启动 REPL

```sh
ptool repl
```

REPL 启动后，`ptool` 会先打印欢迎信息，然后等待 Lua 输入。

## 它提供什么

- 全局表 `ptool` 以及更短的别名 `p`。
- 与 `ptool run <file>` 相同的一组内置辅助能力。
- 对 Lua 表达式和语句的交互式求值。
- 类似 readline 的行编辑能力，包括方向键移动光标和当前会话内的历史记录浏览。

## 基本用法

输入一个表达式即可立即求值：

```lua
1 + 2
```

REPL 会使用 `ptool` 现有的 inspect 渲染逻辑打印返回值。

你也可以直接调用 `ptool` API：

```lua
p.str.trim("  hello  ")
```

## 多行输入

如果当前输入还不完整，提示符会从 `>>> ` 变成 `... `。这样你就可以继续输入 函数定义或控制流语句等代码块：

```lua
for i = 1, 3 do
  print(i)
end
```

当输入完整后，`ptool` 会对整个代码块求值。

## 键盘行为

- `Up` 和 `Down` 用于浏览当前 REPL 会话中之前输入过的命令。
- `Left` 和 `Right` 用于在当前输入行内移动光标。
- `Ctrl-C` 会清空当前输入；如果你正处于多行输入中，它会丢弃当前缓存的代码块并回到主提示符。
- `Ctrl-D` 会退出 REPL。

## 说明

- `ptool repl` 需要交互式 TTY。
- 当前历史记录只保存在本次会话中，不会写入历史文件。
