从vim会话中删除缓冲区

13

我是否没有在保存会话前正确删除缓冲区?它似乎粘附在我打开的每个缓冲区上。我使用带有标准 :tabe:tabnew 命令的 gvim。

  1. 干净启动gvim
  2. 我用 :tabe 打开了一些选项卡,做了一些工作
  3. :mksession! ~/session 保存我的会话状态
  4. 不需要第14个缓冲区,:14bd
  5. :ls 确认#14已被删除
  6. :mksession! ~/session 再次保存会话
  7. 完成当天的工作,:qa
  8. 第二天加载 gvim,:so ~/session
  9. 缓冲区14仍然存在!!
  10. ???
  11. 无利可图

如果您使用bw而不是bd会怎样? - Benoit
2
+1 只是为了“无利可图” :) - Matteo Italia
3个回答

8
保存/恢复会话时不保留缓冲区的编号。因此,如果您打开了15个缓冲区并删除了一个,则将只剩下14个缓冲区。当会话恢复时,这些14个缓冲区将被分配从2到15的数字,无论它们之前的编号是什么(编号1由vim启动时的未命名缓冲区使用,它将在会话文件中关闭)。因此,请检查会话文件所创建的第14个缓冲区是否与旧的第14个缓冲区具有相同的文件名。
更新:我查看了会话文件,并发现args命令可能会导致问题。我是否正确地理解,第14个缓冲区是从shell中打开的?请尝试创建以下命令并使用它来代替bd命令:
command -nargs=? -bang BW :silent! argd % | bw<bang><args>

我想更重要的是,缓冲区#14中的文件仍然存在。对于我来说,他们保存他们的数字。 - jjt
啊,是的,它是通过上下文中的“使用现有vim编辑”打开的。谢谢! - jjt

4
你做得很好-我几乎每天都这样做,对我来说效果很好。 如果您使用bd取消列表,并保存会话,则在恢复时应保持未列出状态。
要找出出了什么问题,建议打开会话文件并搜索“badd”(例如:g / badd 以获取弹出列表)。这些badd是将缓冲区加载回缓冲区列表并设置正确索引的命令。
另外,我建议将第二个会话存为不同的名称,并在两个文件之间执行vimdiff,以确保没有出现问题。
会话文件非常容易阅读,如果遇到困难,您可以始终:h查找特定命令。

是的,最后我选择了清除会话并重新开始。每次我打开会话、取消列出缓冲区,然后用不同的名称保存时,该缓冲区号和文件仍将被写入会话文件中,并带有一个错误的命令。 - jjt
只是为了十分清楚明白...您正在保存会话(例如:mks session.first),然后删除缓冲区:db 14,接着创建一个新的会话:mks session.second,最后您是否看到在"session.second"中某处有一行语句badd +14 myfile - PDug
  1. badd 不是 session 文件添加缓冲区到列表的唯一方式。
  2. badd 后面的数字与缓冲区编号完全无关。
- ZyX

1

好的,这也困扰了我很久。我有一个命令(Arch Linux:Krusader文件管理器)

vim --remote

这使我能够在Krusader中右键单击文件并在Vim中打开该文件。我还通过我的~/.vimrc保存Vim会话:

" Save session on quitting Vim:
autocmd! VimLeave * mksession! ~/.vim/vim_session.vim
" mksession! overwrites old session

" Restore session on starting Vim:
autocmd! VimEnter * source ~/.vim/vim_session.vim

然而,我通过“vim --remote”外部打开的文件,例如:
/mnt/Vancouver/Programming/scripts/chunk.sh

在执行常规命令如:bd、:bw、:bw!等以及删除vim会话文件后,有些文件可能会顽固地保留在会话中。查看vim_session.vim文件后,我注意到了一个'argadd'行,其中包含这个顽固的文件。
argadd /mnt/Vancouver/Programming/scripts/chunk.sh

所以,

:help arglist

:argd /mnt/Vancouver/Programming/scripts/chunk.sh

删除该参数。

最后,在清除缓冲区列表中的文件(:bd)并重新启动Vim之后,上一个会话将被恢复,但不包括该文件。


编辑:如果您在执行“:argd”命令时不想输入长路径,并且不需要使用“:arg”列出任何内容,请执行以下操作。
:argd*                                                                                     

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接