我该如何在Vim中使用'wildignore'?

24

我在使用Vim时,对于wildignore设置的语法非常困惑。

假设我希望我的文件查找插件(我使用Ctrlp,它使用wildignore)不搜索隐藏文件和文件夹,即以.为前缀的文件和文件夹。

我应该如何设置?

4个回答

10

正如BenC所指出的,如果您正在使用外部搜索工具与CtrlP一起忽略文件,则Wildignore可能不是最好的方法。相反,您可以使用CtrlP的“custom_ignore”指令,如其文档所述:

let g:ctrlp_custom_ignore = '\v[\/]\.(git|hg|svn)$'
let g:ctrlp_custom_ignore = {
    \ 'dir':  '\v[\/]\.(git|hg|svn)$',
    \ 'file': '\v\.(exe|so|dll)$',
    \ 'link': 'SOME_BAD_SYMBOLIC_LINKS',
    \ }

我该如何分离多个文件模式? - nn0p
@nn0p 你是什么意思?这些扩展名是分开的。 - JackHasaKeyboard
能否按目录进行此操作? - Schneems

10

关于 ctrlp.vimwildignore,如果你输入 :help ctrlp-options 并仔细阅读,你会发现:

  

注意事项 #1:默认情况下,只有当使用 globpath() 扫描文件时,wildignoreg:ctrlp_custom_ignore 才会生效,因此这些选项在使用定义了 g:ctrlp_user_command 的命令时不起作用。

因此,你可能需要 unlet g:ctrlp_user_command(可能设置为默认命令)才能实际使用 wildignore。例如,在你的 ~/.vimrc 中添加:

if exists("g:ctrl_user_command")
    unlet g:ctrlp_user_command
endif
set wildignore+=.*

3
我曾尝试添加wildignore、custom_ignore,但ctrl_user_command未设置。最终在一个类似问题的回答中找到了另一个答案:@BenC提供的解决方案。Ctrlp会缓存结果,所以一旦你找到想要忽略的文件,无论你在wildignore/custom ignore中输入什么,它们仍然会显示,直到清除ctrlp缓存。https://dev59.com/QWEi5IYBdhLWcg3wueN0 - Paul

8

因为标题没有对应的最佳答案,这里是我的答案,它不是关于ctrlp而是关于wildignore。根据https://dev59.com/43RB5IYBdhLWcg3wl4EQ#579886

Vim会忽略在wildignore选项中指定的文件模式,因此您可以这样设置它们:

:set wildignore=*.o,*~,*.pyc

例如,我的wildignore设置如下:
 set wildignore+=*/node_modules/*,_site,*/__pycache__/,*/venv/*,*/target/*,*/.vim$,\~$,*/.log,*/.aux,*/.cls,*/.aux,*/.bbl,*/.blg,*/.fls,*/.fdb*/,*/.toc,*/.out,*/.glo,*/.log,*/.ist,*/.fdb_latexmk

我将其用于ctrlp和NERDTree。

5

请参见:help file-pattern。基本上,如果您只想排除以点号开头的任何内容,可以使用.*


2
没事了,我自己解决了,感谢提供的信息。输入:set:wildignore+=/home/USERNAME/.* - Fawkes5
2
@Fawkes5:你也可以尝试使用:set wildignore+=.* - ib.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接