我正在重新学习我的vim技能,并使用Ctrl-n命令来完成它。我在Perl中编程。当我处于插入模式并按Ctrl-n时,我在终端底部收到一条消息,提示它正在“扫描包含的文件”,看起来像在扫描perl发行目录中的文件。可能要花几秒钟才能完成。看来我对其中包含已注释掉的软件包执行了以下操作:我缺少什么吗?

我正在使用perl-support插件。

评论

我在.vimrc中尝试了类似的方法,但是它起作用了:让g:ctrlp_custom_ignore = {'dir':'^ / usr /'}让g:ctrln_custom_ignore = {'dir':'^ / usr /'}

#1 楼

默认情况下,当您按下C-nC-p时,Vim会在各种来源中查找要填充完成菜单的候选者。

这些来源可以使用本地缓冲区'complete'选项进行配置。

此选项的值是一个用逗号分隔的标志列表。每个标志在:h 'cpt中都有其自己的含义:

.   scan the current buffer ('wrapscan' is ignored)
w   scan buffers from other windows
b   scan other loaded buffers that are in the buffer list
u   scan the unloaded buffers that are in the buffer list
U   scan the buffers that are not in the buffer list
k   scan the files given with the 'dictionary' option
kspell  use the currently active spell checking |spell|
k{dict} scan the file {dict}.  Several "k" flags can be given, patterns are valid too.  For example:  
        :set cpt=k/usr/dict/*,k~/spanish
s   scan the files given with the 'thesaurus' option
s{tsr}  scan the file {tsr}.  Several "s" flags can be given, patterns are valid too.
i   scan current and included files
d   scan current and included files for defined name or macro |i_CTRL-X_CTRL-D|
]   tag completion
t   same as "]"


默认情况下,其值为.,w,b,u,t,i,表示:

   1. the current buffer
   2. buffers in other windows
   3. other loaded buffers
   4. unloaded buffers
   5. tags
   6. included files


如果发现扫描包含的文件花费太多时间,则可以尝试从i选项中删除'cpt'标志。

如果要将其从全局值中删除,要影响默认情况下的所有缓冲区,您可以在vimrc中进行写:在perl内的一个autocmd: br />
setglobal complete-=i



要查看vimrc选项的当前全局值和局部值以及它们的最后设置位置,可以使用以下命令:

augroup PerlSettings
    autocmd!
    autocmd FileType perl setlocal complete-=i
augroup END


或更短:

setlocal complete-=i



如果唯一感兴趣的源是当前缓冲区,那么可以使用~/.vim/after/ftplugin/perl.vim代替'complete'。有关更多信息,请参见C-n

评论


有没有一种方法可以排除某些路径下文件中的关键字?

– SteveD
17年2月19日在23:28

Vim的“完成”文档提到“包含的文件”,但是没有链接到这意味着什么的更多细节。因此,请阅读:他的包含搜索。在那里,您可以看到“ include”选项定义了什么意思,并且使用“ path”进行搜索。这些功能对于进行更精细的自定义很有用,而不仅仅是打开/关闭整个功能。

– jwd
19/12/3在19:34