Nathan Kulzer Asked: 2019-08-10 06:09:06 +0800 CST2019-08-10 06:09:06 +0800 CST 2019-08-10 06:09:06 +0800 CST `维姆 | less 破坏了东西 772 这是我为我的问题找到的最好的地方。 从 gitbash 内部运行vim | less会导致它做一些我只能形容为“破坏”的事情。 通常我能得到 less 提示,有时是 vim 提示,很少是 shell 提示;只有shell提示符看起来很正常,但是你不能输入命令。 另外,您通常只能选择整行吗?哦,那是因为我在空行上测试。 回到我的问题: 为什么会发生这种情况,您如何预防? less vim 2 个回答 Voted Best Answer filbranden 2019-08-10T06:26:29+08:002019-08-10T06:26:29+08:00 发生这种情况是因为您正在运行两个想要并行控制您的终端的不同程序,并且它们都没有理由自行退出。 当您通过管道运行两个命令时,bash 会将第一个的标准输出连接到管道,然后它将连接到第二个的标准输入。然后它将并行运行这两个程序。在管道中,所有命令并行运行,而不是按顺序运行。 因此,无论 vim 在其标准输出中写入什么,都可以在其标准输入中以更少的成本使用。 但是 vim 并没有真正在标准输出上产生任何东西。由于它是一个全屏程序,它会尝试找到您的终端(或tty)连接到的位置,并会尝试控制它,在那里绘制它的 UI 并从那里获取击键。 less 类似,因为它会找到终端并用它来控制屏幕。 Vim 不产生 ant 标准输出,但 less 无法分辨并将保持连接到管道,等待任何行的到来。Vim 不会真正关闭标准输出的管道,因此 less 会继续尝试从中读取。 您可以与哪个程序交互,这是一个竞争条件。两者都是并行启动的,并且都想要你的终端,所以先得到它的那个赢了(或者最后一个赢了?可能是最后一个打败了第一个?) 在任何情况下,它都不会是 bash,因为 bash 正在等待管道完成,所以它不会显示另一个提示,直到运行的程序终止。 这应该可以解释发生了什么。我不确定你的意图是什么vim | less,但除了关于管道和 s 的理论讨论之外tty,该命令实际上没有任何用处......关于“如何防止这种情况”的最佳答案很简单:不要运行该命令! 如果您尝试使用 来完成某些特定的事情vim | less,那么请描述您尝试使用这些命令做什么(也许在一个单独的问题中),您应该会得到关于如何完成您正在尝试做的事情的更好答案。 lalligood 2019-08-10T06:26:57+08:002019-08-10T06:26:57+08:00 为什么不直接使用less?假设你有 vim 作为你的默认编辑器,你可以在里面按 'v'less来查看 vim 中的文件。(唯一可能的问题是,当您退出 vim 时,它会将您转回less.)
发生这种情况是因为您正在运行两个想要并行控制您的终端的不同程序,并且它们都没有理由自行退出。
当您通过管道运行两个命令时,bash 会将第一个的标准输出连接到管道,然后它将连接到第二个的标准输入。然后它将并行运行这两个程序。在管道中,所有命令并行运行,而不是按顺序运行。
因此,无论 vim 在其标准输出中写入什么,都可以在其标准输入中以更少的成本使用。
但是 vim 并没有真正在标准输出上产生任何东西。由于它是一个全屏程序,它会尝试找到您的终端(或
tty
)连接到的位置,并会尝试控制它,在那里绘制它的 UI 并从那里获取击键。less 类似,因为它会找到终端并用它来控制屏幕。
Vim 不产生 ant 标准输出,但 less 无法分辨并将保持连接到管道,等待任何行的到来。Vim 不会真正关闭标准输出的管道,因此 less 会继续尝试从中读取。
您可以与哪个程序交互,这是一个竞争条件。两者都是并行启动的,并且都想要你的终端,所以先得到它的那个赢了(或者最后一个赢了?可能是最后一个打败了第一个?)
在任何情况下,它都不会是 bash,因为 bash 正在等待管道完成,所以它不会显示另一个提示,直到运行的程序终止。
这应该可以解释发生了什么。我不确定你的意图是什么
vim | less
,但除了关于管道和 s 的理论讨论之外tty
,该命令实际上没有任何用处......关于“如何防止这种情况”的最佳答案很简单:不要运行该命令!如果您尝试使用 来完成某些特定的事情
vim | less
,那么请描述您尝试使用这些命令做什么(也许在一个单独的问题中),您应该会得到关于如何完成您正在尝试做的事情的更好答案。为什么不直接使用
less
?假设你有 vim 作为你的默认编辑器,你可以在里面按 'v'less
来查看 vim 中的文件。(唯一可能的问题是,当您退出 vim 时,它会将您转回less
.)