4

vi.sh

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

主文件

sh vi.sh file1
sh vi.sh file2

如果我 exec sh vi.sh file1or sh main.sh,则没有警告。

但如果我 exec cat main.sh | sh,它会给出:Vim: Warning: Input is not from a terminal.

有什么不同?运行时如何消除此警告消息cat main.sh | sh

4

3 回答 3

2

您必须进行伪 tty 分配。尝试类似(vi.sh):

#!/bin/sh
exec vim -c "set ft=unix" -c "x" "$@" < /dev/tty

有关的:

于 2015-02-18T12:03:27.257 回答
1

很容易抑制警告。

主文件

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

但请注意,它实际上会抑制所有警告。

原因可能是 Vim 发现您的管道已打开,而 Vim 命令不是从stdin. 所以警告就像一个提醒。

所以更好的解决方案是将命令保存在某个地方,例如make.sh本身并启动它。

关于此问题的另一个问题 https://superuser.com/questions/336016/invoking-vi-through-find-xargs-breaks-my-terminal-why

于 2013-05-13T08:44:16.390 回答
0

~/bin/r

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

在我的.vimrc

au StdinReadPost * set buftype=nofile
于 2013-05-13T10:01:57.710 回答