Autocompletar da guia Bash / zsh: Dado o comando inicial, ignore determinados arquivos no diretório com autocomplete

6

O que eu estou perguntando é um pouco específico, e pode ser diferente de outras perguntas de autocompletar no Unix Stackexchange.

Suponha que eu tenha um diretório parecido com este

-rw-r--r-- 1 hlin117 staff 1.1K Sep 19 13:05 doc.aux
-rw-r--r-- 1 hlin117 staff  26K Sep 19 13:05 doc.log
-rw-r--r-- 1 hlin117 staff 177K Sep 19 13:05 doc.pdf
-rw-r--r-- 1 hlin117 staff  13K Sep 19 13:01 doc.tex

Faz muito pouco sentido tentar fazer vim doc.pdf e, no caso comum, eu não estaria fazendo vim doc.log ou vim doc.aux . Em vez disso, eu costumava fazer

vim doc.tex

Infelizmente, o preenchimento automático de tabulação sugerirá todos os 4 arquivos em vez de apenas doc.tex .

Existe uma maneira de eu digitar vim \t , e isso ignoraria alguns arquivos no meu diretório?

Mais geralmente, eu posso digitar o comando X \t , e escrever alguma configuração onde o comando de digitação X irá ignorar arquivos no meu diretório?

FYI: Eu uso o zsh. Não tenho certeza se o bash e o zsh terão soluções semelhantes.

    
por hlin117 19.09.2015 / 20:36

2 respostas

6

Em zsh, com o "novo" sistema de conclusão (ou seja, se você tiver compinit no seu .zshrc ), use o file-patterns style .

zstyle ':completion:*:*:vim:*' file-patterns '^*.(aux|log|pdf):source-files' '*:all-files'

Os arquivos que correspondem ao padrão *.(aux|log|pdf) só serão preenchidos na linha de comando vim se, de outra forma, não houver conclusão.

Você pode usar um padrão para o nome do comando, em particular * para corresponder a todos os comandos, exceto aqueles que são correspondidos explicitamente.

    
por 20.09.2015 / 00:55
2

Adicionando isso porque eu não uso o zsh, e há uma opção muito mais geral.

Coloque apenas na sua linha .bashrc a usando o comando interno do linux complete ; por exemplo

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

em que -f completará os nomes dos arquivos, -X filtrará os padrões correspondentes das escolhas possíveis com uma cadeia glob e -o plusdirs depois adicionará subdiretórios aos a lista. Como muitas vezes tenho muitos outros arquivos com o mesmo nome de base do meu arquivo .tex , atualmente uso

complete -f -X '*.@(pdf|png|jpg|jpeg|gif|eps|dvi|pdf|ps|svg|nc)' -o plusdirs vim

que desativa a conclusão de guias para gráficos e arquivos de dados estruturados. Caso contrário, eu tenho uma função de compilação de látex personalizada que exclui todos os arquivos auxiliares gerados após cada composição.

    
por 10.05.2017 / 07:44