我想使用Vim来查看history
的结果(不在shell中)。我认为history | vim
会起作用(使用history
的结果作为vim
的输入),但它会返回:
$history | vim
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: Finished.
有人可以解释一下吗?
答案 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;,问题就消失了。