2013-05-13 230 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