diff --git a/python/ycm/scrolling_range.py b/python/ycm/scrolling_range.py index 5dafb20c3c..0d0bd9ad2c 100644 --- a/python/ycm/scrolling_range.py +++ b/python/ycm/scrolling_range.py @@ -55,6 +55,13 @@ def Request( self, force=False ): # - look up the actual visible range, then call this function # - if not overlapping, do the factor expansion and request self._last_requested_range = vimsupport.RangeVisibleInBuffer( self._bufnr ) + # If this is false, either the self._bufnr is not a valid buffer number or + # the buffer is not visible in any window. + # Since this is called asynchronously, a user may bwipeout a buffer with + # self._bufnr number between polls. + if self._last_requested_range is None: + return False + self._tick = vimsupport.GetBufferChangedTick( self._bufnr ) # We'll never use the last response again, so clear it diff --git a/python/ycm/vimsupport.py b/python/ycm/vimsupport.py index 60616568fc..1479814598 100644 --- a/python/ycm/vimsupport.py +++ b/python/ycm/vimsupport.py @@ -206,7 +206,10 @@ class Range: start: Location = Location() end: Location = Location() - buffer = vim.buffers[ bufnr ] + try: + buffer = vim.buffers[ bufnr ] + except KeyError: + return None if not windows: return None