VIM代码在字符串中的任何地方完成
发布时间:2020-12-16 01:31:29 所属栏目:安全 来源:网络整理
导读:默认情况下,VIM中的代码完成将从单词开始进行搜索.有可能使它在单词中的任何地方.例如,如果C头文件中有“MY_DEVICE_CTRL_ADR”和“MY_DEVICE_STAT_ADR”,我可以开始输入CTRL_,然后让VIM为我完成吗? 好的,这是非常粗暴而准备的,但它似乎工作(至少在简单的情
默认情况下,VIM中的代码完成将从单词开始进行搜索.有可能使它在单词中的任何地方.例如,如果C头文件中有“MY_DEVICE_CTRL_ADR”和“MY_DEVICE_STAT_ADR”,我可以开始输入CTRL_,然后让VIM为我完成吗?
好的,这是非常粗暴而准备的,但它似乎工作(至少在简单的情况下).
这里首先是在给定文件上执行vimgrep的功能.这需要是一个单独的功能,所以它可以在以后静默地称为. function! File_Grep( leader,file ) try exe "vimgrep /" . a:leader . "/j " . a:file catch /.*/ echo "no matches" endtry endfunction 现在这里是一个自定义完成功能,它调用File_Grep()并返回匹配单词的列表.关键是调用add()函数,如果搜索项(a:base)在字符串中显示为ANYWHERE,则会向列表中添加匹配项. (有关此功能的结构,请参阅帮助完整功能.) function! Fuzzy_Completion( findstart,base ) if a:findstart " find start of completion let line = getline('.') let start = col('.') - 1 while start > 0 && line[start - 1] =~ 'w' let start -= 1 endwhile return start else " search for a:base in current file let fname = expand("%") silent call File_Grep( a:base,fname ) let matches = [] for this in getqflist() call add(matches,matchstr(this.text,"w*" . a:base . "w*")) endfor call setqflist([]) return matches endif endfunction 那么你只需要告诉Vim使用完整的功能: set completefunc=Fuzzy_Completion 您可以使用< c-x>< x-u>调用完成.当然,该函数可以用于搜索任何文件,而不是当前文件(只需修改let fname行). 即使这不是您正在寻找的答案,我希望它有助于您的追求! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |