jeetsukumaran / vim-buffergator

Vim plugin to list, select and switch between buffers.
499 stars 49 forks source link

Deleting a buffer fails after closing Buffergator when autoupdate is enabled #40

Open j201 opened 9 years ago

j201 commented 9 years ago

Steps to reproduce:

Result: The buffer isn't deleted. Instead, the window is split and the buffer appears in the top split.

buffergator-problem

I'm using version 7.4.778.

Here's a minimal vimrc that exhibits this problem (uses Vundle):

set nocompatible

set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'gmarik/Vundle.vim'

Plugin 'jeetsukumaran/vim-buffergator'

call vundle#end()

let g:buffergator_autoupdate = 1
ashiklom commented 8 years ago

:+1: Seconded.

Here is some relevant debug information.

One problem seems to be with indexing l:parts.

line 10:             let l:info["bufnum"] = l:parts[1] + 0
Error detected while processing function buffergator#UpdateBuffergator[7]..313[1]..278:
line   10:
E684: list index out of range: 1
E15: Invalid expression: l:parts[1] + 0
line 11:             if l:parts[2][0] == "u"
line   11:
E684: list index out of range: 2
E15: Invalid expression: l:parts[2][0] == "u"
line 12:                 let l:info["is_unlisted"] = 1
line 13:                 let l:info["is_listed"] = 0
line 14:             else
line 15:                 let l:info["is_unlisted"] = 0
line 16:                 let l:info["is_listed"] = 1
line 17:             endif
line 18:             if l:parts[2][1] == "%"
line   18:
E684: list index out of range: 2
...and so on...

Following the indexing errors are the following missing key errors:

E15: Invalid expression: l:parts[2][4] == "+"
line 52:                 let l:info["is_modified"] = 1
line 53:                 let l:info["is_readerror"] = 0
line 54:             elseif l:parts[2][4] == "x"
line 55:                 let l:info["is_modified"] = 0
line 56:                 let l:info["is_readerror"] = 0
line 57:             else
line 58:                 let l:info["is_modified"] = 0
line 59:                 let l:info["is_readerror"] = 0
line 60:             endif
line 61:             let l:info["bufname"] = parts[3]
line   61:
E684: list index out of range: 3
E15: Invalid expression: parts[3]
line 62:             let l:info["filepath"] = fnamemodify(l:info["bufname"], ":p")
line   62:
E716: Key not present in Dictionary: bufname
E116: Invalid arguments for function fnamemodify(l:info["bufname"], ":p")
E15: Invalid expression: fnamemodify(l:info["bufname"], ":p")
line 63:             " if g:buffergator_show_full_directory_path
line 64:             "     let l:info["filepath"] = fnamemodify(l:info["bufname"], ":p")
line 65:             " else
line 66:             "     let l:info["filepath"] = fnamemodify(l:info["bufname"], ":.")
line 67:             " endif
line 68:             let l:info["basename"] = fnamemodify(l:info["bufname"], ":t")
line   68:
E716: Key not present in Dictionary: bufname
E116: Invalid arguments for function fnamemodify(l:info["bufname"], ":t")
E15: Invalid expression: fnamemodify(l:info["bufname"], ":t")
line 69:             if len(l:info["basename"]) > self.max_buffer_basename_len
line   69:
E716: Key not present in Dictionary: basename
E116: Invalid arguments for function len(l:info["basename"]) > self.max_buffer_basename_len
function buffergator#UpdateBuffergator[7]..313[1]..278 aborted

I've also attached a complete logfile that contains this error: buffergator.log.txt

Hope this helps!