将上次执行的命令的输出捕获到变量中,而不会影响Vim和行返回

时间:2016-02-05 19:13:32

标签: bash ubuntu vim

从这个问题:bash - automatically capture output of last executed command into a variable我使用了这个命令:

PROMPT_COMMAND='LAST="`cat /tmp/x`"; exec >/dev/tty; exec > >(tee /tmp/x)'

它有效,但是当我使用Vim时,我得到了这个:

# vim
Vim: Warning: Output is not to a terminal
然后Vim打开了。但它需要一段时间。有没有办法摆脱这个消息和减速?

当我列出dir并且我回显$ LAST时,它会删除返回行(\ n)。有没有办法保留返回线(\ n)?

1 个答案:

答案 0 :(得分:1)

我认为你要求的是难以实现的。 Vim测试输出是否是终端。您提供的命令会将输出重定向到tee命令。 tee将其输入(也称为menans:命令的输出)保存到文件将其输出到终端。但vim对此一无所知。它只知道它的输出不是终端。所以它输出警告。并且来自vim的源代码:

[...]
if (scriptin[0] == NULL)
    ui_delay(2000L, TRUE);
TIME_MSG("Warning delay");

这意味着这种重定向总会让你延迟2秒。

此外,例如,man vim命令不适用于此类重定向,因为终端输出具有某些属性(例如宽度和高度),而通用文件不具有该属性。所以......它不会工作。