为什么没有"历史| VIM"工作?

时间:2013-07-18 02:17:19

标签: linux bash vim

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

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

Vim: Finished.

有人可以解释一下吗?

3 个答案:

答案 0 :(得分:23)

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

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

history | vim -

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

history | more
history | less

后两者是优选的。如果您输入 vim ,它会将您的“文件”视为已修改,因此您无法使用直接:q命令退出。相反,你必须强制退出:q!,这有点笨拙。

另一方面,您只需输入q即可退出更多更少。看看这两个程序的手册页。你会经常使用它们。


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

history | vim -R -

答案 1 :(得分:1)

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

vim <(history)

另见:

答案 2 :(得分:-1)

这种情况发生在我尝试将其发送到后台控制台(&amp;)

使用了一个脚本:

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

vi "$file"

删除&amp;,问题就消失了。