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

时间:2013-05-13 08:19:36

标签: vim

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: Warning: Input is not from a terminal

有什么区别?如何在运行cat main.sh | sh

时忽略此警告消息

3 个答案:

答案 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