Vim:警告:输入不是来自终端

Vim:警告:输入不是来自终端

我不是一个高级 Linux 用户,我很难理解一些新概念。我最近阅读了有关xargs命令的内容并想测试一些示例。其中一个让我非常困惑。

理论是这样的:如果我可以开始在vim(使用vim someFile)中编辑一个不存在的文件,并仅在编辑后(使用:qw)创建它,那么我可以使用echoxargs来做同样的工作:

echo "someFile" | xargs vim

xargsecho将获取from的输出stdout并将其作为参数传递给vim.然而这似乎会导致以下错误 -

Vim:警告:输入不是来自终端

最奇怪的是,打印错误后一秒钟vim就会打开文件,但是当我保存它并退出时,vim我的终端完全被窃听了。我需要关闭 tmux 窗格才能修复终端。所有这些之后,文件将被创建并且内容将如预期的那样。很明显这里有些不对劲,但我完全不知道为什么。

我找到了这个问题在 StackOverflow 中,但它没有回答我的问题。

答案1

stty sane将纠正您的终端问题。

发生这种情况的原因是xargs没有tty在子进程中打开您的。

您需要添加“open tty”-o选项。xargs

echo "sane" | xargs -o stty

这将stty sane连接到您的终端运行。它不会产生错误。

echo "sane" | xargs stty

这会在 BSD 上产生错误:

stty:stdin 不是终端

在 Linux 上:

stty:“标准输入”:设备的 ioctl 不合适

这对我有用:

echo /etc/hosts | xargs -o vim

相关内容