vi.sh
vim -c "set ft=unix" -c "x" $1
main.sh
sh vi.sh file1
sh vi.sh file2
如果我执行sh vi.sh file1
或sh main.sh
,则没有警告。
但如果我执行cat main.sh | sh
,它会给:Vim: Warning: Input is not from a terminal
。
有什么区别?如何在运行cat main.sh | sh
?
答案 0 :(得分:1)
很容易抑制警告。
<强> main.sh 强>
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
答案 1 :(得分:1)
你要进行伪tty分配。
尝试类似(vi.sh
)的内容:
#!/bin/sh
exec vim -c "set ft=unix" -c "x" "$@" < /dev/tty
相关:
答案 2 :(得分:0)
~/bin/r
中的
[ $# -eq 0 ] && set -- -;
vim -R "$@"
在.vimrc
:
au StdinReadPost * set buftype=nofile