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...
This commit is contained in:
parent
6bafb6c272
commit
1b72bc2fbf
@ -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
|
||||
|
||||
|
||||
@ -127,15 +126,14 @@ endfunction
|
||||
function! youcompleteme#EnableCursorMovedAutocommands()
|
||||
augroup ycmcompletemecursormove
|
||||
autocmd!
|
||||
autocmd CursorMovedI * call s:OnCursorMovedInsertMode()
|
||||
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('')
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user