3

我正在尝试做一些非常简单的事情:

我在 Vim 中有两个缓冲区,一个带有源代码 (B1),另一个带有文本文件a.txt(B2)。B1 中的源代码使用 Vim 中的自定义快捷方式运行,并填充a.txt文本。我希望 Vim 在每次更新时自动滚动 B2,即使我的光标在 B1 中。所以,我只希望缓冲区 B2 表现得像这样tail -f

不能使用 ConqueTerm 执行此操作,因为缓冲区 B2 可以是其他插件的预览缓冲区。

4

2 回答 2

2

通常,vim 事件响应用户输入而触发。它们不只是在后台连续运行。

这篇文章详细介绍了一些技巧,您可以重新编写一些自定义代码来重新加载“tail -f”缓冲区并定期滚动到底部。

与其尝试在 vim 中完成这一切,这里有一个不同的建议,它可以使用GNU Screen实现类似的效果(一个终端区域用 vim 编辑文件file1,另一个运行tail -f不同的文件file2):

  • 下载/安装GNU Screen (也许apt-get install screen)
  • screen
  • vim file1
  • 键入Ctrl-A S以将终端水平拆分为中间(或者,在最近的版本中screenCtrl-A |将其垂直拆分为中间)
  • 键入Ctrl-A Tab以切换到拆分的另一侧
  • 键入Ctrl-A c以在此侧启动一个新终端
  • tail -f file2

现在分裂显示vim file1的一侧和另一侧显示tail -f file2。这是结果的图像。

这是我使用 <code>vim</code> 和 <code>gnu screen</code> 的图像。

于 2013-07-20T08:44:22.953 回答
1

此命令移动到包含 的窗口a.txt,重新加载它 ( edit),移动到末尾 ( +$),然后跳回到前一个窗口。您可以将其添加到运行源代码的快捷方式中,以便a.txt在代码运行时进行更新。

:exe bufwinnr("a.txt") . "wincmd w" | edit +$ | exe winnr("#") . "wincmd w"

如果您在映射中使用它,请记住转义条 ( \|) 并<CR>在末尾添加 a。

这将需要您的快捷方式在前台运行代码,并且 Vim 将在完成之前无响应(除非您按 Ctrl-C)。如果您希望 Vim 在a.txt更改时自动重新加载(从而绕过在前台运行代码的需要),您将需要一个外部机制来检测文件更改(例如inotifywait在 Linux 上)。据我所知,Vim 仅autoread在您将光标移动到该窗口时检查外部更改(带有 )。

于 2014-12-09T19:56:59.913 回答