Vim的exec命令在命令行,和Vim:警告:输入不是从终端
问题描述:
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 file1
或sh main.sh
,没有警告。
但是,如果我执行cat main.sh | sh
,它会给:Vim: Warning: Input is not from a terminal
。
有什么区别?我运行cat main.sh | sh
时如何解除此警告消息?
答
很容易抑制警告。
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
答
你已经做伪终端分配。 试着这么做(vi.sh
):
#!/bin/sh
exec vim -c "set ft=unix" -c "x" "[email protected]" < /dev/tty
相关:
你为什么要'猫main.sh'成'sh'?为什么不只是'./main.sh'? – 2013-05-13 08:36:52
实际上是'bzcat *'如果'猫'工作,'bzcat'也应该工作。只需使用'猫'为例 – nfpyfzyf 2013-05-13 08:40:28
[Vim输入不是来自终端]的可能重复(http://*.com/questions/24281304/vim-input-is-not-from-a-terminal) – bain 2015-04-27 13:37:29