Koz Asked: 2022-11-02 19:52:24 +0800 CST2022-11-02 19:52:24 +0800 CST 2022-11-02 19:52:24 +0800 CST 交互式 CLI 如何工作? 772 Vim 等命令行应用程序如何工作?具体来说,他们如何以他们的方式控制终端?另外,为了将来参考,是否有像 Vim 那样控制终端的应用程序的特定术语? vim 2 个回答 Voted Best Answer MC68020 2022-11-03T00:40:53+08:002022-11-03T00:40:53+08:00 vim 和其他半图形(能够显示半图形字符,例如角、全十字……)应用程序通过发送专用转义序列来控制终端(管理光标的位置、可显示字符的位置、颜色设置……) , 终端将转换为它将执行的某些专用操作的控制代码。 因为任何程序员将转义序列回显到标准输出只是一场噩梦,更不用说暗示不可移植代码,因为总是有许多不同的终端具有不同的功能和不同的转义序列, 创建了一个抽象所有工作的库:curses。现在命名为ncurses,它还提供更高级别的功能,例如窗口管理。 ncurses 依赖terminfo数据库来获取适当的终端功能描述。 正是由于这个函数库,vim、iptraf-ng、alsa amixer、less、gdb、主要的内核配置实用程序和许多其他工具控制了终端。 请注意,这些应用程序通常不称为“命令行”实用程序,它们通常使用readline库处理具有基本光标管理和编辑功能的单行输入。 根据对比,您可以在ncurses上面链接的手册页中阅读,这些程序可以称为:交互式,面向屏幕。 根据与面向行的vim编辑器的对比,通常将其命名为面向屏幕的编辑器。ed 请注意评论中的以下建议: 启动时,应用程序将从启动它的 shell 继承 tty 驱动程序设置,这些设置可能与最初由原始 getty 设置的非常相似。 这包括缓冲输入直到捕获换行符,在即时光标位置回显输入键……所有面向屏幕的应用程序都可能不想要的功能 初始化时,程序将保存当前的 tty 驱动程序设置并根据程序员的意愿强制设置。 在退出之前......强烈邀请程序员恢复初始设置......除非面临在相当不可预测但肯定是混乱的情况下返回调用shell的风险...... Doug Weathers 2022-11-04T09:19:14+08:002022-11-04T09:19:14+08:00 一次一个字符进入缓冲区。输入回车后,一次检查(“解析”)一个字符以查找命令和选项的缓冲区。然后,如果可能,使用给定的选项执行命令。如果无法解析输入,则会给出一条错误消息,显示命令解释器无法弄清楚如何处理。 冲洗并重复,直到命令行解释器停止和/或计算机关闭。 基本上,它就像任何其他计算机程序一样。输入、IF 和 ELSE 语句、数据操作(在内存中进行计算和移动数据)和输出。
vim 和其他半图形(能够显示半图形字符,例如角、全十字……)应用程序通过发送专用转义序列来控制终端(管理光标的位置、可显示字符的位置、颜色设置……) , 终端将转换为它将执行的某些专用操作的控制代码。
因为任何程序员将转义序列回显到标准输出只是一场噩梦,更不用说暗示不可移植代码,因为总是有许多不同的终端具有不同的功能和不同的转义序列,
创建了一个抽象所有工作的库:curses。现在命名为ncurses,它还提供更高级别的功能,例如窗口管理。
ncurses 依赖terminfo数据库来获取适当的终端功能描述。
正是由于这个函数库,vim、iptraf-ng、alsa amixer、less、gdb、主要的内核配置实用程序和许多其他工具控制了终端。
请注意,这些应用程序通常不称为“命令行”实用程序,它们通常使用readline库处理具有基本光标管理和编辑功能的单行输入。
根据对比,您可以在
ncurses
上面链接的手册页中阅读,这些程序可以称为:交互式,面向屏幕。 根据与面向行的vim
编辑器的对比,通常将其命名为面向屏幕的编辑器。ed
请注意评论中的以下建议:
启动时,应用程序将从启动它的 shell 继承 tty 驱动程序设置,这些设置可能与最初由原始 getty 设置的非常相似。
这包括缓冲输入直到捕获换行符,在即时光标位置回显输入键……所有面向屏幕的应用程序都可能不想要的功能
初始化时,程序将保存当前的 tty 驱动程序设置并根据程序员的意愿强制设置。
在退出之前......强烈邀请程序员恢复初始设置......除非面临在相当不可预测但肯定是混乱的情况下返回调用shell的风险......
一次一个字符进入缓冲区。输入回车后,一次检查(“解析”)一个字符以查找命令和选项的缓冲区。然后,如果可能,使用给定的选项执行命令。如果无法解析输入,则会给出一条错误消息,显示命令解释器无法弄清楚如何处理。
冲洗并重复,直到命令行解释器停止和/或计算机关闭。
基本上,它就像任何其他计算机程序一样。输入、IF 和 ELSE 语句、数据操作(在内存中进行计算和移动数据)和输出。