Vim在命令行中执行命令,以及Vim警告:输入不是来自终端

4

vi.sh

vim -c "set ft=unix" -c "x" $1

main.sh

sh vi.sh file1
sh vi.sh file2

如果我执行 sh vi.sh file1sh main.sh,没有警告。

但是如果我执行 cat main.sh | sh,会出现以下警告: Vim: 警告:输入不来自终端

这有什么区别?当我运行 cat main.sh | sh 时,如何消除此警告消息?


你为什么想要将 cat main.sh 输入到 sh 中?为什么不直接使用 ./main.sh 呢? - Gary Fixler
实际上应该是 bzcat * ... 如果 cat 能用,那么 bzcat 也应该能用。只需以 cat 为例即可。 - nfpyfzyf
可能是重复的问题:Vim输入不来自终端 - bain
3个回答

2

1
不确定为什么额外的参数 exec vim [files] </dev/tty 可以正常工作。 - localhostdotdev

1

抑制警告很容易。

main.sh

sh vi.sh file1 2>/dev/null
sh vi.sh file2 2>/dev/null

但请注意,它实际上抑制了所有警告。
原因可能是Vim发现您的管道在Vim命令不读取任何内容的情况下打开。因此,警告就像一个提醒。
因此,更好的解决方案是将命令保存在某个地方,例如make.sh本身并启动它。
关于这个问题的另一个问题在这里https://superuser.com/questions/336016/invoking-vi-through-find-xargs-breaks-my-terminal-why

0

~/bin/r

[ $# -eq 0 ] && set -- -;
vim -R "$@"

在我的.vimrc文件中:
au StdinReadPost * set buftype=nofile

set -- 将参数设置为其余的参数。 - jthill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接