我正在考虑用 C# 编写一个控制台应用程序,我想结合历史、完成和命令行编辑功能,比如 GNU readline(但不一定像那样广泛!)
是否存在提供此类功能的 .net 库?我想一种选择是使用互操作服务来调用 GNU readline。但是有原生的选择吗?
您可能想查看 Miguel de Icaza 的getline.cs(博客文章中的链接已损坏,现在可以在此处找到代码)。根据您实际需要的 readline 功能,它可能足以满足您的目的。
好消息是,它全部包含在一个(因此 getline.cs)文件中,并获得了 MIT X11 许可。
使用它非常容易。
如果你想尝试一下,只需下载文件并编译它:
C:\> csc.exe /d:DEMO getline.cs
C:\> getline.exe
shell>
该#ifdef DEMO
部分还显示了基本的 REPL:
var le = new LineEditor("whatever");
string s;
while ((s = le.Edit("my prompt> ", "")) != null)
{
// User input from command line / prompt now in "s".
}
我唯一知道的是Mono-Readline。
它为 GNU Readline 库提供了一个 .NET 接口——虽然它有点原始,只有 0.0.1 版,而且我只见过它在 Mono 运行时上运行。
您也应该小心许可...... AFAIK 任何链接 GNU Readline 库的东西都必须在 GPL 下发布。
一个旨在模拟 RedLine 大部分功能的项目是Deveel ReadLine,但我不得不说它没有得到维护。上次我使用它时,它在 .NET 和 Mono 上都运行良好,尽管在取消自动折叠的行时有一个小错误。
老问题,但仍然相关,因为它出现在 Google 搜索结果中。提及以下内容是有道理的:
https://github.com/tonerdo/readline现在是一个不错的选择。引用其自述文件:
ReadLine 是一个用纯 C# 构建的类似 GNU Readline 的库。它可以作为内置的替代品,
Console.ReadLine()
并带来一些您从 unix shell 获得的终端优势,例如命令历史导航和选项卡自动完成。它是跨平台的,可以在任何支持 .NET 的地方运行,以 netstandard1.3 为目标意味着它可以与 .NET Core 以及完整的 .NET Framework 一起使用。
该项目在 MIT 许可下获得许可