2013-05-13 191 views
3

vi.shVim的exec命令在命令行,和Vim:警告:输入不是从终端

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

main.sh

sh vi.sh file1 
sh vi.sh file2 

如果我exec的sh vi.sh file1sh main.sh,没有警告。

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

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

+0

你为什么要'猫main.sh'成'sh'?为什么不只是'./main.sh'? – 2013-05-13 08:36:52

+0

实际上是'bzcat *'如果'猫'工作,'bzcat'也应该工作。只需使用'猫'为例 – nfpyfzyf 2013-05-13 08:40:28

+0

[Vim输入不是来自终端]的可能重复(http://stackoverflow.com/questions/24281304/vim-input-is-not-from-a-terminal) – bain 2015-04-27 13:37:29

回答

0

此问题的另一个问题:

au StdinReadPost * set buftype=nofile 
+0

什么是'set - -'呢? – nfpyfzyf 2013-05-14 01:39:26

+0

'set --'将参数设置为参数的其余部分 – jthill 2013-05-14 01:59:06

1

很容易抑制警告。

main.sh

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

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

原因可能是Vim发现你的管道是打开的,而Vim命令不是从stdin中读取任何东西。所以警告就像提醒一样。

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

在我.vimrc~/bin/r

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

约这里 https://superuser.com/questions/336016/invoking-vi-through-find-xargs-breaks-my-terminal-why