我想用 Vim 查看结果history
(不在 shell 中)。我认为history | vim
会起作用(使用 的结果history
作为 的输入vim
),但它返回:
$history | vim
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: Finished.
有人可以解释一下吗?
通过管道进入vim,您正在更改标准输入流。因为vim是一个交互式程序,它要求标准输入是控制台。
如果你想在 vim 中查看,你应该告诉它你正在从标准输入读取文件(通过提供参数-
):
history | vim -
或者,您可以使用more或less:
history | more
history | less
后两者更可取。如果您通过管道进入vim,它会看到您的“文件”有修改,因此您不能直接使用:q
命令退出。相反,您必须强制退出:q!
,这有点笨拙。
另一方面,您可以通过键入或多或少地退出。查看这两个程序的手册页。你会经常使用它们。q
正如 Russell Silva 在评论中推荐的那样,当您从标准输入读取时,您可以以只读模式打开vim 。只需提供-R
论据。然后您可以正常退出而无需覆盖:
history | vim -R -
除了vim -
,您可以尝试 bash 命令替换,例如:
vim <(history)
也可以看看:
这发生在我试图将其发送到后台控制台(&)
使用的一个脚本:
...
vi "$file" &
...
# change to just:
vi "$file"
删除&,问题就消失了。