Posso obter o plugin Vim Ctrlp para ignorar uma pasta específica em um projeto?

14

O plug-in Vim Ctrlp tem como ignorar globalmente determinados nomes de pastas. Por exemplo:

let g:ctrlp_custom_ignore = '\v[\/]\.(git|hg|svn)$'

No entanto, tenho uma regra de ignorar específica para um projeto. Eu gostaria de algo mais parecido com um arquivo .gitignore .

Existe uma maneira de ignorar uma pasta específica em um projeto específico sem modificar minha configuração global?

    
por Nathan Long 24.09.2013 / 17:03

4 respostas

19

Use um comando de listagem personalizada

Ctrlp permite que você diga qual comando usar para obter uma lista de arquivos na pasta. Então, se você quisesse excluir qualquer coisa chamada beets.txt , poderia fazer:

let g:ctrlp_user_command = 'find %s -type f | grep -v "beets.txt"'

Isso é global, mas começa a apontar para a resposta: forneça seu próprio comando de shell.

Melhor ainda, Ctrlp permite que você forneça vários comandos de shell com marcadores, o que significa "se você vir este marcador no diretório raiz, use este comando".

Encontrei isso em :help ctrlp e modifiquei um pouco com base no comentário do autor sobre um problema.

let g:ctrlp_user_command = {
  \ 'types': {
    \ 1: ['.git', 'cd %s && git ls-files --cached --exclude-standard --others'],
    \ 2: ['.hg', 'hg --cwd %s locate -I .'],
    \ },
  \ 'fallback': 'find %s -type f'
  \ }

Isso significa: "Se você vir .git na pasta, use git ls-files... . Caso contrário, se vir .hg , use hg --cwd... , caso contrário, use um find normal".

Portanto, para ignorar uma pasta específica em um projeto, crie um comando que ignore essa pasta e, em seguida, insira um marcador exclusivo nesse projeto para permitir que o Ctrlp deseje usar seu comando especial aqui .

(No meu caso, eu realmente queria ignorar arquivos que estavam em .gitignore , então o comando git ls-files acima funciona para mim.)

    
por 15.10.2013 / 20:07
9

Se você estiver usando o back-end do Silver Searcher para CtrlP (que é muito mais rápido), basta adicionar um arquivo .agignore ao diretório do projeto no mesmo formato de .gitignore :

.git/
.hg/
.svn/

Como alternativa, mantenha um arquivo global ~/.agignore .

Adicione o Silver Searcher como o backend com isso no seu .vimrc

let g:ctrlp_user_command = 'ag %s -l --nocolor --hidden -g ""'
    
por 15.05.2015 / 10:17
4

Especifica arquivos intencionalmente não rastreados em um arquivo

Para resolver isso com um arquivo como .gitignore (baseado na solução grep do Nathan), criei um arquivo chamado .ctrlpignore e coloquei os padrões que devem ser ignorados, separados por linhas:

node_modules/
\.log$
...

E minha configuração ctrlp:

let g:ctrlp_user_command = 'find %s -type f | grep -v "'cat .ctrlpignore'"'

Talvez o .gitignore em si possa ser usado para ignorar os arquivos em ctrlp, não precisando criar um novo arquivo para fazer quase a mesma coisa.

    
por 12.04.2015 / 23:37
0

Como Wagner Andrade disse, usar uma .ctrlpignore separada seria uma boa ideia.

Uma configuração de vim mais robusta e conveniente é assim:

let g:ctrlp_user_command = 'cd %s;
  \ commonfilter="\.(jpg|bmp|png|jar|7z|zip|tar|gz|tgz|bz)$";
  \ if [ ! -r ".ctrlpignore" ]; then
  \   find . -type f | grep -Evi "$commonfilter";
  \ else
  \   find . -type f | grep -vF "$(cat .ctrlpignore)" | grep -Evi "$commonfilter";
  \ fi'

.ctrlpignore pode ser colocado em qualquer diretório que seja reconhecido como um diretório raiz por ctrlp. Aqui está um exemplo, cada linha está começando com ./

vim ~/.ctrlpignore

./Desktop
./R
./.vim
./.local/lib
.....

Nota:

  1. grep -F interpretará padrão, ex. './.tmp', como uma string fixa, se você não quiser que seu './ptmp' seja filtrado. Ainda há alguns bugs triviais: './.tmp' também irá filtrar './.tmp2'. Esqueça, eu não gosto de \.

  2. g:ctrlp_custom_ignore será ignorado se g:ctrlp_user_command for definido. Isso pode ser feito em um g:ctrlp_user_command

  3. mais complexo
  4. lista branca em vez de lista negra também é possível. Mais conveniente se implementada em um script separado

por 21.12.2015 / 07:18

Tags