命令行中的Vim exec命令和Vim:警告:输入不是来自终端

命令行中的Vim exec命令和Vim:警告:输入不是来自终端,vim,Vim,vi.sh vim -c "set ft=unix" -c "x" $1 sh vi.sh file1 sh vi.sh file2 sh vi.sh file1 2>/dev/null sh vi.sh file2 2>/dev/null main.sh vim -c "set ft=unix" -c "x" $1 sh vi.sh file1 sh vi.sh file2 sh vi.sh file1 2>/dev/null sh vi.sh file2 2>

vi.sh

vim -c "set ft=unix" -c "x" $1
sh vi.sh file1
sh vi.sh file2
sh vi.sh file1 2>/dev/null
sh vi.sh file2 2>/dev/null
main.sh

vim -c "set ft=unix" -c "x" $1
sh vi.sh file1
sh vi.sh file2
sh vi.sh file1 2>/dev/null
sh vi.sh file2 2>/dev/null
如果我执行
sh vi.sh文件1
sh main.sh
,则没有警告

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


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

很容易抑制此警告

main.sh

vim -c "set ft=unix" -c "x" $1
sh vi.sh file1
sh vi.sh file2
sh vi.sh file1 2>/dev/null
sh vi.sh file2 2>/dev/null
但请注意,它实际上会抑制所有警告

原因可能是Vim发现您的管道已打开,而Vim命令未从
stdin
读取任何内容。所以这个警告就像一个提醒

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

这里还有一个关于这个问题的问题
~/bin/r

[ $# -eq 0 ] && set -- -;
vim -R "$@"
在my
.vimrc
中:

au StdinReadPost * set buftype=nofile

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

#/垃圾箱/垃圾箱
exec vim-c“set ft=unix”-c“x”“$@”
相关的:

  • 在维姆东南

为什么要
cat main.sh
进入
sh
?为什么不干脆
/main.sh
?实际上它是
bzcat*
如果
cat
起作用,
bzcat
也应该起作用。只需使用
cat
即可,例如
set的可能重复--
将参数设置为参数的其余部分不确定额外参数的原因,
exec vim[文件]