Bash completion: filtra arquivos de backup (~)

1

Eu gostaria que o bash filtrasse os arquivos de backup, com um nome terminando em ~ (til), quando os nomes de arquivos fossem preenchidos automaticamente.

Eu escrevi um script para definir isso ao usar o vim (tenho pouca experiência com scripts de shell):

#!/bin/bash

no_backups_complete()
{
    local cur=$2

    COMPREPLY=( $( compgen -o plusdirs -f -X '*\~' -- "$cur" ) )

    return 0
}

complete -o filenames -F no_backups_complete vim

No entanto, a execução do script não tem efeito aparente, o vim [Tab] ainda mostra todos os arquivos.

Eu tentei escapar / não escapar do ~ e colocar $ 2 e $ cur em / não entre aspas, sem diferença.

    
por Zalorin 26.05.2016 / 21:47

1 resposta

1

A sintaxe funciona perfeitamente, então provavelmente ela não está sendo adicionada ao seu ambiente bash por um motivo ou outro.

Veja se ele está carregado em seu ambiente:

Abra uma nova janela do terminal bash e execute:

declare -F | grep no_backups_complete

Para ver a declaração da função (se estiver disponível):

type no_backups_complete

Se você obtiver um resultado, para o primeiro comando, como:

declare -f no_backups_complete

que indica que está carregado no ambiente; se não houver resultado, não é. O tipo de resposta deve ser '... não encontrado', se não estiver disponível, ou listar a definição da função, se estiver disponível.

Continuando com a suposição de que não é carregado em seu ambiente bash:

Onde você colocou o arquivo?

  • A localização habitual está no diretório /etc/bash_completion.d/. Ele não precisa ser marcado como executável para ser colocado nesse diretório ou ter um nome específico. Você tem o formato correto.

  • Como teste, simplesmente digite source /path/to/your/completion.file e veja se o vim 'ignora' os arquivos que terminam em tils. Deveria - fez na minha concha bash.

  • Certifique-se de que: 1. copie o conteúdo do script para o seu arquivo .bashrc, ou
    2. Copie-o para /etc/bash_completion.d/ ou
    3. ter o arquivo de conclusão fornecido por .bashrc

Qualquer que seja o método que você vá, se você não der origem ao arquivo, você precisará reiniciar o terminal para que ele seja ativado. Se estiver no diretório /etc/bash_completion.d, recarregar o bash não o carregou ; Eu tive que fechar a janela do terminal e reabri-lo - isso pode ser específico do programa terminal, mas o .bashrc não era suficiente para aquele caso (opção 2). As outras duas opções começariam a funcionar assim que o .bashrc fosse originado.

Se é carregado em seu ambiente; Ou seja, os comandos declare -F | grep .. e type .. retornam os valores esperados, poste de volta com os resultados. Eu acho que é muito menos provável, e vale a pena passar por essas verificações rápidas antes de seguir esse caminho.

    
por 27.05.2016 / 05:29