Como remover um nome de arquivo do bash completion, baseado em seu sufixo?

3

Desculpas se esta for uma duplicata, mas estou (sem sucesso) tentando editar as opções de conclusão do bash para vim .

Especificamente, ao editar um documento LaTeX, há muitos arquivos suplementares que eu não quero editar com vim . Ou seja, eu só quero editar .tex arquivos, não .aux , .pdf e outros arquivos que são gerados durante a compilação de um documento.

Eu brinquei com o comando complete , mas não estou tendo muita alegria ..

Por que o seguinte comando não remove .aux arquivos da lista de nomes de arquivos gerados?

$ complete -o default -X '^.*aux' vim
    
por Alex Leach 29.12.2014 / 12:39

1 resposta

4

O padrão que você deseja não é um regex, é um bash glob e você precisa do -f para informar que está concluindo os arquivos. Além disso, você não deseja default para -o , pois isso adicionará os nomes de arquivos que você acabou de filtrar, ou soltar a opção ou escolher algo diferente (usei dirnames para que também conclua os diretórios). O seguinte deve fazer o trabalho:

complete -f -o dirnames -X '*.@(aux|pdf)' vim

A cotação relevante da página man para o glob usado:

If the extglob shell option is enabled using the shopt builtin, several extended pattern matching operators are recognized. In the following description, a pattern-list is a list of one or more patterns separated by a |. Composite patterns may be formed using one or more of the following sub-patterns:

          ?(pattern-list)
                 Matches zero or one occurrence of the given patterns
          *(pattern-list)
                 Matches zero or more occurrences of the given patterns
          +(pattern-list)
                 Matches one or more occurrences of the given patterns
          @(pattern-list)
                 Matches one of the given patterns
          !(pattern-list)
                 Matches anything except one of the given patterns

extglob já deve estar ativado por bash conclusão, mas se não, você também precisa fazer isso.

    
por 29.12.2014 / 13:04