有没有办法在 VimL/VimScript 中打开文件并使其对用户隐藏?我正在编写一个插件,它试图通过查找并可能搜索某些文件的内容来准确弄清楚它应该做什么。目前,我正在:sview
在新窗口中打开文件。使用 :global/.../y a
搜索文件并读出我找到的结果后,我:close
文件。但是,通过这种方式,可能会产生一种奇怪的用户体验,即看到您没有明确要求打开的文件在您之前瞬间打开,然后再次关闭。我目前的方法满足了我的需求,但我想找到一种视觉上不那么刺耳的方式来做到这一点。
如何在 VimScript 中打开文件,使其可以操作它(只读),而无需在窗口中显示它?
您始终可以使用 readfile()
将文件读入列表并直接处理列表,而无需使用缓冲区。
另一个允许您使用缓冲区的答案。
Vim 是单线程的,您运行的任何 vimscript 都将完全运行,中间不会刷新 GUI。因此,在用户面前闪烁的新窗口不是问题 - 您将在 Vim 有机会刷新屏幕之前完成它。
用户可以注意到的是布局更改。 sview
会在新窗口中打开缓冲区,因此 Vim 可能会调整当前打开的窗口的大小。关闭临时窗口时,其他窗口将再次调整大小 - 最终结果可能与原始大小不同。
解决方案是什么?不要创建新窗口。使用 :view
将临时缓冲区加载到当前窗口,执行您需要执行的任何操作,使用 :buffer
返回到原始缓冲区,并使用 :bdelete
关闭临时缓冲区(除非您要保持加载。
当然,如果更改当前加载的缓冲区,这将带来问题。 :hide
救援! :hide {cmd}
将{cmd}
运行,就好像当前缓冲区设置为 hidden
一样。这意味着任何将窗口切换到另一个缓冲区的命令都将简单地隐藏当前缓冲区,即使它发生了更改。
所以 - 只需加载临时缓冲区:hide view
.您可能还想用 :hide buffer
恢复它,以防万一出现问题并在临时缓冲区中引入更改(这意味着您也应该用 :bdelete!
关闭它)。