vi.sh
vim -c "set ft=unix" -c "x" $1
主文件
sh vi.sh file1
sh vi.sh file2
如果我 exec sh vi.sh file1
or sh main.sh
,则没有警告。
但如果我 exec cat main.sh | sh
,它会给出:Vim: Warning: Input is not from a terminal
.
有什么不同?运行时如何消除此警告消息cat main.sh | sh
?
vi.sh
vim -c "set ft=unix" -c "x" $1
主文件
sh vi.sh file1
sh vi.sh file2
如果我 exec sh vi.sh file1
or sh main.sh
,则没有警告。
但如果我 exec cat main.sh | sh
,它会给出:Vim: Warning: Input is not from a terminal
.
有什么不同?运行时如何消除此警告消息cat main.sh | sh
?
您必须进行伪 tty 分配。尝试类似(vi.sh
):
#!/bin/sh
exec vim -c "set ft=unix" -c "x" "$@" < /dev/tty
有关的:
很容易抑制警告。
主文件
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
在~/bin/r
[ $# -eq 0 ] && set -- -;
vim -R "$@"
在我的.vimrc
:
au StdinReadPost * set buftype=nofile