避免读取文件成为 Vim 中的备用缓冲区

Avoid read file being the alternate buffer in Vim

我遇到了 Vim 的问题,在这种情况下,NeoVim 是否有所作为。我有一个 autocmd 在创建特定类型的文件时包含样板文件,在本例中为 Vue 文件。这是代码:

autocmd BufNewFile *.vue silent! 0r ~/.dotfiles/skeletons/vue-pug-scss.vue

这个简单的东西很好用,除非使用 CTRL-^ 它返回到样板文件,我不想要这个。可以这么说,我不希望样板文件出现在我访问过的文件的历史记录中。

我尝试了很多东西,但我很难理解缓冲区列表如何与 CTRL-^ 一起工作。问题是,如果我 运行 :ls,样板文件不会出现,即使它是我在 CTRL-^ 时得到的。只有在我重新使用它后,它才会出现在 :ls 中。

我认为可以添加 | bd# 但它说没有缓冲区被删除。当我在新创建的文件上时,:bd# 不起作用,而 :b# 起作用。这对我来说听起来完全不合逻辑,或者充其量是不一致的。虽然我可能混淆了备用缓冲区和以前的缓冲区或其他东西。

有人知道我该怎么做吗?

来自 :help :read,强调我的:

If a file name is given with ":r", it becomes the alternate file. This can be used, for example, when you want to edit that file instead: ":e! #". This can be switched off by removing the 'a' flag from the 'cpoptions' option.

这里有两个 sub-questions:

I don't want the boilerplate file to be in my history of visited files so to speak.

一些可能的选项,排名不分先后

  1. 避免使用 :h :read 命令以支持 :h readfile():h append() 等;
  2. :h 'cpoptions' 中删除 a
  3. :h :keepalt 添加到您的命令中。

请注意,3) 仍然会创建一个新缓冲区,尽管它不会成为备用缓冲区。

The thing is that if I run :ls, the boilerplate file does not appear

When I am on the newly created file, :bd# does not work whereas :b# works. This sounds completely illogical to me, or inconsistent at best.

Vim 中的缓冲区具有“已加载”和“已列出”的布尔状态。两者相互独立。

:h :ls 默认只显示“列出的”缓冲区。要查看“未列出的”缓冲区,也必须键入 :ls!

:h :bdelete 将缓冲区状态同时更改为“未列出”和“已卸载”。由于您的缓冲区已经“未列出”和“卸载”,因此您得到了 :h E516。您可以使用 :h :bwipeout 完全删除缓冲区,但在这种情况下按 :h CTRL-^ 将导致 :h E23 错误。要设置新的备用缓冲区,您可以键入 :let @# = 42,其中 42 是一些 现有的 缓冲区编号或名称。或者,:balt foobar 可以创建一个名为 foobar 的新 unloadedlisted 缓冲区并设置它作为备选。