Estou tentando ignorar arquivos que são executáveis e não têm ponto neles, porque quando estou codificando em CI não quero abrir os arquivos executáveis binários com neovim. Aqui está o que estou tentando fazer:
ls -1
TODO.md
doc
jdsifqlwe.sh
own_os <-- ignore this file here, because it is an exetuable && has no dot in the name
own_os.c
Li a seção Completion-System - Standard Styles e encontrei file-patterns ignore-patterns, mas não consigo fazer direito. Não sei por que isso não está funcionando:
zstyle ':completion:*:*:nvim:*' ignored-patterns '^*.*(*)'
Porque isso é obter o arquivo certo:
ls -ld ^*.*(*)
Isso também funciona:
ls -1 *(^*) *.*(*)
Mas não consegui descobrir uma maneira de fazer vários padrões glob para padrões de arquivo, porque quando faço o seguinte, não funciona porque o argumento secundário é somente se o primeiro falhar:
zstyle ':completion:*:*:nvim:*' file-patterns '*(^*)' '*.*(*)'
Comando para recriar o diretório:
mkdir -p ./BogTest/doc && \
cd ./BogTest && \
touch TODO.md jqsifqlwe.sh own_os own_os.c && \
chmod +x own_os jqsifqlwe.sh
A solução é colocar ambos os padrões glob
file-patterns
na mesma string.Disto:
Para isso:
Graças ao @Gilles 'SO- pare de ser mau' , ele me apontou a direção certa :)
Como @Gilles disse,
ignored-patterns
combina strings com padrões, é usado para qualquer conclusão, não apenas para arquivos . Não é um glob, algo que se expande para uma lista de arquivos, então você não pode usar qualificadores glob ali.Para isso, você pode usar o
file-patterns
estilo que é consultado pela_files
função de utilidade de conclusão usada pela maioria das funções de conclusão que completam arquivos, incluindovim
/nvim
's.Agora, quando você adiciona algo a
ignored-patterns
, ele não é removido definitivamente das possíveis conclusões. Ocompleter
estilo padrão tem:Embora geralmente seja desejável adicionar mais (e
compinstall
iremos ajudá-lo com isso), como:Para a conclusão faça também expansão, correção, etc.
Com:
Se você digitar
nvim fo
Tab, e tiverfoo*
emignored-patterns
, e houver arquivosfoobar
e,foolish
mas nenhum outrofoanythingelse
arquivo no diretório,_complete
não retornará nada e então retornaremos ao_ignored
completer que restabelece os ignorados.Se você fizer:
Então esses executáveis sem extensão não serão mais oferecidos pelo
_complete
, mas também não serão oferecidos por_ignored
nenhum dos dois, então no dia em que você quiser editar umscript-with-a-rather-long-name-and-no-dot
, não poderá concluí-lo.O que você poderia fazer é definir:
Quando o
_complete
completador é incluído duas vezes, mas na primeira vez, a parte do completador do contexto de conclusão serácomplete-custom
em vez decomplete
.Então, se você tem:
Em vez de:
Então isso
file-patterns
será honrado pelo primeiro_complete
, mas não pelo segundo, então esses executáveis sem ponto serão concluídos somente se não houver outra conclusão possível.