Vim:警告:输入不是来自终端

时间:2016-03-13 17:18:12

标签: bash vim

我编写了简单的jsonview脚本来查看json文件:

#!/bin/bash
tmp_file=/tmp/jsonview.json
cat "${@}" | python -m json.tool > $tmp_file
[[ -f $tmp_file ]]  &&  vim $tmp_file

我没有使用less,因为我需要语法突出显示。 无用的cat cat ${@} | ...是可以将脚本用作过滤器:

jsonview t.json

cat t.json | jsonview

如果使用jsonview作为第二个管道案例 - 尽管vim不是在管道上调用而是在具体文件上调用,我在主题中得到了警告。我可以查看json文件,但退出后,它会弄乱终端。这是警告的原因?为什么vim认为它是从管道读取的?

2 个答案:

答案 0 :(得分:3)

当重定向标准输入时,Vim不喜欢它,除非您将其作为vim -调用。在那种情况下,它知道stdin被重定向并处理它。作为附带好处,它还可以让你摆脱临时文件。

#!/bin/bash
cat "$@" | python -m json.tool | vim +'set syntax=javascript' -R -

始终引用"$@"以确保带有空格的文件名不会弄乱您的脚本。

退出Vim时,

-R摆脱了保存缓冲区的提示。

答案 1 :(得分:0)

您也可以执行vim $tmp_file </dev/tty来告诉vim输入是来自终端,而不是来自标准输入。