从这个问题: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)?
答案 0 :(得分:1)
我认为你要求的是难以实现的。 Vim测试输出是否是终端。您提供的命令会将输出重定向到tee
命令。 tee
将其输入(也称为menans:命令的输出)保存到文件,将其输出到终端。但vim
对此一无所知。它只知道它的输出不是终端。所以它输出警告。并且来自vim
的源代码:
[...]
if (scriptin[0] == NULL)
ui_delay(2000L, TRUE);
TIME_MSG("Warning delay");
这意味着这种重定向总会让你延迟2秒。
此外,例如,man vim
命令不适用于此类重定向,因为终端输出具有某些属性(例如宽度和高度),而通用文件不具有该属性。所以......它不会工作。