





















今天给 Vim 加了个 CursorHold 事件。加完提交到 git 仓库中,发现写 Cur 时,neocomplcache 给出的补全是 Cursorhold,而不是代码中写的 CursorHold,得手动改过来,很郁闷。这已经不是我第一次遇到了,决定需求解决方案。
neocomplcache 关于大小写的设置变量有两个,g:neocomplcache_enable_ignore_case和g:neocomplcache_enable_smart_case。这两个我都没有设置啊。以为是 bug,上网搜索无果,遂看源码,最终发现这真是款自作聪明的插件——在输入文本而不是代码时,它将总是忽略大小写!
补丁如下:
commit aaed422a2dff182954813c16db242545389a0018
Author: 依云 <lilydjwg@gmail.com>
Date: 2012-01-03 23:01:43 +0800
neocomplcache: never use 'is_text_mode'
This always causes inconvenience for me.
diff --git a/autoload/neocomplcache.vim b/autoload/neocomplcache.vim
index 26a2d09..ac1e0f0 100644
--- a/autoload/neocomplcache.vim
+++ b/autoload/neocomplcache.vim
@@ -995,9 +995,6 @@ endfunction"}}}
function! neocomplcache#is_eskk_enabled()"{{{
return exists('*eskk#is_enabled') && eskk#is_enabled()
endfunction"}}}
-function! neocomplcache#is_text_mode()"{{{
- return s:is_text_mode || s:within_comment
-endfunction"}}}
function! neocomplcache#is_win()"{{{
return has('win32') || has('win64')
endfunction"}}}
@@ -1135,9 +1132,7 @@ function! neocomplcache#get_complete_result(cur_text, ...)"{{{
" Save options.
let l:ignorecase_save = &ignorecase
- if neocomplcache#is_text_mode()
- let &ignorecase = 1
- elseif g:neocomplcache_enable_smart_case && l:cur_keyword_str =~ '\u'
+ if g:neocomplcache_enable_smart_case && l:cur_keyword_str =~ '\u'
let &ignorecase = 0
else
let &ignorecase = g:neocomplcache_enable_ignore_case
@@ -1289,26 +1284,6 @@ function! neocomplcache#integrate_completion(complete_result, is_sort)"{{{
endfor
endif"}}}
- " Convert words.
- if neocomplcache#is_text_mode()"{{{
- if l:cur_keyword_str =~ '^\l\+$'
- for l:keyword in l:complete_words
- let l:keyword.word = tolower(l:keyword.word)
- let l:keyword.abbr = tolower(l:keyword.abbr)
- endfor
- elseif l:cur_keyword_str =~ '^\u\+$'
- for l:keyword in l:complete_words
- let l:keyword.word = toupper(l:keyword.word)
- let l:keyword.abbr = toupper(l:keyword.abbr)
- endfor
- elseif l:cur_keyword_str =~ '^\u\l\+$'
- for l:keyword in l:complete_words
- let l:keyword.word = toupper(l:keyword.word[0]).tolower(l:keyword.word[1:])
- let l:keyword.abbr = toupper(l:keyword.abbr[0]).tolower(l:keyword.abbr[1:])
- endfor
- endif
- endif"}}}
-
if g:neocomplcache_max_keyword_width >= 0"{{{
" Abbr check.
let l:abbr_pattern = printf('%%.%ds..%%s', g:neocomplcache_max_keyword_width-15)
@@ -1671,9 +1646,7 @@ function! neocomplcache#complete_common_string()"{{{
" Get cursor word.
let [l:cur_keyword_pos, l:cur_keyword_str] = neocomplcache#match_word(s:get_cur_text())
- if neocomplcache#is_text_mode()
- let &ignorecase = 1
- elseif g:neocomplcache_enable_smart_case && l:cur_keyword_str =~ '\u'
+ if g:neocomplcache_enable_smart_case && l:cur_keyword_str =~ '\u'
let &ignorecase = 0
else
let &ignorecase = g:neocomplcache_enable_ignore_case
@@ -1771,9 +1744,7 @@ function! s:make_quick_match_list(list, cur_keyword_str)"{{{
" Save options.
let l:ignorecase_save = &ignorecase
- if neocomplcache#is_text_mode()
- let &ignorecase = 1
- elseif g:neocomplcache_enable_smart_case && a:cur_keyword_str =~ '\u'
+ if g:neocomplcache_enable_smart_case && a:cur_keyword_str =~ '\u'
let &ignorecase = 0
else
let &ignorecase = g:neocomplcache_enable_ignore_case
diff --git a/autoload/neocomplcache/sources/dictionary_complete.vim b/autoload/neocomplcache/sources/dictionary_complete.vim
index 97e7b12..dda34be 100644
--- a/autoload/neocomplcache/sources/dictionary_complete.vim
+++ b/autoload/neocomplcache/sources/dictionary_complete.vim
@@ -79,11 +79,7 @@ endfunction"}}}
function! s:source.get_keyword_list(cur_keyword_str)"{{{
let l:list = []
- let l:filetype = neocomplcache#is_text_mode() ? 'text' : neocomplcache#get_context_filetype()
- if neocomplcache#is_text_mode() && !has_key(s:dictionary_list, 'text')
- " Caching.
- call s:caching()
- endif
+ let l:filetype = neocomplcache#get_context_filetype()
for l:ft in neocomplcache#get_source_filetypes(l:filetype)
call neocomplcache#cache#check_cache('dictionary_cache', l:ft, s:async_dictionary_list,
@@ -102,7 +98,7 @@ function! s:caching()"{{{
return
endif
- let l:key = neocomplcache#is_text_mode() ? 'text' : neocomplcache#get_context_filetype()
+ let l:key = neocomplcache#get_context_filetype()
for l:filetype in neocomplcache#get_source_filetypes(l:key)
if !has_key(s:dictionary_list, l:filetype)
\ && !has_key(s:async_dictionary_list, l:filetype)
2012年3月30日更新:针对 neocomplcache 6.2 的补丁在此。
2013年6月2日更新:针对 neocomplcache 8.0 的补丁在这里或者这里。对应的 git 提交为 17dd164。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。