2013-07-18 45 views
8

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

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

Vim: Finished. 

任何人能解释一下吗?

+1

如果你想使用vim作为寻呼机[vimpager](https://github.com/rkitover/vimpager)似乎工作得很好。 – FDinoff

回答

23

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

如果你想查看VIM,你应该告诉它,你正在阅读从标准输入文件(通过提供参数-):

history | vim - 

或者,你可以只使用

history | more 
history | less 

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

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


正如意见建议罗素·席尔瓦,您可以在只读模式,当你从标准输入读取打开VIM。只需提供-R参数。然后你就可以正常退出,而无需倍率:

history | vim -R - 
+0

我尝试过'vim |历史也......这似乎是一件可怕的事情..结果是外壳不响应..我不能输入任何说明..你能解释这个给我吗? – Sayakiss

+3

哦,亲爱的。你所做的是将'vim'的输出连接到'history'的输入。这不是一个好主意。请记住,'vim'仍然在运行,因为它是一个交互式程序。您仍然可以发送命令,因为它仍在从标准输入读取数据,但由于您将输出管道输送到另一个程序中,因此您无法看到它。如果你输入':q!'并按下回车键,你应该返回到shell。如果您已进入其他编辑模式,您可能需要按几次Esc键。 – paddy

+0

哇......当我输入':q!'并按下回车键时,我会返回到shell ...它的工作原理..真的非常感谢〜 – Sayakiss

1

除此之外的vim -,您可以尝试bash命令替换,如:

vim <(history) 

参见:

+1

+1。我喜欢这个解决方案(也在Ubuntu上成功测试过,因为“vi”实际上是一个到/ usr/bin/vim.tiny的符号链接)。尽管如此,为什么你会为此付出一些代价呢?人们有时会很残酷。 :) – syntaxerror

-1

这happend我试图把它发送到使用背景控制台(&)

一个脚本:

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

vi "$file" 

去除&,问题就走了。

+1

这是不相关的问题... –