Vim自动滚动缓冲区

时间:2013-07-19 17:04:14

标签: vim buffer autoscroll

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

我在Vim中有两个缓冲区,一个包含源代码(B1),另一个包含文本文件a.txt(B2)。 B1中的源代码在Vim中使用自定义快捷方式运行,使用文本填充a.txt。我希望Vim每次更新时自动滚动B2,即使我的光标在B1中也是如此。所以,我只是希望缓冲区B2的行为方式与tail -f相同。

使用ConqueTerm执行此操作不是一个选项,因为缓冲区B2可以是来自其他插件的预览缓冲区。

2 个答案:

答案 0 :(得分:2)

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

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

不是尝试在vim中执行此操作,而是使用GNU Screen(vim编辑文件file1的一个终端区域,另一个正在运行{{1}的终端区域),这是一个不同的提案。对不同的文件tail -f):

  • 下载/安装GNU Screen(可能是file2
  • 运行apt-get install screen
  • 运行screen
  • 键入vim file1以将终端水平分割到中间(或者,在Ctrl-A S的最新版本中,screen将其垂直分割到中间)
  • 键入Ctrl-A |以切换到拆分的另一侧
  • 键入Ctrl-A Tab以在此方面启动新终端
  • 运行Ctrl-A c

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

Here's an image of me using <code>vim</code> and <code>gnu screen</code>.

答案 1 :(得分:1)

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

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

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

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

相关问题