瀏覽代碼

Auto merge of #1770 - vheon:fix-defer-omnifunc, r=Valloric

Defer setting the omnifunc only the first time

This basically is a return to the older approach where everything is done on OnBufferVisit. This way we just defer the first time.

<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/valloric/youcompleteme/1770)
<!-- Reviewable:end -->
Homu 9 年之前
父節點
當前提交
07f4402f49
共有 1 個文件被更改,包括 21 次插入5 次删除
  1. 21 5
      autoload/youcompleteme.vim

+ 21 - 5
autoload/youcompleteme.vim

@@ -22,6 +22,7 @@ set cpo&vim
 " This needs to be called outside of a function
 let s:script_folder_path = escape( expand( '<sfile>:p:h' ), '\' )
 let s:omnifunc_mode = 0
+let s:defer_omnifunc = 1
 
 let s:old_cursor_position = []
 let s:cursor_moved = 0
@@ -88,6 +89,21 @@ function! youcompleteme#Enable()
     autocmd CompleteDone * call s:OnCompleteDone()
   augroup END
 
+  " Setting the omnifunc require us to ask the server if it has a Native
+  " Semantic Completer for the current buffer's filetype. When vim first start
+  " this mean that we have to wait for the server to be up and running which
+  " would block vim's GUI. To avoid this we defer setting the omnifunc the
+  " first time to when we enter Insert mode and then update it on every
+  " BufferVisit as normal.
+  if s:defer_omnifunc
+    augroup ycm_defer_omnifunc
+      autocmd!
+      autocmd InsertEnter * call s:SetOmnicompleteFunc()
+                        \ | let s:defer_omnifunc = 0
+                        \ | autocmd! ycm_defer_omnifunc
+    augroup END
+  endif
+
   " Calling these once solves the problem of BufReadPre/BufRead/BufEnter not
   " triggering for the first loaded file. This should be the last commands
   " executed in this function!
@@ -412,6 +428,11 @@ function! s:OnBufferVisit()
 
   call s:SetUpCompleteopt()
   call s:SetCompleteFunc()
+
+  if !s:defer_omnifunc
+    call s:SetOmnicompleteFunc()
+  endif
+
   py ycm_state.OnBufferVisit()
   call s:OnFileReadyToParse()
 endfunction
@@ -544,11 +565,6 @@ function! s:OnInsertEnter()
     return
   endif
 
-  if !get( b:, 'ycm_omnicomplete', 0 )
-    let b:ycm_omnicomplete = 1
-    call s:SetOmnicompleteFunc()
-  endif
-
   let s:old_cursor_position = []
 endfunction