编辑
基于 linenoise 的 CLI 编辑器目前仅适用于 macOS 和 Linux。
Goose 的 CLI 使用基于 linenoise 的行编辑库,其快捷键基于 readline 的 Emacs 模式。以下为可用命令列表。
移动
| 按键 | 操作 |
|---|---|
Left | 向后移动一个字符 |
Right | 向前移动一个字符 |
Up | 上移一行。若已在首行,则移动到上一条历史记录 |
Down | 下移一行。若已在末行,则移动到下一条历史记录 |
Home | 移动到缓冲区开头 |
End | 移动到缓冲区末尾 |
Ctrl+Left | 向后移动一个单词 |
Ctrl+Right | 向前移动一个单词 |
Ctrl+A | 移动到缓冲区开头 |
Ctrl+B | 向后移动一个字符 |
Ctrl+E | 移动到缓冲区末尾 |
Ctrl+F | 向前移动一个字符 |
Alt+Left | 向后移动一个单词 |
Alt+Right | 向前移动一个单词 |
历史记录
| 按键 | 操作 |
|---|---|
Ctrl+P | 移动到上一条历史记录 |
Ctrl+N | 移动到下一条历史记录 |
Ctrl+R | 搜索历史记录 |
Ctrl+S | 搜索历史记录 |
Alt+< | 移动到第一条历史记录 |
Alt+> | 移动到最后一条历史记录 |
Alt+N | 搜索历史记录 |
Alt+P | 搜索历史记录 |
文本编辑
| 按键 | 操作 |
|---|---|
Backspace | 删除前一个字符 |
Delete | 删除下一个字符 |
Ctrl+D | 删除下一个字符。缓冲区为空时,结束编辑 |
Ctrl+H | 删除前一个字符 |
Ctrl+K | 删除光标之后的所有内容 |
Ctrl+T | 交换当前字符与下一个字符 |
Ctrl+U | 删除全部文本 |
Ctrl+W | 删除前一个单词 |
Alt+C | 将下一个单词转换为首字母大写 |
Alt+D | 删除下一个单词 |
Alt+L | 将下一个单词转换为小写 |
Alt+R | 删除全部文本 |
Alt+T | 交换当前单词与下一个单词 |
Alt+U | 将下一个单词转换为大写 |
Alt+Backspace | 删除前一个单词 |
Alt+\ | 删除光标周围空格 |
补全
| 按键 | 操作 |
|---|---|
Tab | 自动补全。补全时切换到下一项 |
Shift+Tab | 补全时切换到上一项 |
Esc+Esc | 补全时撤销自动补全 |
其他
| 按键 | 操作 |
|---|---|
Enter | 执行查询。若查询未完成,则在缓冲区末尾插入换行 |
Ctrl+J | 执行查询。若查询未完成,则在缓冲区末尾插入换行 |
Ctrl+C | 取消当前查询编辑 |
Ctrl+G | 取消当前查询编辑 |
Ctrl+L | 清屏 |
Ctrl+O | 取消当前查询编辑 |
Ctrl+X | 在光标后插入换行 |
Ctrl+Z | 挂起 CLI 并返回 shell,使用 fg 恢复 |
外部编辑器模式
使用 .edit 或 \e 在外部文本编辑器中打开查询。
- 单独输入时,会打开上一条命令进行编辑。
- 在多行命令中使用时,会打开当前命令进行编辑。
编辑器按 GOOSE_EDITOR、EDITOR、VISUAL 的顺序选择第一个已设置的环境变量。若都未设置,则使用 vi。
此功能仅在基于 linenoise 的 CLI 编辑器中可用,目前支持 macOS 和 Linux。
使用 Read-Line
如果你愿意,也可以使用 rlwrap 让 shell 直接使用 read-line。此时使用 Shift+Enter 插入换行,Enter 执行查询:
rlwrap --substitute-prompt="D " goose -batch