#read-line #word #rustyline #history #completion #search

已删除 wee-rl

Rustyline,基于Antirez的Linenoise的readline实现

使用旧的Rust 2015

1.0.0 2017年12月8日

#17 in #readline

MIT 许可证

190KB
4.5K SLoC

RustyLine

Build Status

基于Antirez' Linenoise的Rust实现

文档(发行版)

文档(主分支)

支持的平台

  • Linux
  • Windows
    • cmd.exe
    • Powershell

注意:Powershell ISE不受支持,请查看问题 #56

此分支

此分支仅用于为rustyline crate的重新打包提供一个存储库。

构建

此项目使用Cargo和Rust稳定版

cargo build --release

示例

extern crate wee_rl as 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]
wee-rl = "1.0.0"

特性

  • Unicode(UTF-8)(linenoise只支持ASCII)
  • 单词完成(linenoise只支持行完成)
  • 文件名完成
  • 历史搜索(《在历史中搜索命令》)
  • 杀环(《杀命令》)
  • 多行模式
  • 单词命令

动作

对所有模式

键盘按键 动作
Home 将光标移至行首
End 将光标移至行尾
Left 将光标向左移动一个字符
Right 将光标向右移动一个字符
Ctrl-C 中断/取消编辑
Ctrl-D, Del (如果行不为空)删除光标下的字符
Ctrl-D (如果行为空)文件结束
Ctrl-J, Ctrl-M, Enter 完成行输入
Ctrl-R 反向搜索历史(Ctrl-S向前,Ctrl-G取消)
Ctrl-T 交换前一个字符与当前字符
Ctrl-U 从行首删除到光标
Ctrl-V 插入任何特殊字符而不执行其关联的动作(#65)
Ctrl-W 删除光标前的单词(使用空白作为单词边界)
Ctrl-Y 从剪切板粘贴
Ctrl-Z 挂起(仅限Unix)

Emacs模式(默认模式)

键盘按键 动作
Ctrl-A, Home 将光标移至行首
Ctrl-B, Left 将光标向左移动一个字符
Ctrl-E, End 将光标移至行尾
Ctrl-F, Right 将光标向右移动一个字符
Ctrl-H, BackSpace 删除光标前的字符
Ctrl-I, Tab 下一个完成
Ctrl-K 从光标删除到行尾
Ctrl-L 清除屏幕
Ctrl-N, Down 从历史记录中获取下一个匹配项
Ctrl-P, Up 从历史记录中获取上一个匹配项
Ctrl-Y 从剪切板粘贴(使用Meta-Y粘贴下一个剪切项)
Meta-< 移动到历史记录中的第一个条目
Meta-> 移动到最后一个历史记录条目
Meta-B, Alt-左箭头 将光标移动到上一个单词
Meta-C 将当前单词转换为大写
Meta-D 删除一个单词
Meta-F, Alt-右箭头 将光标移动到下一个单词
Meta-L 将下一个单词转换为小写
Meta-T 交换单词
Meta-U 将下一个单词转换为大写
Meta-Y 参见Ctrl-Y
Meta-退格键 从当前单词的开始处删除,或者,如果在单词之间,则删除到上一个单词的开始处
Meta-0, 1, ..., - 指定参数的数字。开始一个负参数。

Readline Emacs 编辑模式快捷表

Vi 命令模式

键盘按键 动作
$, End 将光标移至行尾
. 重做最后的文本修改
; 重做最后的字符查找命令
, 重做最后字符查找命令的反向操作
0, Home 将光标移至行首
^ 移动到行的第一个非空字符
a 在光标后插入
A 在行末插入
b 向左移动一个单词或标记
B 向左移动一个非空单词
c 更改移动命令的文本
C 将文本更改为行末(相当于c$)
d 删除移动命令的文本
D, Ctrl-K 删除到行末
e 移动到当前单词的末尾
E 移动到当前非空单词的末尾
f 向右移动到下一个 char 出现的位置
F 向左移动到上一个 char 出现的位置
h, Ctrl-H, BackSpace 向左移动一个字符
l, Space 向右移动一个字符
Ctrl-L 清除屏幕
i 在光标前插入
I 在行首插入
+, j, Ctrl-N 向前移动一条历史记录命令
-, k, Ctrl-P 向后移动一条历史记录命令
p 在光标处插入复制的文本(粘贴)
P 在光标前插入复制的文本
r 替换光标下的单个字符(不离开命令模式)
s 删除光标下的单个字符并进入输入模式
S 更改当前行(相当于0c$)
t 向右移动到下一个 char 出现的位置,然后后退一个字符
T 向左移动到上一个 char 出现的位置,然后前进一个字符
w 向右移动一个单词或标记
W 向右移动一个非空单词
x 删除光标下的单个字符
X 删除光标前的字符
y 将移动操作复制到缓冲区(复制)

Vi 插入模式

键盘按键 动作
Ctrl-H, BackSpace 删除光标前的字符
Ctrl-I, Tab 下一个完成
Esc 切换到命令模式

Readline VI 编辑模式快捷表

终端代码(ANSI/VT100)

待办事项

  • 撤销操作
  • 使用超时读取输入以正确处理单个 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
...

终端检查

$ # current settings of all terminal attributes:
$ stty -a
$ # key bindings:
$ bind -p

类似的项目

依赖项

~3MB
~51K SLoC