3 个稳定版本
使用旧的 Rust 2015
1.0.2 | 2019 年 7 月 7 日 |
---|---|
1.0.1 | 2017 年 8 月 15 日 |
1.0.0 | 2017 年 8 月 8 日 |
在 文本处理 中排名 1033
每月下载量 28
在 tcalc 中使用
120KB
3K SLoC
RustyLine
Rust 中基于 Antirez' Linenoise 的 Readline 实现
支持的平台
- Linux
- Windows
- cmd.exe
- Powershell
注意:Powershell ISE 不受支持,请查看 问题 #56
构建
此项目使用 Cargo 和 Rust 稳定版
cargo build --release
示例
extern crate rustyline;
use rustyline::error::ReadlineError;
use rustyline::Editor;
fn main() {
// `()` can be used when no completer is required
let mut rl = Editor::<()>::new();
if let Err(_) = rl.load_history("history.txt") {
println!("No previous history.");
}
loop {
let readline = rl.readline(">> ");
match readline {
Ok(line) => {
rl.add_history_entry(&line);
println!("Line: {}", line);
},
Err(ReadlineError::Interrupted) => {
println!("CTRL-C");
break
},
Err(ReadlineError::Eof) => {
println!("CTRL-D");
break
},
Err(err) => {
println!("Error: {:?}", err);
break
}
}
}
rl.save_history("history.txt").unwrap();
}
crates.io
您可以通过将以下内容添加到您的 Cargo.toml
来在项目中使用此包
[dependencies]
rustyline = "1.0.0"
特性
- Unicode (UTF-8)(linenoise 仅支持 ASCII)
- 单词完成(linenoise 仅支持行完成)
- 文件名完成
- 历史搜索(《在历史中搜索命令》)
- 杀环(《删除命令》)
- 多行模式
- 单词命令
操作
按键 | 操作 |
---|---|
Ctrl-A, Home | 将光标移动到行首 |
Ctrl-B, Left | 将光标向左移动一个字符 |
Ctrl-C | 中断/取消编辑 |
Ctrl-D, Del | (如果行不为空)删除光标下的字符 |
Ctrl-D | (如果行为空)文件结束 |
Ctrl-E, End | 将光标移动到行尾 |
Ctrl-F, Right | 将光标向右移动一个字符 |
Ctrl-H, BackSpace | 删除光标前的字符 |
Ctrl-I, Tab | 下一个完成 |
Ctrl-J, Ctrl-M, Enter | 完成行输入 |
Ctrl-K | 从光标到行尾删除 |
Ctrl-L | 清屏 |
Ctrl-N, Down | 从历史中获取下一个匹配项 |
Ctrl-P, Up | 从历史中获取上一个匹配项 |
Ctrl-R | 反向搜索历史(Ctrl-S 向前,Ctrl-G 取消) |
Ctrl-T | 交换前一个字符与当前字符 |
Ctrl-U | 从行首到光标删除 |
Ctrl-V | 插入任何特殊字符而不执行其关联的操作 |
Ctrl-W | 删除光标前的单词(使用空白作为单词边界) |
Ctrl-Y | 从 Yank 缓冲区粘贴(使用 Meta-Y 粘贴下一个 Yank) |
Meta- | 移动到历史中的第一个条目 |
Meta-> | 移动到历史中的最后一个条目 |
Meta-B, Alt-Left | 将光标移至前一个单词 |
Meta-C | 将当前单词首字母大写 |
Meta-D | 删除一个单词 |
Meta-F,Alt-右键 | 将光标移至下一个单词 |
Meta-L | 将下一个单词转换为小写 |
Meta-T | 交换单词顺序 |
Meta-U | 将下一个单词转换为大写 |
Meta-Y | 参见Ctrl-Y |
Meta-BackSpace | 从当前单词的起始处删除,或者,如果处于两个单词之间,则删除到前一个单词的起始处 |
待办事项
- 撤销操作
- 使用超时读取输入以正确处理单个ESC键
- 提供一个从C语言可调用的API
Wine
$ cargo run --example example --target 'x86_64-pc-windows-gnu'
...
Error: Io(Error { repr: Os { code: 6, message: "Invalid handle." } })
$ wineconsole --backend=curses target/x86_64-pc-windows-gnu/debug/examples/example.exe
...
类似的项目
- copperline (Rust)
- linefeed (Rust)
- liner (Rust)
- linenoise-ng (C++)
- liner (Go)
- readline (Go)
- haskeline (Haskell)
依赖关系
~2.5MB
~45K SLoC