为什么"历史| vim"不起作用?

Say*_*iss 9 linux vim bash

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

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

Vim: Finished.
Run Code Online (Sandbox Code Playgroud)

任何人都能解释一下吗?

pad*_*ddy 23

通过管道进入vim,您将更改标准输入流.因为vim是一个交互式程序,所以它需要标准输入作为控制台.

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

history | vim -
Run Code Online (Sandbox Code Playgroud)

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

history | more
history | less
Run Code Online (Sandbox Code Playgroud)

后两者是优选的.如果你管道进入vim,它会看到你的"文件"有修改,所以你不能用直接:q命令退出.相反,你必须强制退出:q!,这有点笨拙.

在另一方面,你可以退出更多更少只是打字q.看看这两个程序的手册页.你会经常使用它们.


根据Russell Silva在评论中的建议,当您从stdin读取时,可以在只读模式下打开vim.只是提供-R论点.然后你可以正常退出而不需要覆盖:

history | vim -R -
Run Code Online (Sandbox Code Playgroud)

  • 噢亲爱的.你所做的是将`vim`的输出与`history`的输入联系起来.那不是个好主意.请记住,`vim`仍在运行,因为它是一个交互式程序.您仍然可以发送命令,因为它仍在从标准输入读取,但您无法看到它,因为您正在将其输出汇总到另一个程序中.如果输入`:q!`并按回车键,则应返回shell.如果你已经进入其他编辑模式,你可能需要按几次"Esc"键. (3认同)
  • @paddy您可以使用只读模式解决`:q`问题,例如`history | vim -R -`。试试看!也许考虑编辑你的答案。 (2认同)