ctrlp仍会搜索被忽略的目录

时间:2014-01-09 10:38:47

标签: vim ctrlp

我试图在.vimrc中放置忽略的设置

但是当我使用ctrlp在rails app文件夹下搜索

它仍在搜索vendor文件夹,因此需要花费大量时间。

但是当搜索完成后,我无法在vendor

下搜索任何内容

太奇怪了!如何解决它。

这是我的.vimrc设置文件。

http://d.pr/i/yMtK http://d.pr/i/Hy4u

" Sane Ignore For ctrlp
let g:ctrlp_custom_ignore = {
  \ 'dir':  '\.git$|vendor\|\.hg$\|\.svn$\|\.yardoc\|public\/images\|public\/system\|data\|log\|tmp$',
  \ 'file': '\.exe$\|\.so$\|\.dat$'
  \ }

当我在.vimrc

的末尾添加代码时
217 let g:NERDTreeIgnore=['\~$', 'vendor']
218 set wildignore+=*\\vendor\\**

当我第一次使用CTRLP在RAILS app文件夹下搜索时,它有效 但是NOT仍在以下时间工作。

我想也许有些设置会禁用忽略的设置?

以下是我的文件夹

的结构
.
├── Gemfile
├── Gemfile.lock
├── README.rdoc
├── Rakefile
├── app
│   ├── assets
│   ├── controllers
│   ├── helpers
│   ├── mailers
│   ├── models
│   ├── uploaders
│   ├── views
│   └── workers
├── auto.sh
├── config
│   ├── application.rb
│   ├── application.yml
│   ├── boot.rb
│   ├── database.yml
│   ├── environment.rb
│   ├── environments
│   ├── initializers
│   ├── locales
│   ├── macbookair_whenever_schedule.rb
│   ├── menu_navigation.rb
│   ├── navigation.rb
│   ├── resque.god
│   ├── resque_schedule.yml
│   ├── routes.rb
│   ├── schedule.rb -> ubuntu_whenever_schedule.rb
│   ├── tinymce.yml
│   └── ubuntu_whenever_schedule.rb
├── config.ru
├── db
│   ├── development.sqlite3
│   ├── migrate
│   ├── migrate_should_be_skip
│   ├── production.sqlite3
│   ├── schema.rb
│   └── seeds.rb
├── doc
│   └── README_FOR_APP
├── lib
│   ├── assets
│   ├── auto_tools
│   ├── tasks
│   └── url_automation_module.rb
├── log
│   ├── apalog
│   ├── development.log
│   ├── passenger.80.log
│   ├── production.log
│   └── prodution.log
├── output_name
├── public
│   ├── 404.html
│   ├── 422.html
│   ├── 500.html
│   ├── exports
│   ├── favicon.ico
│   ├── results.zip
│   ├── robots.txt
│   ├── sandbox
│   └── uploads
├── script
│   ├── delayed_job
│   └── rails
├── test
│   ├── fixtures
│   ├── functional
│   ├── integration
│   ├── performance
│   ├── test_helper.rb
│   └── unit
├── test.sh
├── tmp
│   ├── cache
│   ├── pids
│   ├── restart.txt
│   ├── sessions
│   └── sockets
├── tmplog
└── vendor
    └── bundle

5 个答案:

答案 0 :(得分:25)

如果您输入:help ctrlp-options并阅读一下,您会发现:

  

注意#1:默认情况下, wildignore g:ctrlp_custom_ignore   当 globpath()用于扫描文件时应用,因此这些选项   使用 g:ctrlp_user_command 定义的命令时不应用   被使用。

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

if exists("g:ctrlp_user_command")
  unlet g:ctrlp_user_command
endif
set wildignore+=*\\vendor\\**

之后,您需要刷新ctrlp缓存:在Vim中,在ctrlp模式下按 F5 ,或运行:CtrlPClearAllCaches,或删除缓存直接在shell中的目录:

rm -r ~/.cache/ctrlp/      # On Linux

答案 1 :(得分:16)

我的.vimrc文件的一部分。也许它会有所帮助

  set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.idea/*,*/.DS_Store,*/vendor

答案 2 :(得分:4)

您可以使用CtrlP将选择的wildignore vim设置。

set wildignore+=*\\vendor\\**

答案 3 :(得分:3)

检查您是否使用了某些特定的搜索命令,例如:

let g:ctrlp_user_command = 'find %s -type f'        " MacOSX/Linux
let g:ctrlp_user_command = 'dir %s /-n /b /s /a-d'  " Windows

这种配置会忽略g:ctrlp_custom_ignore选项。

答案 4 :(得分:0)

wildignore可能被其他命令使用,g:ctrlp_custom_ignore失败的原因是g:ctrlp_user_command,例如,这是我的:

if executable('rg')
    let g:ctrlp_user_command = 'rg %s --files --hidden --color=never --glob ""'
endif

在这种情况下,rg拥有自己的忽略方式,只需将.git设置为.gitignore,rg将不会搜索.gitignore中的任何文件。