终端 vim 中出现后台进程文本

终端 vim 中出现后台进程文本

第一次发帖,长期潜水,搜索过,没找到等等,等等。

我在 tmux 中的 iTerm2 中运行 vim。我正在运行一个带有 Grunt.js 的服务器,它在后台运行,不影响我使用。我在后台启动我的 grunt 服务器,如下所示:

grunt server &

Grunt 还会监视一堆文件,并在任何监视的文件被写入时运行一些任务。问题是,当我在 vim 中写入文件时,grunt 的输出开始在 vim 中呈现!以下是一些屏幕截图来说明问题:

写入文件之前:

在此处输入图片描述

写入文件后:

在此处输入图片描述

我尝试过什么?

我尝试通过以下方式运行“库存” vim:

vim -u NONE

…但问题仍然存在。这说明问题不在我的.vimrc。也许是 iTerm2 的问题,我不知道。求助。

答案1

启动后台进程不会自动重定向其输出。因此,后台进程发送到stdoutstderr出现在您启动进程的终端中的内容。

解决方案

  • 在启动时重定向后台进程的输出:
    grunt server >grunt-server.log 2>&1 &
  • 在单独的会话中启动后台进程tmux
  • nohup自动将输出重定向到nohup.out
    nohup grunt server &
  • 如果你不需要输出,你可以丢弃它:
    grunt server >/dev/null 2>&1 &

答案2

您无法从 Vim 本身修复该问题:grunt它只是通过一个输出泄漏内容,stdout该输出会泄漏您在该 shell 中执行的任何操作,包括 Vim。通常,只需执行简单的操作<C-l>即可清理屏幕。

您可以找到一种方法来grunt完全静音,或者在另一个 iTerm 窗格/选项卡/窗口中启动它。

相关内容