我正在尝试做一些非常简单的事情:
我在Vim中有两个缓冲区,一个包含源代码(B1),另一个包含文本文件a.txt
(B2)。 B1中的源代码在Vim中使用自定义快捷方式运行,使用文本填充a.txt
。我希望Vim每次更新时自动滚动B2,即使我的光标在B1中也是如此。所以,我只是希望缓冲区B2的行为方式与tail -f
相同。
使用ConqueTerm执行此操作不是一个选项,因为缓冲区B2可以是来自其他插件的预览缓冲区。
答案 0 :(得分:2)
通常,vim事件会响应用户输入而触发。它们不只是在后台连续运行。
This post详细介绍了一些可以重新设置的技巧,可以编写一些自定义代码来重新加载“tail -f”缓冲区并定期滚动到底部。
不是尝试在vim中执行此操作,而是使用GNU Screen(vim编辑文件file1
的一个终端区域,另一个正在运行{{1}的终端区域),这是一个不同的提案。对不同的文件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
。这是结果的图像。
答案 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
)。