Kaynağa Gözat

Use native TextChangedI instead of an emulation.

Long and personal experience, when TextChangedI gets used, YCM seems
to perform better, diagnostics will trigger much less frequently at
inappropriate occasions, even less with whitespace agnostic triggers,
if I recall correctly...
Francisco Lopes 9 yıl önce
ebeveyn
işleme
1b72bc2fbf
1 değiştirilmiş dosya ile 8 ekleme ve 38 silme
  1. 8 38
      autoload/youcompleteme.vim

+ 8 - 38
autoload/youcompleteme.vim

@@ -27,7 +27,6 @@ let s:defer_omnifunc = 1
 let s:old_cursor_position = []
 let s:cursor_moved = 0
 let s:moved_vertically_in_insert_mode = 0
-let s:previous_num_chars_on_current_line = strlen( getline('.') )
 let s:previous_allowed_buffer_number = 0
 
 
@@ -125,17 +124,16 @@ endfunction
 
 
 function! youcompleteme#EnableCursorMovedAutocommands()
-    augroup ycmcompletemecursormove
-        autocmd!
-        autocmd CursorMovedI * call s:OnCursorMovedInsertMode()
-        autocmd CursorMoved * call s:OnCursorMovedNormalMode()
-    augroup END
+  augroup ycmcompletemecursormove
+    autocmd!
+    autocmd CursorMoved * call s:OnCursorMovedNormalMode()
+    autocmd TextChangedI * call s:OnTextChangedInsertMode()
+  augroup END
 endfunction
 
 
 function! youcompleteme#DisableCursorMovedAutocommands()
-    autocmd! ycmcompletemecursormove CursorMoved *
-    autocmd! ycmcompletemecursormove CursorMovedI *
+  autocmd! ycmcompletemecursormove
 endfunction
 
 
@@ -533,7 +531,8 @@ function! s:SetOmnicompleteFunc()
   endif
 endfunction
 
-function! s:OnCursorMovedInsertMode()
+
+function! s:OnTextChangedInsertMode()
   if !s:AllowedToCompleteInCurrentBuffer()
     return
   endif
@@ -541,17 +540,6 @@ function! s:OnCursorMovedInsertMode()
   exec s:python_command "ycm_state.OnCursorMoved()"
   call s:UpdateCursorMoved()
 
-  " Basically, we need to only trigger the completion menu when the user has
-  " inserted or deleted a character, NOT just when the user moves in insert mode
-  " (with, say, the arrow keys). If we trigger the menu even on pure moves, then
-  " it's impossible to move in insert mode since the up/down arrows start moving
-  " the selected completion in the completion menu. Yeah, people shouldn't be
-  " moving in insert mode at all (that's what normal mode is for) but explain
-  " that to the users who complain...
-  if !s:BufferTextChangedSinceLastMoveInInsertMode()
-    return
-  endif
-
   call s:IdentifierFinishedOperations()
   if g:ycm_autoclose_preview_window_after_completion
     call s:ClosePreviewWindowIfNeeded()
@@ -596,8 +584,6 @@ endfunction
 
 
 function! s:OnInsertEnter()
-  let s:previous_num_chars_on_current_line = strlen( getline('.') )
-
   if !s:AllowedToCompleteInCurrentBuffer()
     return
   endif
@@ -617,22 +603,6 @@ function! s:UpdateCursorMoved()
 endfunction
 
 
-function! s:BufferTextChangedSinceLastMoveInInsertMode()
-  let num_chars_in_current_cursor_line = strlen( getline('.') )
-
-  if s:moved_vertically_in_insert_mode
-    let s:previous_num_chars_on_current_line = num_chars_in_current_cursor_line
-    return 0
-  endif
-
-  let changed_text_on_current_line = num_chars_in_current_cursor_line !=
-        \ s:previous_num_chars_on_current_line
-  let s:previous_num_chars_on_current_line = num_chars_in_current_cursor_line
-
-  return changed_text_on_current_line
-endfunction
-
-
 function! s:ClosePreviewWindowIfNeeded()
   let current_buffer_name = bufname('')