Existe o LC_COLLATE que classifica o ponto antes do traço?

6

Nos locais que eu verifiquei ( C , en_US.UTF-8 ) ponto (".") é classificado após traço ("-"). Quando eu cd e o diretório completo digam "som", então some-dir.git é completado antes de some.git . Eu também listo temas para o meu projeto e arquivo zdharma-256.theme é globbed antes de zdharma.theme . Uma ordem natural para mim é que o diretório mais curto seja concluído primeiro.

Existe um LC_COLLATE que eu poderia usar para corrigir isso?

Talvez não seja um problema de agrupamento, mas o problema de ignorar a extensão na primeira etapa da classificação? Há Zsh code (flags de globbing, etc.) que eu poderia usar?

    
por psprint 08.10.2017 / 09:20

1 resposta

4

Não, não há tal agrupamento, pelo menos não um padrão.

Veja como você pode verificar você mesmo:

  1. primeiro prepare um arquivo (as linhas Aa e aa estão aqui apenas para fins de teste)

    cat >test <<\eof
    Aa
    aa
    some.git
    some-dir.git
    eof
    
  2. execute o comando sort com todos os possíveis agrupamentos disponíveis no sistema:

    for loc in $(locale -a); do
        echo "____${loc}____";
        LC_COLLATE="$loc" sort test;
    done > test_sorted
    
  3. agora abra test_sorted com seu editor favorito e veja que diferentes localidades classificaram Aa e aa de forma diferente, mas todas elas têm some-dir.git antes de some.git . Em outras palavras,

    pcregrep -M 'some.git\nsome' test_sorted
    

    não dá nada.

O motivo pelo qual - vem antes de . se originar da tabela ascii e unicode (consulte man ascii ). O caractere de hífen (tecnicamente é chamado de sinal de hífen-menos) tem o código decimal de 45 (U + 002D), enquanto um ponto é de 46 (U + 002E).

Se você está desesperado o suficiente, você pode escrever sua própria localidade, mudando esse comportamento. O mais fácil é modificar um dos arquivos atuais, que você pode encontrar em /usr/share/i18n/locales/ .

    
por 11.10.2017 / 02:47