为什么不“历史| vim“的工作?

我想使用Vim来查看history的结果(不在shell中)。 我认为history | vim history | vim会工作(使用history的结果作为vim的input),但是它返回:

 $history | vim Vim: Warning: Input is not from a terminal Vim: Error reading input, exiting... Vim: Finished. 

有人可以解释吗?

Solutions Collecting From Web of "为什么不“历史| vim“的工作?"

通过管道进入vim ,你正在改变标准的输入流。 由于vim是一个交互式程序,它需要标准输入作为控制台。

如果你想在vim中查看,你应该告诉它你正在从stdin读取文件(通过提供参数- ):

 history | vim - 

或者,您可以使用更多更少

 history | more history | less 

后两者是可取的。 如果你输入vim ,它会看到你的“文件”有修改,所以你不能用直接的:q命令退出。 相反,你必须强迫退出:q! ,这有点笨重。

另一方面,只需输入q即可退出。 看看这两个程序的手册页。 你会用很多。


正如Russell Silva在评论中所建议的那样,当您从标准输入读取时,您可以以只读模式打开vim 。 只要提供-R参数。 那么你可以正常退出而不需要覆盖:

 history | vim -R - 

除了vim -之外,你可以尝试bash命令替换:

 vim <(history) 

也可以看看:

  • 如何将整个缓冲区写入命令行的标准输出? 在Vim SE
  • 如何非交互式地编辑文件(例如在管道中)? 在Vim SE

这发生在我试图发送到后台控制台(&)

使用一个脚本:

 ... vi "$file" & ... # change to just: vi "$file" 

消除&问题就消失了。