11

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

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

Vim: Finished.

有人可以解释一下吗?

4

3 回答 3

26

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

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

history | vim -

或者,您可以使用moreless

history | more
history | less

后两者更可取。如果您通过管道进入vim,它会看到您的“文件”有修改,因此您不能直接使用:q命令退出。相反,您必须强制退出:q!,这有点笨拙。

另一方面,您可以通过键入或多或少地退出。查看这两个程序的手册页。你会经常使用它们。q


正如 Russell Silva 在评论中推荐的那样,当您从标准输入读取时,您可以以只读模式打开vim 。只需提供-R论据。然后您可以正常退出而无需覆盖:

history | vim -R -
于 2013-07-18T02:20:56.250 回答
1

除了vim -,您可以尝试 bash 命令替换,例如:

vim <(history)

也可以看看:

于 2015-02-18T12:10:47.880 回答
-1

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

使用的一个脚本:

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

vi "$file"

删除&,问题就消失了。

于 2017-01-03T20:31:52.753 回答