从vim会话中删除缓冲区

时间:2011-03-08 20:59:47

标签: windows vim

在保存会话之前,我没有正确删除缓冲区吗?它似乎浮现在我打开的每个缓冲区上。我将gvim与标准:tabe:tabnew命令一起使用。

  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. 无利润

3 个答案:

答案 0 :(得分:7)

保存/恢复会话时不保留缓冲区编号。因此,如果您有15个打开的缓冲区并删除一个缓冲区,则将有14个缓冲区。当会话恢复时,这14个缓冲区将被赋予2到15的数字,无论它们之前的数字是多少(在vim启动时,未命名缓冲区采用数字1,它将被会话文件关闭)。因此,检查会话文件创建的#14缓冲区是否与旧#14缓冲区具有相同的文件名。

更新:我检查了会话文件,发现args命令很可能导致问题。我是对的,缓冲区#14是从shell打开的吗?尝试创建以下命令并使用它而不是bd

command -nargs=? -bang BW :silent! argd % | bw<bang><args>

答案 1 :(得分:4)

你正在这样做 - 我几乎每天都这样做,它对我来说很好。 如果您使用bd取消列出缓冲区并保存会话,则在恢复时它应保持不列出状态。

为了找出问题所在,我建议打开会话文件并搜索“badd”(例如:g/badd以获取弹出列表)。这些badd是使用正确的索引将缓冲区加载回缓冲区列表的命令。

另外,我可能会以不同的名称保存第二个会话,并在两个文件之间执行vimdiff,以确保没有任何错误。

会话文件非常易于阅读,如果您遇到困难,您可以始终:h获取特定命令。

答案 2 :(得分:0)

好的:这也让我烦恼。我有一个命令(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&#39;”外部打开的文件,例如

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

在会话之间顽固地坚持,即使在做了平常之后:bd,:bw,:bw!等命令,和/或删除vim会话文件。

查看vim_session.vim文件,我注意到了一个&#39; argadd&#39;与违规的持久性文件对齐:

argadd /mnt/Vancouver/Programming/scripts/chunk.sh

所以,

:help arglist

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

删除该参数。

最后,在从缓冲区列表(:bd)清除该文件并重新启动Vim之后 - 恢复上一个会话,减去该文件。

编辑:如果您不想在执行&#34;:argd&#34;时输入长路径命令,你不需要用&#34;:arg&#34;列出任何东西,只需要做

:argd*