我正在尝试做一些非常简单的事情:
我在 Vim 中有两个缓冲区,一个带有源代码 (B1),另一个带有文本文件a.txt
(B2)。B1 中的源代码使用 Vim 中的自定义快捷方式运行,并填充a.txt
文本。我希望 Vim 在每次更新时自动滚动 B2,即使我的光标在 B1 中。所以,我只希望缓冲区 B2 表现得像这样tail -f
。
不能使用 ConqueTerm 执行此操作,因为缓冲区 B2 可以是其他插件的预览缓冲区。
我正在尝试做一些非常简单的事情:
我在 Vim 中有两个缓冲区,一个带有源代码 (B1),另一个带有文本文件a.txt
(B2)。B1 中的源代码使用 Vim 中的自定义快捷方式运行,并填充a.txt
文本。我希望 Vim 在每次更新时自动滚动 B2,即使我的光标在 B1 中。所以,我只希望缓冲区 B2 表现得像这样tail -f
。
不能使用 ConqueTerm 执行此操作,因为缓冲区 B2 可以是其他插件的预览缓冲区。
通常,vim 事件响应用户输入而触发。它们不只是在后台连续运行。
这篇文章详细介绍了一些技巧,您可以重新编写一些自定义代码来重新加载“tail -f”缓冲区并定期滚动到底部。
与其尝试在 vim 中完成这一切,这里有一个不同的建议,它可以使用GNU Screen实现类似的效果(一个终端区域用 vim 编辑文件file1
,另一个运行tail -f
不同的文件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
的一侧和另一侧显示tail -f file2
。这是结果的图像。
此命令移动到包含 的窗口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
在您将光标移动到该窗口时检查外部更改(带有 )。